Имя пользователя:
Пароль:
 

Название темы: Глобальная переменная
Показать сообщение отдельно

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата 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:
Вот скриптик для реализации моей задачи, может пригодится »
сам себя он не закрывает при запуске первого экземпляра?

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:42, 23-07-2009 | #7

Название темы: Глобальная переменная