2012-05-17 72 views
0

我試圖在用戶嘗試停止服務時顯示消息框。停止服務之前的WTSSendmessage

爲此,我使用WTSSendmessage API ......而一旦SERVICE_CONTROL_STOP事件發生時我叫功能..

我是在上述步驟正確的?因爲我沒有得到用戶一旦特里一個消息框停止服務..

請指引我...

下面是我的代碼片段::

case SERVICE_CONTROL_STOP: 
    WTSSendMessage = (fptr1)GetProcAddress(hinstLib, "WTSSendMessage"); 
    BOOL ret = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, dwSession, lpszTitle, 12 ,lpszText, 7 ,MB_YESNO|MB_ICONINFORMATION, 0, &res, TRUE); 

    ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; 
    SetServiceStatus(serviceStatusHandle, &serviceStatus); 
    SetEvent(stopServiceEvent); 
    return; 
+0

你確定「dwSession」變量設置正確嗎?它的價值是什麼? – CoreTech

+0

dwsession設置爲「DWORD dwSession = WTSGetActiveConsoleSessionId();」 – 2vision2

+0

嗨核心技術,問題是與「dwsession」..我用「WTS_CURRENT_SESSION」替換「dwsession」。 「WTS_CURRENT_SESSION」被定義爲「#define WTS_CURRENT_SESSION((DWORD)-1)」。但相同的代碼是不是在Windows 7中工作..任何想法? – 2vision2

回答

1

使用WTSGetActiveConsoleSessionId()作爲描述在MSDN article我在前面的問題中向你展示過。該文章包含您需要的所有代碼。

我也敦促你爲你的API調用包括錯誤檢查。在沒有幫助的情況下診斷錯誤比需要的更困難。

+0

嗨大衛,我用BOOL ret = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE,WTSGetActiveConsoleSessionId(),(LPWSTR)L「警告」,8 * 2,(LPWSTR)L「我的警告消息」,74 * 2,MB_ICONERROR | MB_TOPMOST | MB_SETFOREGROUND,0 ,&res,FALSE);「,通過使用它不運行在XP甚至任何想法? – 2vision2