+ -
当前位置:首页 → 问答吧 → 如何象一个窗口发送control+alt这2个按键的模拟消息

如何象一个窗口发送control+alt这2个按键的模拟消息

时间:2011-12-02

来源:互联网

如何象一个窗口发送control+alt这2个按键的模拟消息

貌似一般的都没问题,但是系统键发不了

::PostMessage(m_hWnd,WM_KEYDOWN,VK_CONTROL,0);
::PostMessage(m_hWnd,WM_KEYDOWN,VK_MENU,0);
Sleep(10);
::PostMessage(m_hWnd,WM_KEYUP,VK_MENU,0);
::PostMessage(m_hWnd,WM_KEYUP,VK_CONTROL,0);

作者: lihongbin33   发布时间: 2011-12-02

VK_MENU按键响应的不是WM_KEYDOWN事件,而是 WM_SYSKEYDOWN 和 WM_SYSKEYUP 事件
The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user presses the F10 key (which activates the menu bar) or holds down the alt key and then presses another key.

作者: yuucyf   发布时间: 2011-12-03

::PostMessage(m_hWnd,WM_SYSKEYDOWN,VK_MENU,0);
::PostMessage(m_hWnd,WM_SYSKEYDOWN,VK_CONTROL,0);

Sleep(10);
::PostMessage(m_hWnd,WM_SYSKEYUP,VK_CONTROL,0);
::PostMessage(m_hWnd,WM_SYSKEYUP,VK_MENU,0);

貌似依然不行

作者: lihongbin33   发布时间: 2011-12-03

C/C++ code
HWND hWnd = ::FindWindow(NULL, _T("A"));
    if(hWnd)
    {
        ::AttachThreadInput(::GetWindowThreadProcessId(::GetForegroundWindow(), NULL), GetCurrentThreadId(), TRUE);
        ::SetForegroundWindow(hWnd);
        keybd_event(VK_CONTROL, 0, 0, 0);
        keybd_event(VK_MENU, 0, 0, 0);
        keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
        keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
        ::AttachThreadInput(::GetWindowThreadProcessId(::GetForegroundWindow(), NULL), GetCurrentThreadId(), FALSE);
    }

作者: VisualEleven   发布时间: 2011-12-03

HWND hWnd = ::FindWindow(NULL, _T("A"));
if(hWnd)
{
::SetForegroundWindow(hWnd);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(VK_MENU, 0, 0, 0);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
}
直接这样就可以,

作者: VisualEleven   发布时间: 2011-12-03