从windows 7上的服务获取ForegroundWindow
GetForegroundWindow from service on windows 7
我正在从服务中使用GetForegroundWindow((,因为我想监视聚焦的窗口,但由于交互式用户问题,该函数在windows 7上返回null。有什么方法可以让我的服务集中在窗口上吗?
HWINSTA hWinStaUser = OpenWindowStation(_T("WinSta0"), FALSE, MAXIMUM_ALLOWED);
if (SetProcessWindowStation(hWinStaUser))
{
/* -- Open user's desktop "Default". -- */
HDESK hDeskUser = OpenInputDesktop(0,FALSE,MAXIMUM_ALLOWED);
//HDESK hDeskUser = OpenDesktop(_T("Default"), 0, FALSE, MAXIMUM_ALLOWED);
/* -- Set thread desktop to "Default". -- */
if (SetThreadDesktop(hDeskUser))
{
HWND hwndActiveWin = GetForegroundWindow();
int idActive = GetWindowThreadProcessId(hwndActiveWin, NULL);
if ( AttachThreadInput(GetCurrentThreadId(), idActive, TRUE) )
{
HWND hwndFocused = GetFocus (); // focused control within the active window, i.e. focus throughout the screen
if(hwndFocused != NULL)
{
DWORD dwProcessID = 0;
GetWindowThreadProcessId(hwndFocused, &dwProcessID);
processPid = dwProcessID;
}
AttachThreadInput(GetCurrentThreadId(), idActive, FALSE);
}
}
您需要了解问题本身。服务无法与桌面交互,因为存在安全风险,而且可能有许多桌面(许多登录用户(。GetForegroundWindow((是一个与桌面的交互。没有简单的解决办法。复杂的流程包括作为windows应用程序(而不是服务(运行的单独流程和与服务的通信。
相关文章:
- 如何使用 sd-bus 获取服务的状态?
- 从C++ Windows 服务中获取当前登录的用户名
- 如何使用Visual Studio检测和获取Windows服务的代码覆盖率?
- 函数从单向链表和错误服务中获取密钥
- 从Windows上的系统工作的服务中获取用户文档文件夹.C++
- 如何在C 中使用我的服务来获取用户的SID和用户名
- 如何在 c++ 中获取有关服务的启动类型的信息
- 如何从服务获取用户桌面的路径
- 在C++中,如何在Linux中获取服务的路径
- 创建服务获取错误: ERROR_INVALID_ADDRESS (0x000001e7)
- 从服务启动的可执行文件中获取服务名称
- 获取当前登录的用户名,C++作为服务运行时不显示任何内容
- 作为windows服务运行时,如何获取活动监视器的数量?C++
- 获取带有POCO的服务可执行文件文件夹
- 如何以编程方式获取服务的状态(运行/停止)
- 如何从Visual c++中获取特定的windows服务可执行文件路径
- 如何在服务上下文中获取用户名
- 在谷歌云存储中使用服务帐户获取OAuth令牌时'invalid_grant'错误
- 从windows 7上的服务获取ForegroundWindow
- 即使使用系统服务中的RegOpenCurrentUser,也无法获取用户级注册表值