
如何模拟ALT+TAB切换
1个回答
展开全部
最简单的办法,用Windows API SendInput来模拟键盘操作:
INPUT Inputs[2];
Inputs[0].type = INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0x12;
Inputs[0].ki.dwFlags = 0;
Inputs[0].ki.time = 0;
Inputs[0].ki.dwExtraInfo = 0;
Inputs[1].type = INPUT_KEYBOARD;
Inputs[1].ki.wVk = 0x09;
Inputs[1].ki.dwFlags = 0;
Inputs[1].ki.time = 0;
Inputs[1].ki.dwExtraInfo = 0;
SendInput( 2, Inputs, sizeof(INPUT) );
Inputs[0].ki.dwFlags = KEYEVENTF_KEYUP;
Inputs[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 2, Inputs, sizeof(INPUT) );
这个办法比较直接,但是某些比较2的安全软件会把SendInput直接拦截掉,大爷的。对于不知道ALT+TAB的用户,不能指望他懂得白名单之类的东西。
于是试着用窗口枚举来实现:
HWND hWnd = GetNextWindow( hWinMain, GW_HWNDNEXT );while (IsWindowVisible(hWnd) == FALSE ||
GetWindow( hWnd, GW_OWNER ) != NULL ||
GetParent( hWnd ) != NULL){hWnd = GetNextWindow( hWnd, GW_HWNDNEXT );}
dwExStyle = GetWindowLong(hWinMain,GWL_EXSTYLE);
if ( dwExStyle & WS_EX_TOPMOST ){SetWindowPos(hWinMain, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
hWnd = GetNextWindow( hWinMain, GW_HWNDNEXT );while (IsWindowVisible(hWnd) == FALSE ||
GetWindow( hWnd, GW_OWNER ) != NULL ||
GetParent( hWnd ) != NULL){hWnd = GetNextWindow( hWnd, GW_HWNDNEXT );}SetWindowPos(hWinMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);}
INPUT Inputs[2];
Inputs[0].type = INPUT_KEYBOARD;
Inputs[0].ki.wVk = 0x12;
Inputs[0].ki.dwFlags = 0;
Inputs[0].ki.time = 0;
Inputs[0].ki.dwExtraInfo = 0;
Inputs[1].type = INPUT_KEYBOARD;
Inputs[1].ki.wVk = 0x09;
Inputs[1].ki.dwFlags = 0;
Inputs[1].ki.time = 0;
Inputs[1].ki.dwExtraInfo = 0;
SendInput( 2, Inputs, sizeof(INPUT) );
Inputs[0].ki.dwFlags = KEYEVENTF_KEYUP;
Inputs[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 2, Inputs, sizeof(INPUT) );
这个办法比较直接,但是某些比较2的安全软件会把SendInput直接拦截掉,大爷的。对于不知道ALT+TAB的用户,不能指望他懂得白名单之类的东西。
于是试着用窗口枚举来实现:
HWND hWnd = GetNextWindow( hWinMain, GW_HWNDNEXT );while (IsWindowVisible(hWnd) == FALSE ||
GetWindow( hWnd, GW_OWNER ) != NULL ||
GetParent( hWnd ) != NULL){hWnd = GetNextWindow( hWnd, GW_HWNDNEXT );}
dwExStyle = GetWindowLong(hWinMain,GWL_EXSTYLE);
if ( dwExStyle & WS_EX_TOPMOST ){SetWindowPos(hWinMain, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);
hWnd = GetNextWindow( hWinMain, GW_HWNDNEXT );while (IsWindowVisible(hWnd) == FALSE ||
GetWindow( hWnd, GW_OWNER ) != NULL ||
GetParent( hWnd ) != NULL){hWnd = GetNextWindow( hWnd, GW_HWNDNEXT );}SetWindowPos(hWinMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询