Search the Community
Showing results for tags 'mb_service_notification'.
Found 2 results
I'm unable to display a message box from a compiled AutoIt alerting script that is executed from a service (also a compiled AutoIt script). I used $MB_SERVICE_NOTIFICATION, but the dialog doesn't appear and the alerting script continues as if the OK button had been clicked. The service script uses ShellExecute() to launch the alerter (as opposed to a *Wait() call) so it can continue processing. Note that we used Windows Service Wrapper (winsw) to turn the compiled script into a service but haven't identified any issues from it. I tried the one-line execute example given in this thread: Message box timeout not working ; 2097152 = $MB_SERVICE_NOTIFICATION $iPID = Run(@AutoItExe & ' /AutoIt3ExecuteLine "MsgBox(2097152, ''' & $sTitle & ''', ''' & $sText & ''')"') without the timeout code, but no luck: the MsgBox does not appear. (In any case, we don't have AutoIt installed on the target system, so it would have to be converted into a .exe file.) We're developing and unit-testing on Win 7 Enterprise; the target OS is Win 7 Pro, and the AutoIt version is 18.104.22.168. Any solutions or suggestions will be much appreciated. Code fragments are below. Thanks. The following code fragment is the relevant portion of the alerting script that displays the MsgBox: [...] ; Alert the operator that there's a problem with the recording $sFeed = $aRecInfo $sSession = $aRecInfo $sTemp = $aRecInfo $sDate = _FormatDate($sTemp) $sTemp = $aRecInfo $sTime = _FormatTime($sTemp) _Debug2("Inactive recording feed " & $sFeed & ", Session=" & $sSession & ", Start Date/Time=" & _ $sDate & " " & $sTime) $sErrorMsg = "ERROR: Feed " & $sFeed & " for session " & $sSession & " stopped, notify reporter immediately" $iMbFlag = $MB_SERVICE_NOTIFICATION _Debug1("Displaying MsgBox...") MsgBox($iMbFlag, "INTERVIEW RECORDING ERROR", $sErrorMsg) _Debug1("Returned from MsgBox") [...] And the calling code fragment in the service is: ; Walk through the array backwards so we don't end up evaluating an index that doesn't exist For $iIndex = UBound($aFeedArray)-1 To 0 Step -1 [...] ; Before timing-out the feed, check for a .mpgpart file (=> feed may still be recording) $sDirPath = $sDirTemp & "\" & $sFeedTemp & "\" & $aFeedArray[$iIndex][$cSessionName] $sMpgPartName = GetMpgPart($sDirPath, $sFeedTemp) If StringLen($sMpgPartName) > 0 Then ; If .mpgpart file name hasn't changed in more than $iDeadFeedTime seconds, then declare feed dead ; ========v Test code to force error v======== $sMpgPartName = $aFeedArray[$iIndex][$cMpgPartName] ; ========^ Test code to force error ^======== _Debug2("Just set $sMpgPartName to '" & $sMpgPartName & "', should fall into dead-feed code") If $sMpgPartName = $aFeedArray[$iIndex][$cMpgPartName] Then ; Name is same => feed is dead: alert the operator and delete the feed w/out stop-processing _Debug2("Feed " & $sFeedTemp & " looks dead -- alerting the operator") _Debug2("Delete GUID " & $aFeedArray[$iIndex][$cGUID]) ; ======== Alert app execution ======== ; $sAlertApp = @ScriptDir & "\" & "RecAlert.exe" $iChildPid = ShellExecute($sAlertApp, $sDirPath, "", "open") _Debug2("Alert app: ShellExecute(): " & _RetStr($iChildPid, @error, @extended)) _ArrayDelete($aFeedArray, $iIndex) Else ; Otherwise, the .mpgpart name has changed, reset the timer, store the name, and continue _Debug2("Feed " & $sFeedTemp & " timeout, but has new .mpgpart file -- continuing") $aFeedArray[$iIndex][$cDateTime] = TimerInit() $aFeedArray[$iIndex][$cMpgPartName] = $sMpgPartName EndIf ContinueLoop EndIf [...] Next
timmy2 posted a topic in AutoIt General Help and SupportI found this post that includes a demo of how the $MB_SERVICE_NOTIFICATION works. ; http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx ; Community Additions: MB_SERVICE_NOTIFICATION is ignored on Vista $MB_SERVICE_NOTIFICATION = 2097152; 0x00200000 DllCall('user32.dll', 'int', 'LockWorkStation') Sleep(3000) MsgBox($MB_SERVICE_NOTIFICATION, "$MB_SERVICE_NOTIFICATION Test", "Some message... will not work on Vista+")The above demo code works in Windows 7 in that it displays a message over the login screen, but the workstation is locked instead of logged out. I want to know if the message box will display when no user is logged in. So I changed the demo code to this: #include <MsgBoxConstants.au3> #include <AutoItConstants.au3> ;lock workstation ;DllCall('user32.dll', 'int', 'LockWorkStation') ;logout Shutdown ($SD_LOGOFF) Sleep(4000) MsgBox($MB_SERVICE_NOTIFICATION, "$MB_SERVICE_NOTIFICATION Test", "Some message... will not work on Vista+")Now I can test $MB_SERVICE_NOTIFICATION when the workstation is locked versus when the user is logged out. And what I'm seeing is that when the user is logged out $MB_SERVICE_NOTIFICATION does not enable messages to be displayed. Is there any method for displaying a message on the login screen when no user is logged in? My goal, BTW, is to run a script at night while the user is away from the computer and leave a message on the login screen for the user to see upon returning to work the next day.