控制台程序如何注册热键以及相应热键消息
控制台程序 main.c
- C/C++ code
#include <stdio.h>#include <windows.h>typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();PROCGETCONSOLEWINDOW GetConsoleWindow;int main(int argc, char *argv[]){ HMODULE hKernel32; HWND hCmd; hKernel32 = GetModuleHandle("kernel32"); GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow"); hCmd = GetConsoleWindow(); //获取到当前cmd窗口句柄 //这里为当前cmd窗口注册热键Ctrl+M RegisterHotKey(hCmd,1,MOD_CONTROL,'M'); //请问在哪里相应cmd窗口的WM_HOTKEY消息呢??? printf("hello,world\n"); while(1); return 0; } [解决办法]
不要关联窗口,因为这个窗口不归你的进程管
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx
[解决办法]
- C/C++ code
#include "stdafx.h" DWORD WINAPI ThreadProc( __in LPVOID lpParameter ){ //do something return 1;}int _cdecl _tmain ( int argc, TCHAR *argv[]) { if (RegisterHotKey( NULL, 1, MOD_ALT | MOD_NOREPEAT, 0x42)) //0x42 is 'b' { _tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n")); } HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,NULL,0,NULL);//创建线程CloseHandle(handle); MSG msg = {0}; //这里就一直在等了。。。。 //可是注册完热键后,我还要做其它工作呀,就是要边等边做其它事情 while (GetMessage(&msg, NULL, 0, 0)) { if (msg.message == WM_HOTKEY) { _tprintf(_T("WM_HOTKEY received\n")); }} return 0; }