0
我正在使用服務中的GetForegroundWindow(),因爲我想監視窗口焦點,但由於交互式用戶問題,該函數在Windows 7上返回null。有什麼方法可以讓我的服務中的重點窗口?從Windows 7服務GetForegroundWindow
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);
}
}
感謝亞歷克斯..所以你的意思是,如果我必須在Windows 7上實現這一點,我將不得不創建一個這樣做的過程,並與我的服務交互?有沒有辦法通過我可以得到活動桌面和那裏的窗戶? – Neha
我想知道如何獲得窗口焦點在Windows 7中的桌面..我使用C++ ..這將是偉大的,如果你可以幫助我這個.. – Neha
最簡單的方法是使用'GetForegroundWindow( )'。由於您無法在您的服務中使用它,因此您需要實現單獨的用戶模式應用程序,並使用某種進程間通信將此信息發送給您的服務。通過網絡套接字 –