Articles of winapi

从应用程序中获取应用程序版本

有没有一种简单的方法在运行时从资源文件中获取应用程序版本信息? 实际上,我希望能够在运行时显示“版本XYZ”,而不必在单独的variables某处保留与我的ProductVersion和FileVersion同步的variables。 澄清:是的,这是一个标准的C ++ Windows项目。 我知道的GetFileVersionInfo方法,但它似乎很难从内存中的版本打开二进制只是为了查询版本信息 – 我敢肯定我失去了一些明显的东西:-)

检测Windows(IE)代理设置更改

我使用WinHttpGetIEProxyConfigForCurrentUser和朋友收集当前的代理信息,当我的应用程序启动时,在每个请求看起来会大大降低性能,因为它坐几秒钟收集代理数据。 有没有一种方法来检测Windows代理设置何时更改,以便我可以caching信息,直到它更改? 谢谢,J

HPET是否可以在Windows中直接访问?

我想使用高性能事件计时器(HPET)来进行性能分析工具,以便快速进行非常高精度的测量。 timeGetTime在1ms时不能提供足够的分辨率,QueryPerformanceCounter每次读取都比我想要的慢得多。 我在研究这个问题的时候遇到了HPET,但是我看不到有什么样的实际情况。 所以我可以直接使用它(汇编是否正常),还是必须依赖Win32 API中内置的多媒体/高性能计时工具?

只响应第一个WM_KEYDOWN通知?

Win32应用程序如何才能响应第一个WM_KEYDOWN通知? MSDN文档要求位30“指定以前的密钥状态,如果在发送消息之前密钥已closures,则值为1,如果密钥已closures,则为零。 但是在我的WndProc中,位30总是0。 case WM_KEYDOWN: // ToDo – stop multiple notifications for repeating keys printf("WM_KEYDOWN %i %i", wParam, lParam & 30); return 0; lParam&30是不是要问这个问题? 我在做别的事吗?

如何从某个驱动器打开文件夹closuresWindows资源pipe理器窗口

我在写一个小应用程序,允许用户popup(或安全删除)USB驱动器。 除了在Windows资源pipe理器中打开USB驱动器(或多个文件夹)上的文件夹时,我的应用程序工作正常。 在这种情况下popupfunction失败,因为驱动器似乎被locking。 所以我很好奇,因为用户通过我的应用程序发出一个命令来popupUSB驱动器,有没有办法让ExplorerclosuresUSB驱动器打开的窗口? PS。 请注意,我不想closures属于Windows资源pipe理器的所有进程,但仅closures在特定驱动器上打开文件夹的进程。

如何使用InjectTouchInput特定的窗口?

我试图使用InjectTouchInput发送触摸事件到特定的窗口。 POINTER_INFO结构有hwndTarget字段,据我hwndTarget ,它指定目标窗口发送input。 但是当我尝试使用这个参数时,注入失败,代码为ERROR_INVALID_PARAMETER (87) 码: void MakePointerTouchInfo(POINTER_TOUCH_INFO& contact, int x, int y, int radius, int id, int orientation = 90, int pressure = 32000) { ZeroMemory(&contact, sizeof(POINTER_TOUCH_INFO)); contact.pointerInfo.pointerType = PT_TOUCH; contact.pointerInfo.ptPixelLocation.x = x; contact.pointerInfo.ptPixelLocation.y = y; contact.pointerInfo.pointerId = id; contact.touchFlags = TOUCH_FLAG_NONE; contact.pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT; contact.touchMask = TOUCH_MASK_NONE; } POINTER_TOUCH_INFO […]

用头文件中定义的方法调用SetWindowsHookEx

我正试图添加一个低级别的鼠标挂钩到一个类。 我可以通过在我的CPP文件中放置这个function: LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { //my hook code here return CallNextHookEx(0, nCode, wParam, lParam); } 然后,我在类构造函数中设置钩子,如下所示: HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, NULL, 0); 这适用于拦截鼠标事件,但由于callback函数没有在我的类中定义,它没有访问我的任何类variables。 因此,我尝试在头文件中定义callback函数,如下所示: LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam); 并在我的CPP文件(TMainForm是类): LRESULT CALLBACK TMainForm::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) { //my hook code here return CallNextHookEx(0, […]

获取与桌面相关的已loginWindows用户名

我想枚举系统中的所有桌面,并获取该桌面的login用户名。 到目前为止,我有以下代码snippit作为获取HDESK句柄,并试图确定与之关联的用户名(如果有的话)的示例,但对LookupAccountSid的调用失败,并显示ERROR_NONE_MAPPED(“帐户名和安全ID之间没有映射完成“)。 HDESK desk = OpenDesktop( "Default", 0, FALSE, READ_CONTROL | DESKTOP_READOBJECTS ); DWORD size = 4096; SID * sid = (SID *)malloc( size ); GetUserObjectInformation( desk , UOI_USER_SID, sid, size, &size ); char name[512], domain[512]; int namesz = 512, domainsz = 512; LookupAccountSid( NULL, sid, &name, &namesz, &domain, &domainsz, &s); 这可能是因为我通过GetUserObjectInformation而不是用户SID拉出loginSID。 如果是的话,我可以将其转换为login的用户SID? 任何人都可以指向正确的方向获取任意桌面的login用户名(通过相应的HDESK或HNWD手柄,甚至桌面的HWINSTA手柄)? 提前致谢。

为什么不从入口函数调用FreeLibrary?

我正在写一个DLL需要多次dynamic调用一个单独的DLL。 我想保持被调用者加载,然后卸载它,当我的DLL被卸载。 但根据微软的说法,这是一个坏主意 。 入口点函数只应执行简单的初始化任务,不应该调用任何其他的DLL加载或终止函数。 例如,在入口点函数中,您不应该直接或间接调用LoadLibrary函数或LoadLibraryEx函数。 此外,当进程正在终止时,您不应该调用FreeLibrary函数。 这是有问题的代码。 有人可以解释为什么我不应该从DLL的入口点调用LoadLibrary和FreeLibrary? BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_DETACH : if (hLogLib != NULL) FreeLibrary(hLogLib); break; } return TRUE; }

什么是Windows 8.1的操作系统版本?

什么是即将到来的Windows 8.1的内部版本? MSDN说: Windows XP = 5.1 Windows 7 = 6.1 Windows 8 = 6.2 但Windows 8.1? 到目前为止,我找不到任何有用的信息…