如何将焦点切换到不同的应用程序C ++ / WinAPI

血腥

我想将焦点设置为特定的用户应用程序(使用进程名称),而是从“在后台”运行的代码而不是活动进程中。我需要抓住一个全球性的事件,并通过将特定的应用程序放在前面来做出反应。

前提条件:-应用程序1在顶部运行-应用程序2在运行但未处于活动状态-我的->应用程序<-在运行但未处于活动状态,只是在运行以处理该问题

动作:-我的应用程序检测到特定的Windows事件(例如,鼠标双击)-触发应用程序2进入前台

预期:-应用程序2现在处于活动状态,重点是它

SetForegroundWindow()和SwitchToThisWindow()都不起作用,因为我的应用程序不是触发切换的活动应用程序。它必须随时“从后台”触发它。有人有解决方案吗?示例代码的示例将是非常感谢的。

[编辑]:我找到了一种解决方案-我使用AttachThreadInput()函数,并将窗口的GetWindowThreadProcessId()作为第一个参数,而GetCurrentThreadID()作为第二个参数。当然,第三是正确的。SetActiveWindow()和SetForegroundWindow()都可以工作,但是...仅在Visual Studio(2013)中进行调试时才是不幸的。当我同时在Debug和Release版本中运行.exe文件时,焦点不会触发。你们当中有人知道为什么会这样吗?

血腥

好的,我在网上找到了解决方法。我将“ Alt”键作为输入发送到系统。然后,我可以成功使用SetForegroundWindow()。之后,当然应该释放“ Alt”键。

//set up a generic keyboard event
INPUT keyInput;
keyInput.type = INPUT_KEYBOARD;
keyInput.ki.wScan = 0; //hardware scan code for key
keyInput.ki.time = 0;
keyInput.ki.dwExtraInfo = 0;

//set focus to the hWnd (sending Alt allows to bypass limitation)
keyInput.ki.wVk = VK_MENU;
keyInput.ki.dwFlags = 0;   //0 for key press
SendInput(1, &keyInput, sizeof(INPUT));

SetForegroundWindow(hWnd); //sets the focus 

keyInput.ki.wVk = VK_MENU;
keyInput.ki.dwFlags = KEYEVENTF_KEYUP;  //for key release
SendInput(1, &keyInput, sizeof(INPUT));

有趣的问题,但有效!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更正WinAPI调用?

来自分类Dev

C ++ WinAPI老式窗口

来自分类Dev

C ++ Winapi waveOutSetVolume()

来自分类Dev

C ++ Winapi提升

来自分类Dev

C++ WinAPI ReadProcessMemory

来自分类Dev

WinAPI多线程应用程序

来自分类Dev

如何在 QT 应用程序中“WINAPI::GetLastError”?

来自分类Dev

什么是winapi HMENU,如何使用?

来自分类Dev

如何将“ this”指针传递给C ++ WinAPI线程?

来自分类Dev

WinAPI / WPF:仅为应用程序设置系统光标

来自分类Dev

WINAPI光标在应用程序窗口上的单击位置

来自分类Dev

如何链接包含WinAPI的C代码?

来自分类Dev

将窗口锁定到特定的显示(winapi)

来自分类Dev

Winapi-将LPWCSTR传递为LPCSTR

来自分类Dev

如何将Winapi添加到Windows的Lua

来自分类Dev

如何在delphi中调用WINAPI DsRoleGetPrimaryDomainInformation?

来自分类Dev

C ++ Winapi-动画背景的MPEG电影

来自分类Dev

确保线程已启动WinAPI C ++

来自分类Dev

C ++ WinAPI TextOut()更新文本

来自分类Dev

GetOpenFileName时出现C ++ WinAPI错误

来自分类Dev

C ++ WINAPI调用通过GetProcAddress导出的函数

来自分类Dev

WINAPI / C ++:移动无边界窗口

来自分类Dev

C ++ Winapi-动画背景的MPEG电影

来自分类Dev

填充矩形矩形的PictureBox,C ++ WINAPI

来自分类Dev

确保线程已启动WinAPI C ++

来自分类Dev

C ++ Winapi LONG到标准双精度

来自分类Dev

C ++ Winapi HWND获取WndProc配置

来自分类Dev

C ++ WINAPI调用通过GetProcAddress导出的函数

来自分类Dev

使用Angular登录WinApi C#