您的位置:首页 > 其它

win7 下服务程序弹出对话框 win7 session 隔离

2012-01-14 02:21 411 查看
关于win7与vista下session隔离的文章网上已经有很多文章,大家可以自己google。

这里主要讲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;

}

字符串比较方法请自己修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: