首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

控制台程序怎么注册热键以及相应热键消息

2012-05-14 
控制台程序如何注册热键以及相应热键消息控制台程序 main.cC/C++ code#include stdio.h#include window

控制台程序如何注册热键以及相应热键消息
控制台程序 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; } 

热点排行