关于windows消息的获取,并能在windows前执行或取消。 如题。比如:如何在应用程序中取消POWER键的功能。在键盘上按下POWER键能在系统之前处理它。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #pragma data_seg (".mydata")HHOOK g_hHookKb=NULL; // hook #pragma data_seg ()#pragma comment(linker, "/SECTION:.mydata,RWS") // tell linker: make it sharedLRESULT CALLBACK ShieldKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){ if (nCode == HC_ACTION) { KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lParam; BOOL bCtrlKeyDown = GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT)*8)-1); if ( pkh->vkCode==VK_RETURN || pkh->vkCode==VK_F12 || pkh->flags&LLKHF_ALTDOWN || pkh->vkCode==VK_ESCAPE || (pkh->vkCode==VK_ESCAPE && bCtrlKeyDown) || // Ctrl+Esc (pkh->vkCode==VK_TAB && pkh->flags&LLKHF_ALTDOWN) || // Alt+TAB (pkh->vkCode==VK_ESCAPE && pkh->flags&LLKHF_ALTDOWN) || // Alt+Esc (pkh->vkCode==VK_F4 && pkh->flags&LLKHF_ALTDOWN) || (pkh->vkCode=='F' && pkh->flags&LLKHF_ALTDOWN) || (pkh->vkCode==VK_LWIN || pkh->vkCode==VK_RWIN)) // Start Menu { //if ((wParam==WM_SYSKEYDOWN || wParam==WM_KEYDOWN)) // MessageBeep(0); // only beep on downstroke if requested return 1; // gobble it: go directly to jail, do not pass go } } return CallNextHookEx(g_hHookKb, nCode, wParam, lParam);}BOOL __stdcall ShieldMK(){ g_hHookKb = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)ShieldKeyboardProc, MyDll.m_hInstance, 0); return (g_hHookKb!=NULL? TRUE:FALSE);}遗憾的是,没有帮你找到power键的虚键值.据说,该键的事件直接在系统级被处理掉了, 没有发出消息的至窗口消息队列的. 只是听说而异,你可以再研究, 具体钩子就是上边写的了. 意外地发现:#define WM_POWER 0x0048也就是说可以将上面的判断条件改为:if (pkh->vkCode==VK_POWER){......} 就ok了 请问实现图像间智能连接线有没有什么思路? 建议CSDN改进贴图功能,大家说说 ADO访问Access出现的很奇怪的问题,高手请指教!!! 谁能解释一下m_lpszTemplateName = MAKEINTRESOURCE(nIDTemplate)的含义? 关于数据库一个很让我疑惑的问题 求助!现在什么编程方法流行 高分相送!!!!怎样读取 Windows NT中事件查看器中记录的应用程序错误的日志? 急需VC下进度条资源! vc++ 的控键的问题 wcstombs_s函数 程序小问题 COM中如何传递SOCKET类型的参数?
HHOOK g_hHookKb=NULL; // hook #pragma data_seg ()
#pragma comment(linker, "/SECTION:.mydata,RWS") // tell linker: make it shared
LRESULT CALLBACK ShieldKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lParam;
BOOL bCtrlKeyDown = GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT)*8)-1);
if ( pkh->vkCode==VK_RETURN ||
pkh->vkCode==VK_F12 ||
pkh->flags&LLKHF_ALTDOWN ||
pkh->vkCode==VK_ESCAPE ||
(pkh->vkCode==VK_ESCAPE && bCtrlKeyDown) || // Ctrl+Esc
(pkh->vkCode==VK_TAB && pkh->flags&LLKHF_ALTDOWN) || // Alt+TAB
(pkh->vkCode==VK_ESCAPE && pkh->flags&LLKHF_ALTDOWN) || // Alt+Esc
(pkh->vkCode==VK_F4 && pkh->flags&LLKHF_ALTDOWN) ||
(pkh->vkCode=='F' && pkh->flags&LLKHF_ALTDOWN) ||
(pkh->vkCode==VK_LWIN || pkh->vkCode==VK_RWIN)) // Start Menu
{
//if ((wParam==WM_SYSKEYDOWN || wParam==WM_KEYDOWN))
// MessageBeep(0); // only beep on downstroke if requested return 1; // gobble it: go directly to jail, do not pass go
}
} return CallNextHookEx(g_hHookKb, nCode, wParam, lParam);
}BOOL __stdcall ShieldMK()
{
g_hHookKb = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)ShieldKeyboardProc, MyDll.m_hInstance, 0); return (g_hHookKb!=NULL? TRUE:FALSE);
}遗憾的是,没有帮你找到power键的虚键值.据说,该键的事件直接在系统级被处理掉了, 没有
发出消息的至窗口消息队列的. 只是听说而异,你可以再研究, 具体钩子就是上边写的了.
#define WM_POWER 0x0048也就是说可以将上面的判断条件改为:
if (pkh->vkCode==VK_POWER){......} 就ok了