mucitbey Posted June 9, 2020 Share Posted June 9, 2020 Hello friends,I want to do;If the program sends a shutdown request to the computer to be closed, a warning will appear, (Shutdown takes place? YES NO) If the user wants to continue working, the shutdown will not take place, if possible, a feedback will be sent to the sender with a warning.I would be very happy if you could help with the change needed to ensure this process.Thanks in advance. expandcollapse popup#NoTrayIcon #RequireAdmin #include <inet.au3> #include <File.au3> #include <Misc.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <ColorConstants.au3> #include <GUIConstantsEx.au3> #include <ComboConstants.au3> #include <WindowsConstants.au3> Opt('MustDeclareVars', 1) _Singleton(@ScriptName, 0) Global $var, $msg, $sComputer, $iCreateLogFile, $ip, $iPIDShutdown, $sNamesOnlyErrorLogFileName, $iFoundComputerName, $hComputerNames, $sShutdownOutput Global $sErrorLogMessage, $sErrorLogFileName, $iNotExecuted, $sErrorMsg Global $sArgument = "s" Global $sMessage = "Your computer shuts down remotely." Global $gui = GUICreate("Remote Shutdown v1.2 _ank_",430,130,@DesktopWidth + (-430), @DesktopHeight + (-170), BitOR($WS_BORDER,$WS_EX_TOOLWINDOW)) GUISetBkColor(0xABCDEF) $var = IniReadSection(@ScriptDir &"\Configrs.ini", "PC") If @error Then MsgBox(4096, "", "An error occurred, probably no ini file.") Global $menu = GUICtrlCreateLabel("Computer to Shut Down : IP Number : Status :",5,5,400,25) GUICtrlSetFont(-1, 12, 800, 0, "Arial Narrow") Global $combo = GUICtrlCreateCombo("", 5, 30,160,30,BitOR($WS_VSCROLL, $CBS_DROPDOWNLIST,$ES_READONLY)) GUICtrlSetFont($combo, 12, 800, 0, "Arial Narrow") Global $Statu = GUICtrlCreateLabel ("", 320,30,80,30) Global $User = GUICtrlCreateLabel ($ip, 180,30,140,25) GUICtrlSetFont($User, 14, 800, 0, "Arial Narrow") Global $Close = GUICtrlCreateButton("SHUTDOWN COMPUTER",5,65,160,30) GUICtrlSetFont($Close, 12, 800, 0, "Arial Narrow") GUICtrlSetState ($Close,$GUI_DISABLE) Global $Abort = GUICtrlCreateButton("CLOSE PROGRAM",260,65,160,30) GUICtrlSetFont($Abort, 12, 800, 0, "Arial Narrow") For $i = 1 To $var[0][0] GUICtrlSetData($combo, $var[$i][1]) Next TCPStartup() GUISetState() While 1 $msg = GUIGetMsg() Switch $msg Case $combo $sComputer = GUICtrlRead($combo) $ip = TCPNameToIP($sComputer) _Checkx() Case $Close If $sComputer <> "" Then Local $v1 = MsgBox(36, "ATTENTION", "Your network "&$sComputer&" you are shutting down the computer" &@CRLF& "Are you sure you want to shut down the computer?") If $v1 = 6 Then _RemoteShutdown($sComputer, $sArgument, 30, $sMessage, "a") ExitLoop ElseIf $v1 = 2 Then Exit EndIf Else MsgBox(48, "ERROR", "Didn't choose the computer to shut down?") EndIf Case $Abort Local $v2 = MsgBox(36, "WARNING", "You are closing the program" &@CRLF& "Are you sure you want to close the program?") If $v2 = 6 Then Exit ElseIf $v2 = 2 Then EndIf EndSwitch WEnd Func _RemoteShutdown($sComputer, $sArgument, $iTimeOut = 0, $sMessage="", $sErrorLogMessage = Default, $sErrorLogFileName = Default) If $sErrorLogMessage = Default Then $iCreateLogFile = 0 Else $iCreateLogFile = 1 If Not IsString($sErrorLogMessage) Or $sErrorLogMessage = "" Then $sErrorLogMessage = "Shutdown does not work." If $sErrorLogFileName = Default Then $sErrorLogFileName = StringTrimRight(@ScriptDir, 4) &"Errors.log" EndIf $sErrorLogMessage = $sComputer & " : " & $sErrorLogMessage $sShutdownOutput = "" $iNotExecuted = 0 If StringInStr($sArgument, "a") Then ;Abort $sArgument = "a" ElseIf StringInStr($sArgument, "r") Then ;Reboot $sArgument = "r" ElseIf StringInStr($sArgument, "s") Then ;Shutdown $sArgument = "s" Else $sShutdownOutput &= "Invalid shutdown type argument." EndIf If Not IsInt($iTimeOut) Then $sShutdownOutput &= "Invalid Timeout argument. " ElseIf $iTimeOut < 0 Then $iTimeOut = 0 EndIf If $sShutdownOutput = "" Then Local Const $STDOUT_CHILD = 2 If $sArgument = "a" Then $iPIDShutdown = Run('shutdown -' & $sArgument & ' -m \\' & $sComputer, '', @SW_HIDE, $STDOUT_CHILD) Else If $sMessage = "" Then $iPIDShutdown = Run('shutdown -' & $sArgument & ' -f -t ' & $iTimeOut & ' -m \\' & $sComputer, '', @SW_HIDE, $STDOUT_CHILD) Else $iPIDShutdown = Run('shutdown -' & $sArgument & ' -f -t ' & $iTimeOut & ' -c "' & $sMessage & '" -m \\' & $sComputer, '', @SW_HIDE, $STDOUT_CHILD) EndIf EndIf ProcessWaitClose($iPIDShutdown) $sShutdownOutput = StringStripWS(StdoutRead($iPIDShutdown), 3) EndIf If $sShutdownOutput <> "" Then $iNotExecuted = 1 $sErrorMsg = " : " & $sShutdownOutput EndIf If $iNotExecuted Then If $iCreateLogFile Then _FileWriteLog($sErrorLogFileName, $sErrorLogMessage & $sErrorMsg) $sNamesOnlyErrorLogFileName = StringTrimRight($sErrorLogFileName, 4) & "-Names.log" $iFoundComputerName = 0 If FileExists($sNamesOnlyErrorLogFileName) Then Local $aComputerNames _FileReadToArray($sNamesOnlyErrorLogFileName, $aComputerNames) For $iNameIndex = 1 To $aComputerNames[0] Step 1 If StringInStr($aComputerNames[$iNameIndex], $sComputer) Then $iFoundComputerName += 1 Next EndIf If Not $iFoundComputerName Then $hComputerNames = FileOpen($sNamesOnlyErrorLogFileName, 1) FileWriteLine($hComputerNames, $sComputer) FileClose($hComputerNames) EndIf EndIf Return SetError(1, 0, 0) Else Return 1 EndIf EndFunc Func _Checkx() If $sComputer <> "" Then $var = Ping($sComputer) If not @error Then GUICtrlSetData($Statu, "PC ON") GUICtrlSetColor($Statu, $COLOR_GREEN) GUICtrlSetFont($Statu, 12, 800, 0, "Arial Narrow") GUICtrlSetData($User, $ip) GUICtrlSetColor($User, $COLOR_GREEN) Else GUICtrlSetData($Statu, "PC OFF") GUICtrlSetColor($Statu, $COLOR_RED) GUICtrlSetFont($Statu, 12, 800, 0, "Arial Narrow") GUICtrlSetData($User, $ip) GUICtrlSetColor($User, $COLOR_RED) Endif Dim $ssx = GUICtrlRead($Statu) If $ssx <> "PC OFF" Then GUICtrlSetState($Close,$GUI_ENABLE) If $ssx == "PC OFF" Then GUICtrlSetState($Close,$GUI_DISABLE) EndFunc Link to comment Share on other sites More sharing options...
faustf Posted June 16, 2020 Share Posted June 16, 2020 if you want shutdown a machine you can run by cmd a command shutdown /s if you want intercept if any other run a shutdown i thinkyou must intercept a winapi to do that probably this is a start for your search https://www.autoitscript.com/forum/topic/89174-intercept-shutdown/ https://www.autoitscript.com/forum/topic/144707-intercepting-a-reboot-command-and-convert-it-to-shutdown/ https://www.autoitscript.com/forum/topic/180860-intercept-shutdown-on-windows-seven-64-bits/ https://stackoverflow.com/questions/25951368/intercept-windows-shut-down-and-execute-a-command https://www.apriorit.com/dev-blog/413-win-api-shutdown-events good luck Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now