单键可以,组合键还真不行。
就是一楼说的那个给后台记事本发消息的例子
SetForegroundWindow(m_hWnd);
SendMessage(m_hWnd, WM_SYSCOMMAND, SC_KEYMENU, (WPARAM)'E');
或者:

程序代码:
SetForegroundWindow(m_hWnd);
PostMessage(m_hWnd, WM_SYSKEYDOWN, VK_MENU, MakeKeyLparam(VK_MENU, WM_SYSKEYDOWN));
PostMessage(m_hWnd, WM_SYSKEYDOWN, 'E', MakeKeyLparam('E', WM_SYSKEYDOWN));
PostMessage(m_hWnd, WM_SYSKEYUP, 'E', MakeKeyLparam('E', WM_SYSKEYUP));
PostMessage(m_hWnd, WM_KEYUP, VK_MENU, MakeKeyLparam(VK_MENU, WM_KEYUP));
都可以成功,如果把SetForegroundWindow取消,记事本是后台的话,这种组合键是发不成功的。
如果要给后台发单键,就很容易了,比如发F5(在记事本中添加当前时间)给后台记事本:
PostMessage(m_hWnd, WM_KEYDOWN, VK_F5, MakeKeyLparam(VK_F5, WM_KEYDOWN));
PostMessage(m_hWnd, WM_KEYUP, VK_F5, MakeKeyLparam(VK_F5, WM_KEYUP));
我原来也认为只要前台能发过去消息,后台也一样啦,结果一试,完全不是想像中的那回事。后台没反应呀
我用过全局或线程的HOOK,全都是DLL的,但都是一些很简单的应用,屏蔽、拦截或改键什么的
[
本帖最后由 richardw 于 2014-9-8 21:38 编辑 ]