Цитата 11943499:
Этот скрипт закрывает второй экземпляр проги, а нужно закрыть их оба. »
|
а у меня все отлично работает, закрываются оба скрипта. думаю даже сократить можно так:
Код:

If NOT _Singleton(@ScriptName, 1) Then
можно попробовать вот такой вариант:
Код:

Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
Global Const $sProName = 'Test name'
Global Const $sProVerNo = '0.1'
Global Const $sProVer = 'v' & $sProVerNo
Global Const $sProNameVer = $sProName & ' ' & $sProVer
Global Const $sProIDText = $sProNameVer & ' [ID] ' & $sProNameVer
If NOT _Singleton($sProIDText, 1) Then
MsgBox(48, 'Внимание', 'Один экземпляр скрипта уже запущенны' & @CRLF & 'Все экземпляры сейчас будут закрыты')
While WinExists($sProIDText)
WinKill($sProIDText)
WEnd
_Pro_Exit()
EndIf
AutoItWinSetTitle($sProIDText)
HotKeySet('{ESC}', '_Pro_Exit'); ESC - закрыть скрипт
GUICreate('Test', 400, 400)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState()
While 1
Sleep(10)
WEnd
Func _Pro_Exit()
Exit
EndFunc
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
Return $GUI_RUNDEFMSG
EndFunc
или вот такой вариант, через элементы управления - корректное закртые скрипта:
Код:

Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
Global Const $sProName = 'Test name'
Global Const $sProVerNo = '0.1'
Global Const $sProVer = 'v' & $sProVerNo
Global Const $sProNameVer = $sProName & ' ' & $sProVer
Global Const $sProIDText = $sProNameVer & ' [ID] ' & $sProNameVer
If NOT _Singleton($sProIDText, 1) Then
MsgBox(48, 'Внимание', 'Один экземпляр скрипта уже запущенны' & @CRLF & 'Все экземпляры сейчас будут закрыты')
Opt('WinTitleMatchMode', 2)
ControlSetText('[TITLE:' & $sProIDText & '; CLASS:AutoIt v3;]', '', '[CLASS:Edit; INSTANCE:1]', 'exit')
_Pro_Exit()
EndIf
AutoItWinSetTitle(@AutoItPID & ' ' & $sProIDText)
Global Const $hAutoItWin = WinGetHandle(@AutoItPID & ' ' & $sProIDText)
HotKeySet('{ESC}', '_Pro_Exit'); ESC - закрыть скрипт
GUICreate('Test', 400, 400)
GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUISetState()
While 1
Sleep(10)
If ControlGetText($hAutoItWin, '', '[CLASS:Edit; INSTANCE:1]') == 'exit' Then _Pro_Exit()
WEnd
Func _Pro_Exit()
Exit
EndFunc
Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam)
If $iProc[0] = $HTCLIENT Then Return $HTCAPTION
Return $GUI_RUNDEFMSG
EndFunc
Цитата 11943499:
Вот скриптик для реализации моей задачи, может пригодится »
|
сам себя он не закрывает при запуске первого экземпляра?
