突破Session0之WTSSendMessage 使用

来源:互联网 发布:软件测试表情包 编辑:程序博客网 时间:2024/06/05 04:40

最近在做一个windows下的服务器,试了好久服务器怎么和当前界面通信,最简单的使用这个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);
这是msdn上的一个语法介绍

第一次这样写的不能正常运行

LPWSTR message;LPWSTR title;     DWORD *resp=NULL;//这里是错的!正确用法如下    WTSSendMessage(        WTS_CURRENT_SERVER_HANDLE,         WTSGetActiveConsoleSessionId(),        title, lstrlen(title),         message, lstrlen(message),         0, 0, resp,false);
 pResponse is a pointer to a variable that receives the user's response. Means the button which the user press.
正确用法

    DWORD resp;//不要定义成指针    WTSSendMessage(        WTS_CURRENT_SERVER_HANDLE,         WTSGetActiveConsoleSessionId(),        title, lstrlen(title),         message, lstrlen(message),         0, 0, &resp,false);
下面这个是带有按钮的

LPWSTR lpszTitle = L"Time Change";LPWSTR lpszText = L"Notification: 5 seconds have elapsed.\r\nWould you like to see more details?";DWORD dwSession = WTSGetActiveConsoleSessionId();DWORD dwResponse;WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSession, lpszTitle,static_cast<DWORD>((wcslen(lpszTitle) + 1) * sizeof(wchar_t)),lpszText, static_cast<DWORD>((wcslen(lpszText) + 1) * sizeof(wchar_t)),MB_YESNO|MB_ICONINFORMATION, 0 /*wait indefinitely*/, &dwResponse, TRUE);



原创粉丝点击