如何创建和QQ一样的系统热键??

awant2k 2003-08-07 07:34:28
我用 SetWindowsHookEx API在DLL中怎么也实现不了象QQ那样的系统热键,
请问怎么解决??
...全文
75 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
awant2k 2003-08-08
  • 打赏
  • 举报
回复
分数虽少,不要介意,再次感谢::))
awant2k 2003-08-08
  • 打赏
  • 举报
回复
谢谢,我已经用 RegisterHotKey 做好 ::))
wj_xiazi 2003-08-07
  • 打赏
  • 举报
回复
是这样的。RegisterHotKey函数的最后一个参数是virtual-key code!
小写的不行,就得大写的。我靠它二大爷!给分哈!
wj_xiazi 2003-08-07
  • 打赏
  • 举报
回复
//注册缺省的提取消息热键Ctrl + Alt + z
if(RegisterHotKey(this->m_hWnd,1002,MOD_CONTROL|MOD_ALT,'Z'))
{
if (!RegisterHotKey(this->m_hWnd,1001,MOD_CONTROL|MOD_ALT,'z'))
{
ret = 5 ;
CString strTemp ;
strTemp.Format("注册热键失败!%d",ret);
AfxMessageBox(strTemp);
PostQuitMessage(ret);
return FALSE;
}
}
这是以前的代码,我用过,行的,只是我记得要上面的两句都有才可以,少一句都不行。就是大写的Z和小写的z都要有。注册成功后,就可以只要一句了。好想是这样。待会我试试哈。
meishi 2003-08-07
  • 打赏
  • 举报
回复
应该可以的,我在大学时间做过这样的东西给你法国取你试一下行吗,
此程序响应小键盘上的*号键。无论什么时间按下*号键,
它就会向窗体Mhwnd发送uMsg消息,
不行再发贴子,
//hook.h
#ifdef DLLBUILD
_declspec(dllexport) BOOL Install(HWND Mhwnd,UINT uMsg);
_declspec(dllexport) BOOL Uninstall();
#else
_declspec(dllimport) BOOL Install(HWND Mhwnd,UINT uMsg);
_declspec(dllimport) BOOL Uninstall();
#endif
//hook.cpp
#define DLLBUILD
#pragma data_seg("Shared")
HINSTANCE ghInst=NULL;
HWND hWnd=NULL;
UINT Msg=0;
HHOOK hook=NULL;
#pragma data_seg()
static AFX_EXTENSION_MODULE WanDLL = { NULL, NULL };
LRESULT CALLBACK HookProc(int ,WPARAM ,LPARAM );
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);

if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("WAN.DLL Initializing!\n");

// Extension DLL one-time initialization
if (!AfxInitExtensionModule(WanDLL, hInstance))
return 0;
new CDynLinkLibrary(WanDLL);
ghInst=hInstance;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("WAN.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(WanDLL);
}
return 1; // ok
}

BOOL Install(HWND Mhwnd,UINT uMsg)
{ hWnd=Mhwnd;
Msg=uMsg;
hook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,ghInst,NULL);
if(hook==NULL)return FALSE;
return TRUE;

}

BOOL Uninstall()
{
if(hook==NULL)return FALSE;
UnhookWindowsHookEx(hook);
return TRUE;
}

LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(wParam==VK_MULTIPLY)
{
LPMSG* Message=(LPMSG*)lParam;
PostMessage(hWnd,Msg,Message->wParam,Message->lParam);
return TRUE;
}
return CallNextHookEx(hook,nCode,wParam,lParam);
;
}

allenq 2003-08-07
  • 打赏
  • 举报
回复
用这个函数可以搞定。
RegisterHotKey。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧