Tag: winapi

为什么TH32CS_SNAPMODULE32不能单独工作?

我在WinAPI中尝试了一些东西。 我的操作系统是Win7 x64 P1 Ultimate。 当我试图列出进程的所有模块时,我发现我想要的模块是32位模块,所以我更换了 TH32CS_SNAPMODULE 同 TH32CS_SNAPMODULE32 在此之后没有显示任何模块。 所以我决定尝试使用按位运算符,看起来像我发送这样的参数 TH32CS_SNAPMODULE32 | TH32CS_SNAPMODULE 它工作得非常好,列出了所有64位和32位模块。 所以我的问题是为什么它不能单独工作? 甚至文档都说它可以和TH32CS_SNAPMODULE一起使用。 从MSDN引用 TH32CS_SNAPMODULE32 包括从64位进程调用时快照中th32ProcessID中指定的进程的所有32位模块。 该标志可与TH32CS_SNAPMODULE或TH32CS_SNAPALL组合使用。 如果函数失败并显示ERROR_BAD_LENGTH,请重试该函数,直到成功为止。

Win32确定何时连接/断开键盘

我正在尝试确定键盘何时连接或断开连接。 我尝试了以下策略: RegisterDeviceNotification 如何在DirectInput中确定键盘断开连接时,建议使用如MSDN上所述的RegisterDeviceNotifaction。 当我尝试这个时,我在窗口回调中得到了DB_DEVNODES_CHANGED事件,它没有提供其他信息(只是一些未知设备已经改变了连接状态)。 我为注册尝试了各种GUID: 4D36E96B-E325-11CE-BFC1-08002BE10318 (几个网站说这是键盘的类guid)和从IDirectInput8::EnumDevices(DI8DEVCLASS_KEYBOARD, …, DIEDFL_ATTACHEDONLY)检索的IDirectInput8::EnumDevices(DI8DEVCLASS_KEYBOARD, …, DIEDFL_ATTACHEDONLY) 。 但我仍然只得到DB_DEVNODES_CHANGED事件。 IDirectInput8 :: EnumDevices 每次调用IDirectInput8::EnumDevices(DI8DEVCLASS_KEYBOARD, …, DIEDFL_ATTACHEDONLY)都应该只枚举附加的设备。 但是,当我断开键盘的连接时, EnumDevices仍会枚举EnumDevices 。 当我对我的游戏控制器(类型为DI8DEVCLASS_GAMECTRL )执行相同操作时,控制器仅在连接时枚举,允许我确定其连接状态。 其他function 我试过了: IDirectInput8::GetDeviceStatus IDirectInputDevice8::GetCapabilities IDirectInputDevice8::GetDeviceInfo IDirectInputDevice8::GetDeviceState IDirectInputDevice8::Poll 所有function都成功,并且无法确定键盘是否已连接。 我也看过MSDN的键盘部分 ,但无济于事。 问题 成功完成此任务的任何人都可以证实我采取了正确的方法吗? 我还有其他function或API吗? 任何提供示例的网站(我用google搜索失败了)? 为什么EnumDevices适用于我的控制器而不是我的键盘? 我如何让它适用于我的键盘?

Windows是否有可以从C调用的JSON API?

我可以在C中调用Windows中的JSON本机实现吗? 如果没有,那么.NET或C#呢? 或者,如果人们希望在Windows应用程序中使用JSON时使用任何库或实现,该怎么办?

GetDC(NULL)获取主监视器或虚拟屏幕?

环顾网络,我发现大多数人认为GetDC(NULL)将获得整个主监视器的设备上下文(左上角为0,0的监视器)。 但是,我感觉大多数人只是说,因为这就是GetDC的msdn页面可能会说的。 但是,如果您查看以下两个页面(至少这两个)似乎是说GetDC(NULL)返回一个覆盖整个虚拟屏幕的设备上下文(包含连接到系统的每个监视器的屏幕)。 (1) https://www.microsoft.com/msj/0697/monitor/monitor.aspx – >在页面中搜索“这是获取虚拟桌面的RECT”并查看该语句周围的位(特别是GetDC)它上面的(NULL))。 (2) http://msdn.microsoft.com/en-gb/library/windows/desktop/dd162610%28v=vs.85%29.aspx – >在页面中搜索“GetDC(NULL)” 我一直想弄清楚它到底是哪一个,但是众多冲突的观点让我失望。 有没有人对此有任何实际经验,可以在多监视器系统上进行测试吗? (我只有一台显示器,所以我不能。) 是否有覆盖整个主监视器的DC或覆盖整个虚拟屏幕的DC? 编辑 对于任何想要试用它的人来说,在我的系统上,如果我创建一个默认项目并在WinMain中放入以下内容,则会将屏幕变为黑色。 如果您有多个显示器并且您尝试了它,问题就变成它只是将您的主显示器变为黑色或所有显示器? HDC hdc = GetDC(NULL); RECT r = {LONG_MIN, LONG_MIN, LONG_MAX, LONG_MAX}; FillRect(hdc, &r, (HBRUSH)(COLOR_BTNTEXT + 1)); ReleaseDC(NULL, hdc);

如何在SYSTEM下运行应用程序?

不使用Windows服务? 可能吗?

如何在Windows 7上禁用“开始”按钮(但不禁用任务栏)?

在Windows XP上,可以使用以下代码禁用“开始”按钮: hTray = FindWindow (TEXT(“Shell_TrayWnd”), NULL); if (hTray) { hStartButton = FindWindowEx(hTray, NULL, TEXT(“Button”), NULL); if (hStartButton) ShowWindow(hStartButton, FALSE); } 对于公共访问计算机配置,我需要能够在Windows 7上执行此操作。必须禁用“开始”按钮(不仅仅是隐藏),并且任务栏的其余部分仍必须可见且可用。 不能选择隐藏任务栏和“开始”按钮。 全屏运行不是一种选择。 使用“Start Killer”将无法正常工作,因为它实际上并未禁用“开始”按钮,只是隐藏它(用户仍然可以使用热键来启动“开始”菜单)。 我已经尝试了使用FindWindowEx和0xC017作为其第三个参数的方法,然后尝试禁用该窗口。 它不起作用。 该方法仅在首先禁用整个任务栏时才有效。 我需要的是一种只禁用“开始”菜单的方法,就像上面我在XP中重现的代码一样。 任何帮助是极大的赞赏。

在MinGW上隐式声明函数’getaddrinfo’

我有一个使用getaddrinfo()的C程序。 它在Linux和Mac OS X上按预期工作。 我正在将它移植到Windows。 当我编译它(使用MinGW gcc)时,我收到以下警告: ext/socket/socket.c: In function ‘sl_tcp_socket_init’: ext/socket/socket.c:98:5: warning implicit declaration of function ‘getaddrinfo’ [-Wimplicit-function-declaration] ext/socket/socket.c:104:9: warning implicit declaration of function ‘freeaddrinfo’ [-Wimplicit-function-declaration] 然后整个事情无法链接到getaddrinfo()和freeaddrinfo()未定义引用。 现在,根据这个MSDN页面 ,Windows上支持getaddrinfo() ,它位于头文件Ws2tcpip.h和库文件Ws2_32.lib 。 我包括Ws2tcpip.h并与-lWs2_32链接,所以我不确定为什么这不起作用。

Win32 API函数与CRT对应函数(例如CopyMemory与memcpy)

在编写Win32 C / C ++代码时,使用Windows特定的函数(如lstrcpyn或CopyMemory而不是相应的CRT函数(除了CRT函数的可移植性)是否有任何优势(例如性能?)?

Win32 – 将文本附加到编辑控件

尝试将文本附加到对话框内的编辑控件。 我无法正确追加_tcscat_s。 它崩溃并说一些关于缓冲区太小或关于空终止字符串的事情。 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { return DialogBox( hInstance, MAKEINTRESOURCE( IDD_MAIN ), NULL, DlgProc ); } BOOL CALLBACK DlgProc( HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam ) { switch( Message ) { case WM_INITDIALOG: OpenAndReadFile( hwnd ); return TRUE; case WM_COMMAND: switch( LOWORD( wParam […]

如何在不依赖于C运行时的情况下创建Win32 DLL

使用Visual Studio 2008及其C / C ++编译器,如何创建仅依赖于其他Windows DLL的Win32 DLL,并且不依赖于Microsoft C运行时? 我有一些C代码,我想放在一个完全计算的DLL中,几乎不使用C库函数。 对于它确实使用的那些(例如memcpy),我很乐意重新编写代码以使用Win32 API等价物(例如CopyMemory)。