Windows 服务程序、窗口界面、桌面交互、与远程桌面
昨天用c写了一个windows服务(服务内部带一个gui窗口+系统托盘),在windows xp sp3上测试,启动服务后,系统托盘显示正常。
但在另一台windows 2003 sp2 上测试(通过远程桌面登录),晕了,服务是启动了(在进程管理器中能看到),但系统托盘看不到,也就是在桌面的右下角看不到系统托盘的图标。
到网上找原因,找到这么几篇:
?id=45110
一开始,我参照: 在c的代码中显示窗口的前、后面加了这么一段代码:
HDESK hdeskCurrent;
HDESK hdesk;
HWINSTA hwinstaCurrent;
HWINSTA hwinsta;
hwinstaCurrent = GetProcessWindowStation();
if (hwinstaCurrent == NULL)
{
//LogEvent(_T("get window station err"));
return;
}
hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
if (hdeskCurrent == NULL)
{
//LogEvent(_T("get window desktop err"));
return;
}
//打开winsta0
hwinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);
if (hwinsta == NULL)
{
//LogEvent(_T("open window station err"));
return;
}
if (!SetProcessWindowStation(hwinsta))
{
//LogEvent(_T("Set window station err"));
return;
}
//打开desktop
hdesk = OpenDesktop("default", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
if (hdesk == NULL)
{
//LogEvent(_T("Open desktop err"));
return;
}
SetThreadDesktop(hdesk);
//到这一步,我们获取了和用户交互(如显示窗口)的权利
//显示窗口的代码写在这里
.....................................
SetProcessWindowStation(hwinstaCurrent);
SetThreadDesktop(hdeskCurrent);
CloseWindowStation(hwinsta);
CloseDesktop(hdesk);
编译后,在另一台 windows 2003 sp2 上启动服务,然后在 windows xp sp3 上,运行 mstsc /console,吊用没有。
为什么没效果呢?
接着搜索,找到一篇:
远程桌面mstsc /console(/admin) 的运用 ->
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70788.html