在Windows Service中使用SendInput

scutth 2013-05-08 04:37:38
RT,我想用SendInput模拟键盘和鼠标事件,在Desktop Application中使用没有任何问题,但是在Service中调用SendInput没有任何效果,函数返回结果却是正常的。Service中的code如下:

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);

}

这个Service是参考MSDN上的一个Sample
http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948

任何想法都欢迎 :)
...全文
149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
loyoo2540598 2013-06-22
  • 打赏
  • 举报
回复
,没有用过这个东西。。。。
scutth 2013-06-22
  • 打赏
  • 举报
回复
来个人回复下吧,我好结贴。。 问题解决方案见这里

64,653

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧