我正在编写一个程序,可以由另一个服务(在我们的控制下)或login的用户加载。 该程序需要知道,如果窗口站是交互式的,以显示对话框。 我知道GetProcessWindowStation函数,但是这个返回一个句柄。 有没有办法找出答案?
在Windows上启动Sinatra应用程序时,霰弹枪爆炸
在Eclipse / CDT / gcc中使用用Visual Studio构build的.lib
使用Environment.Osversion确定操作系统
交互式窗口站总是winsta0 。 所以你需要获得窗口站名来确定它。 这里是一些伪代码:
wchar_t buffer[256] = {0}; DWORD length = 0; GetUserObject@R_269_4045@ion(GetProcessWindowStation(),UOI_NAME,buffer,256,&length); if (!lstrcmp(buffer,"winsta0")) { // Interactive! }
从http://msdn.microsoft.com/en-us/library/ms687096(VS.85).aspx :
交互式窗口站Winsta0是唯一可以显示用户界面或接收用户输入的窗口站
我建议让服务传递命令行参数,让程序知道它是由服务而不是用户启动的。
请注意,这只适用于Windows XP(而且有时只适用于Windows XP) – 在Windows Vista及更高版本中,服务在与交互式用户分开的会话中运行,因此您将无法在这些操作系统上连接到控制台。
另外在Windows XP上,如果机器上有多个用户(快速用户切换),则只有第一个用户登录到会话0(服务运行的地方),否则应用程序将无法工作。
将服务分成两部分 – 执行工作的服务和作为任务(使用Win32任务调度程序API)运行UI的一小段代码将会更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。