从windows 7上的服务获取ForegroundWindow

GetForegroundWindow from service on windows 7

本文关键字:服务 获取 ForegroundWindow windows      更新时间:2023-10-16

我正在从服务中使用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应用程序(而不是服务(运行的单独流程和与服务的通信。