Articles of winapi

CryptGenRandom熵

CryptGenRandom是Windows中的CryptoAPI中的随机数生成器函数。 那个随机数发生器有多less熵? 我已经看了很多,但是我找不到。 提前致谢。

如何以编程方式确定用户帐户是否是Windows中特定组的成员?

给定一个组名和一个用户帐户,我想知道提供的用户是否属于一个特定的组。 用户可以是本地用户或域用户,并且该组可以是本地组或域组,并且该组也可以嵌套在其他组内。 简而言之,我正在寻找一个像bool IsUserMemberOf(User, Group)这样的函数,它将在内部调用相应的Win32 API来执行search。 我想进行上述查询的过程应具有查询本地和AD组所需的权限。 我想运行企业pipe理员帐户下的进程应该做的查询任何森林区议会,但可能不适用于不属于域的机器。 关于这个查询过程应该运行什么帐户的任何想法,以便它可以查询LSA以及AD?

Microsoft One Note 2010如何实现停靠在桌面上的窗口?

我第一次使用这个function – 在MS One Note 2010中,点击“Dock to Desktop”button。 然后应用程序直接停靠在屏幕的底部。 如果一个窗口最大化,窗口不会重叠或者不重叠 – OneNote窗口就其固定的屏幕占用率而言与任务栏类似。 来想一想,我已经看到了另外一个地方:Windows 7放大镜。 我很想知道这是如何取消? 它是一个窗口属性,可以在WinForms应用程序中应用,或者我可以使用Windows API / C ++来做到这一点? 还是比这更棘手?

将窗口焦点恢复到之前的所有者

我有一个应用程序,位于系统托盘,当双击打开一个窗口,相当标准; 然而,当你关上窗户时,我希望窗户在我被打开之前被重点聚焦。 如果通过键盘快捷键popup我的窗口,我可以在窗口显示前使用GetForegroundWindow API调用,然后在窗口closures后使用SetForegroundWindow方法(使用第一个调用的值)恢复重点。 当您通过系统托盘打开窗口时,这不起作用,因为用户本质上已经使系统托盘成为焦点。 我已经尝试使用GetForegroundWindow , GetWindow和GetTopMostWindow的组合来尝试导航z顺序来查找系统托盘之后的第二个窗口(假设系统托盘已经跳到顶部,因此在逻辑上下一个将是原来的前面)。 虽然我没有取得任何成就,但是这些function的结果是无用的,因为它们似乎没有给我任何逻辑结构。 有没有人有任何想法,我怎么能做到这一点? 我曾经想过某种背景监视器,它只是坐在监视器前面的窗口并存储一个指针,但最好是片状的。 这是在Windows(我个人在x64 Server 2008)和.Net 3.5。

使用FindVCLWindow在Delphi中调用WinHelp32(WinXP Pro SP3 32bit)

那里有什么问题? procedure TForm1.VCLHelpClick(Sender: TObject); var Ctrl : TWinControl; begin Ctrl := FindVCLWindow(Mouse.CursorPos); if Ctrl <> nil then if Form2.Cursor = crHelp then begin if Ctrl = CreatorEdit then Application.HelpCommand(HELP_CONTEXT,001); if Ctrl = EditorEdit then Application.HelpCommand(HELP_CONTEXT,002); if Ctrl = UpdaterEdit then Application.HelpCommand(HELP_CONTEXT,003); if Ctrl = IdeaEdit then Application.HelpCommand(HELP_CONTEXT,004); if Ctrl = PorterEdit then Application.HelpCommand(HELP_CONTEXT,005); end; end; […]

如何使用IDispatch.Invoke调用接收浮点值的函数?

我无法使用IDispatch.Invoke调用具有浮点参数和浮点结果的函数。 这是一个最小的复制: #include <atlbase.h> #include <comutil.h> int main(int argc, char* argv[]) { CoInitialize(NULL); CComPtr<IDispatch> wordapp; if (SUCCEEDED(wordapp.CoCreateInstance(L"Word.Application", NULL, CLSCTX_LOCAL_SERVER))) { CComVariant result; CComVariant centimeters((float)2.0); CComVariant retval = wordapp.Invoke1(L"CentimetersToPoints", &centimeters, &result); } return 0; } 我正在使用ATL CComPtr使事情更清洁。 但是这是IDispatch.Invoke的一个非常宽松的包装。 当我运行这个,调用Invoke1失败并返回E_FAIL 。 我怀疑这个问题与使用浮点参数和/或返回值有关。 如果我调用一个不使用这些值的函数,调用将成功: CComVariant retval = wordapp.Invoke0(L"ProductCode", &result); 我注意到,如果我从VBS或从PowerShell调用函数,它会成功。 我假设他们都使用迟来的IDispatch ,所以这将表明,我正在尝试是至less有可能的。 那么,如何使用IDispatch来调用这个函数呢?

如何让屏幕在Windows中缩放?

我正在写一个Windows程序,让用户切换1920×1080和3840×2160之间的分辨率,这意味着在FHD和4K之间。 我试图使用“GetSystemMetrics”来获得当前的解决scheme。 //Algorithm #1 //Get current resolution and resolution scaling. xScreenResolution = GetSystemMetrics(SM_CXSCREEN); yScreenResolution = GetSystemMetrics(SM_CYSCREEN); cout << "Current Resolution is: " << xScreenResolution << "x" << yScreenResolution << endl; 例如,如果我使用3840 * 2160的分辨率,我预计程序会给我3840 * 2160的分辨率。 但是,该程序只输出1536×864,这是Windows执行重新缩放后的分辨率。 所以我想知道如何获得比例因子(100%,200%,250%等),如Windows 10中的显示设置 。Windows 10中的显示设置

当“更改用户”时,CreateProcessAsUser不起作用

首先,我要感谢所有为这个网站工作的人,对开发人员非常有用。 这是我3天以来第一次受到阻挠。 我在互联网上search的解决scheme,但我找不到解决这个问题。 所以,我开发了一个服务,当用户login时,必须在vista / 7 / xp上执行一个外部程序。 这项服务的一些特点: 自动 没有互动性。 检测login用户的会话标识 以交互式用户身份运行外部GUI应用程序: 为了确保打开用户会话,我列出了所有“explorer.exe”进程,使用msdn函数ProcessIdToSessionId提取它们的Pid和SessionID 如果login用户的SessionID与此“explorer.exe”进程的会话ID相同,我确信“good”桌面正在运行,所以现在我可以执行外部程序。 (我说“好”的桌面,因为如你所知,可以在系统上打开多个用户会话) 之后,我用这个函数运行应用程序: function RunInteractive(prog_filename: String; sessionID: Cardinal): boolean; var hToken: THandle; si: _STARTUPINFOA; pi: _PROCESS_INFORMATION; begin ZeroMemory(@si, SizeOf(si)); si.cb := SizeOf(si); SI.lpDesktop := nil; if WTSQueryUserToken(sessionID, hToken) then begin if CreateProcessAsUser(hToken, nil, PChar(prog_filename), nil, nil, False, 0, nil, PChar(ExtractFilePath(prog_filename)), si, […]

我如何使用C ++从RAM运行可执行文件?

我如何使用C ++从RAM运行可执行文件? 可执行文件在RAM中,我知道地址,我怎样从我的程序中调用程序?

RegSvr32退出代码文档?

我玩RegSvr32.exe注册一个COM服务器,并获得下一个退出代码: 0 – 正确注册正常的DLL Com服务器 3 – 尝试注册假DLL Com服务器(简单的文本文件重命名为.DLL 4 – 当尝试注册简单的DLL,而不是通讯服务器 问题:我可以在哪里find所有可能的退出代码及其含义的官方(或非官方的,但是很好的)描述? search在互联网上没有给我的结果,所以我发现这个主题写在退出代码是一样的Windows系统错误代码,但我不明白为什么然后当尝试注册坏文件我正在获取代码= 3 = ERROR_PATH_NOT_FOUND ,并注册非COM DLL时 – 4 = ERROR_TOO_MANY_OPEN_FILES ? 对我来说,这听起来不合逻辑。