64,653
社区成员
发帖
与我相关
我的任务
分享
void CSampleService::ServiceWorkerThread(void)
{
DWORD error;
BOOL retVal;
DWORD res;
HWINSTA hWinsta = OpenWindowStation(_T("WinSta0"),FALSE,MAXIMUM_ALLOWED);
retVal = SetProcessWindowStation(hWinsta);
/*HDESK hDesk = OpenDesktop(_T("Default"),0,FALSE,MAXIMUM_ALLOWED);*/
HDESK hDesk = OpenInputDesktop(0,FALSE,MAXIMUM_ALLOWED);
retVal = SetThreadDesktop(hDesk);
// Periodically check if the service is stopping.
while (!m_fStopping)
{
// Perform main service function here...
INPUT kbdinput[2] = {0};
kbdinput[0].type = INPUT_KEYBOARD;
kbdinput[0].ki.wVk = VK_SPACE;
res = SendInput(1,kbdinput,sizeof(INPUT));
if(res != 1)
{
error = GetLastError();
}
kbdinput[1].type = INPUT_KEYBOARD;
kbdinput[1].ki.wVk = VK_SPACE;
kbdinput[1].ki.dwFlags = KEYEVENTF_KEYUP;
res = SendInput(1,kbdinput+1,sizeof(INPUT));
if(res != 1)
{
error = GetLastError();
}
::Sleep(2000); // Simulate some lengthy operations.
}
// Signal the stopped event.
SetEvent(m_hStoppedEvent);
CloseDesktop(hDesk);
CloseWindowStation(hWinsta);
}