|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Глобальная переменная |
|
Глобальная переменная
|
Новый участник Сообщения: 36 |
Профиль | Отправить PM | Цитировать
Доброе время !
Ищу не найду способ объявления переменной таким образом, чтобы ее видел каждый запущенный скрипт. Возможно ли это в AI ? Собственно, для чего это мне нужно. 1 Запущена программа, она в режиме ожидания. 2 Запущена эта же программа, второй экземпляр. 3 Надо в 2 определить тот факт что запущена 1 и прервать процесс обеих. По всякому пробовал, не получается отследить. Наверное можно вычислить Pid-ы всех процессов с нужным наименованием окна и все их закрыть в цикле. Но окон может и не быть.... Была бы глобальная переменная, как это есть в Clipper... Тогда по ее значению можно было бы отследить процесс. Func GoGo() while 1 Sleep(3000) WEnd EndFunc |
|
Отправлено: 22:33, 22-07-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Создать такую переменную нет возможности.
варианты: Если и создовать переменную окружения, то только через bat, win api........ 2. интереакция между скрипта, обсуждения хотя бы тут., пример тут. |
------- Последний раз редактировалось proxy, 23-07-2009 в 14:05. Отправлено: 23:10, 22-07-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата 11943499:
#include <Misc.au3> if _Singleton(@ScriptName,1) = 0 And ProcessExists ( @ScriptName) Then Msgbox(0,"Сообщение","Второй екземпляр проги запущен", 2) ProcessClose(@ScriptName) Msgbox(0,"Сообщение","Все ок, закрываемся!",2) Exit EndIf Msgbox(0,"Сообщение","Первый екземпляр проги запущен",2) while 1 Sleep(100) wend |
|
------- Отправлено: 00:08, 23-07-2009 | #3 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Цитата beve:
|
|
Отправлено: 11:22, 23-07-2009 | #4 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Ещё вариант:
Первый скрипт создаёт в темпе файл. Во время работы проверяет его наличие и если не обнаруживает - выход. Второй скрипт просто удаляет этот файл и выходит. |
|
------- Отправлено: 12:23, 23-07-2009 | #5 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Вот скриптик для реализации моей задачи, может пригодится
#include <Misc.au3> $list = ProcessList() if _Singleton(@ScriptName,1) = 0 And ProcessExists ( @ScriptName) Then for $i = 1 to $list[0][0] If $list[$i][0] = @ScriptName Then $PID = ProcessExists($list[$i][1]) ProcessClose($PID) endif Next Exit EndIf |
Последний раз редактировалось 11943499, 23-07-2009 в 13:08. Отправлено: 12:56, 23-07-2009 | #6 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Цитата 11943499:
можно попробовать вот такой вариант: 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 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Цитата proxy:
Пришлось делать перебор все пидов с одноименным названием. Теперь хоть 50 экземпляров одноврменно можно отфутболивать. Цитата proxy:
Супер коллаж функции в рюшечках у тебя ! Кстати, хотел спросить по поводу функции HotKeySet Почему-то на некторыхх компах она не работает вообще, а на некоторых работает не всегда. Как будто переполнение буфера клавы, после перегруза снова начинает работать. Пробовал на Apple компах, там вообще с этим глухо. Есть что сказать по этому поводу ? HotKeySet("^z", "BackUp") HotKeySet("^x", "UnMount") |
||
Отправлено: 18:39, 23-07-2009 | #8 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать Цитата 11943499:
Цитата 11943499:
Цитата 11943499:
Цитата 11943499:
Цитата 11943499:
Цитата 11943499:
начни использовать тег: code, кнопочка с решеткой на панельке над полем ввода текста сообщения. так удобней читать код. |
||||||
------- Отправлено: 19:05, 23-07-2009 | #9 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Цитата proxy:
Я сам в шоке. Дома все отработал, принес на компы клиентам ставить, а там просто реакция 0 на Hotkeys и на _Ispressed Кстати, такая же история и на Терминал Сервере (Server 2003), там горячие клавиши не срабатывали изначально. Потом вставил просмотр окна Msgbox() непосредственно перед строкой срабатывания (_Ispressed), почему-то помогло. Как будто нужна некая задержка или инициализация. Но sleep() не срабатывает. Вот так методом научного тыка.... Правда, использовал местами _ClipBoard_Empty(), может оно там что-то обнуляет... В общем тыкаю дальше. Цитата proxy:
|
||
Отправлено: 20:58, 23-07-2009 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
V. 5.5/2000/2003 - Глобальная Адресная книга и контакты | Notsaint | Microsoft Exchange Server | 1 | 06-08-2009 08:14 | |
Debian/Ubuntu - Глобальная локалка или с чего начать !!! | 9gramm | Общий по Linux | 2 | 12-02-2009 15:00 | |
Глобальная проблема с Aspire 5102 WLMi | Торквемада | Ноутбуки | 31 | 23-12-2008 14:35 | |
Ошибка - [решено] Глобальная проблема с проводником (Internet Explorer) | wowbkgg | Microsoft Windows 2000/XP | 2 | 12-10-2008 12:48 | |
Глобальная адресная книга. | sova_sergey | Microsoft Exchange Server | 6 | 15-08-2008 12:27 |
|