win7 下服务程序弹出对话框 win7 session 隔离
2012-01-14 02:21
411 查看
关于win7与vista下session隔离的文章网上已经有很多文章,大家可以自己google。
这里主要讲win7与vista下服务程序如何弹出对话框。
这个问题也是我自己遇到过,需要服务程序与用户进行简单的交互比如说弹出个对话框。
但是在win7与vista下直接使用messagebox将会出现一个交互式对话框提示用户是否查看消息,如果用户点击否则服务程序就阻塞在那里了。
于是到网上找了会办法其实很简单,就是使用WTSSendMessage函数。对于这个函数的使用网上有多资料。
我在使用这函数时始终没有看到对话框的弹出。
最后发现是第二个参数SessionId:需要是当前活动的控制台session的id。
网上说windows提供一个专门的方法来获得该sessionid即WTSGetActiveConsoleSessionId。
但是在使用该方法链接阶段总是报错说找不到该符号。
于是自己写了函数来获得该sessionid。
DWORD GetActiveConsoleSessionId()
{
PWTS_SESSION_INFO ppSessionInfo;
DWORD pCount;
BOOL flag;
DWORD sessionid = -1;
flag = WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,
0,
1,
&ppSessionInfo,
&pCount);
if(!flag)
{
return -1;
}
while(pCount > 0)
{
--pCount;
if((ppSessionInfo[pCount].State == WTSActive )&&(ppSessionInfo[pCount].pWinStationName == "console"))//这里的字符串比较方法自己去找我这里意思一下
{
sessionid = ppSessionInfo[pCount].SessionId;
break;
}
}
WTSFreeMemory(ppSessionInfo);
return sessionid;
}
字符串比较方法请自己修改
这里主要讲win7与vista下服务程序如何弹出对话框。
这个问题也是我自己遇到过,需要服务程序与用户进行简单的交互比如说弹出个对话框。
但是在win7与vista下直接使用messagebox将会出现一个交互式对话框提示用户是否查看消息,如果用户点击否则服务程序就阻塞在那里了。
于是到网上找了会办法其实很简单,就是使用WTSSendMessage函数。对于这个函数的使用网上有多资料。
BOOL WTSSendMessage( __in HANDLE hServer, __in DWORD SessionId, __in LPTSTR pTitle, __in DWORD TitleLength, __in LPTSTR pMessage, __in DWORD MessageLength, __in DWORD Style, __in DWORD Timeout, __out DWORD* pResponse, __in BOOL bWait );
我在使用这函数时始终没有看到对话框的弹出。
最后发现是第二个参数SessionId:需要是当前活动的控制台session的id。
网上说windows提供一个专门的方法来获得该sessionid即WTSGetActiveConsoleSessionId。
但是在使用该方法链接阶段总是报错说找不到该符号。
于是自己写了函数来获得该sessionid。
DWORD GetActiveConsoleSessionId()
{
PWTS_SESSION_INFO ppSessionInfo;
DWORD pCount;
BOOL flag;
DWORD sessionid = -1;
flag = WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE,
0,
1,
&ppSessionInfo,
&pCount);
if(!flag)
{
return -1;
}
while(pCount > 0)
{
--pCount;
if((ppSessionInfo[pCount].State == WTSActive )&&(ppSessionInfo[pCount].pWinStationName == "console"))//这里的字符串比较方法自己去找我这里意思一下
{
sessionid = ppSessionInfo[pCount].SessionId;
break;
}
}
WTSFreeMemory(ppSessionInfo);
return sessionid;
}
字符串比较方法请自己修改
相关文章推荐
- Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good
- [置顶] 在服务程序中弹出对话框
- 在服务程序中弹出对话框
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- [Win32] 服务程序开发(2)Session 0隔离(上)
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- Windows中Session 0隔离对服务程序和驱动程序的影响
- VS与Win7共舞:系统服务的Session 0隔离
- vista和win7在windows服务中交互桌面权限问题解决方法:穿透Session 0 隔离
- [Win32] 服务程序开发(3)Session 0隔离(下)创建SYSTEM权限可交互进程
- 在服务程序中弹出对话框
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- VS与Win7共舞:系统服务的Session 0隔离
- VS2010 ATL服务程序编写全攻略(三) - 创建用户桌面进程(突破Session 0隔离)
- VS与Win7共舞:系统服务的Session 0隔离
- VS与Win7共舞:系统服务的Session 0隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
- [转]解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离