再求助:如何让正在忙时的程序马上响应钩子

huangbinlq 2008-12-07 04:31:30
我有一个很消耗时间的操作,想在它操作时我按下f2键就出现输入密码对话框来锁定界面,这样可以让我安全地离开电脑去干别的事,而操作照常进行,其他人还可以使用我的电脑(但没有密码就动不了我的程序)。于是我使用了钩子:

键盘钩子--

挂钩:g_hHookKbd = SetWindowsHookEx(WH_KEYBOARD,MyKbdHook,nullptr, GetCurrentThreadId());
钩子函数:LRESULT CALLBACK MyKbdHook(int code,WPARAM wp,LPARAM lp)
{
if(wp==VK_F2)
{
... //锁定程序界面
}
return CallNextHookEx(g_hHookKbd,code,wp,lp);
}

上述代码在程序空闲时可以正确执行,但我的程序正在执行一项很耗时的操作,完成以后才能响应上述的钩子,因此没有实现我的要求:一旦按下f2,就马上执行钩子过程(即出现输入密码对话框来锁定程序!)

请教这里的高手朋友:如何才能实现程序忙时也能让钩子马上起作用呢?
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
thenshesaid 2008-12-08
  • 打赏
  • 举报
回复
钩子的响应应该也是在主线程中来做的
你这个设计就不怎么地,干吗不把耗时的放在工作线程呢
wltg2001 2008-12-07
  • 打赏
  • 举报
回复
我请教:如何让主线程中的耗时操作也能及时响应键盘钩子?
=============================================
好像除了开线程外没什么好办法,你等等,也许会有大牛有好办法
oyljerry 2008-12-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huangbinlq 的回复:]
引用 1 楼 wltg2001 的回复:
你这个应该是用多线程来执行锁定界面才行.


可是我的耗时操作已经放在主线程中了啊,如果放在新线程中,它与主线程界面的交互就很麻烦了啊,因此,
我请教:如何让主线程中的耗时操作也能及时响应键盘钩子?
[/Quote]
主线程耗时操作就容易阻塞
huangbinlq 2008-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]
你这个应该是用多线程来执行锁定界面才行.
[/Quote]

可是我的耗时操作已经放在主线程中了啊,如果放在新线程中,它与主线程界面的交互就很麻烦了啊,因此,
我请教:如何让主线程中的耗时操作也能及时响应键盘钩子?
yaozhu88 2008-12-07
  • 打赏
  • 举报
回复
耗时间的操作在消息过程 中另开一个线程来处理。不然你主线程 就卡在DisPachmessage函数那里了,
wltg2001 2008-12-07
  • 打赏
  • 举报
回复
你这个应该是用多线程来执行锁定界面才行.

15,471

社区成员

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

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