Dentel
Будет.
[Архив - Часть 1.2] AutoIt скрипты
-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
Creat0R
А чем не устраивает простое отключение/включение родительского окна?
Код:
А чем не устраивает простое отключение/включение родительского окна?
Код:
Код: Выделить всё
#include
GUICreate("My GUI")
Opt("GUICoordMode",2)
$Button_1 = GUICtrlCreateButton ("Open File", 10, 30, 100)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
WinSetState ("My GUI", "", @SW_DISABLE)
$a = FileOpenDialog ( "FileOpenDialog", "c:\", "All (*.*)")
WinSetState ("My GUI", "", @SW_ENABLE)
WinActivate ("My GUI")
EndSelect
Wend-
Creat0R
Re: [Архив - Часть 1.2] AutoIt скрипты
amel27
Цитата:
чем не устраивает простое отключение/включение родительского окна?
Ну например, в панели задачь появляется дополнительная вкладка
, или если сделать поверх всех окон гуи, то вызываемое окно буде за ним... можно конечно выкрутится функцией WinSetOnTop, но это, имхо, не удобно...
В идеале, хочется чтобы можно было вызвать окно сохранения (к примеру), и нажимая на окно гуи, чтобы вызванное окно мигало, точно также как это происходит если вызвать дочернее окно гуи... вот пример:
Код:
Кстати, почти такой же способ (в плане задумки функиональности) как ты привёл в примере, я использовал для скрипта который разукрашивает скрипты для поста
. Ты его уже видел? тот который я запостил
P.S
Вместо WinSetState лучше GuiSetState, и порядок таких объявлении очень важен... если именно для дочернего гуи, то так как я привёл в посте (@SW_HIDE в конце), это идеальный способ (таким образом не мигает окно родительского гуи в момент его активации).
И ещё, вместо WinActivate("Title") лучше WinSetState("Title", "", @SW_RESTORE), это если для гуи, оно быстрее срабатывает.
P.S.S.
А ты не знаешь случам как решить задачку про проверку на нажатие определённой клавиши, кнопки мышки, или любого другого действия со стороны пользователя? (Которую я тоже привёл в
Цитата:
чем не устраивает простое отключение/включение родительского окна?
Ну например, в панели задачь появляется дополнительная вкладка
, или если сделать поверх всех окон гуи, то вызываемое окно буде за ним... можно конечно выкрутится функцией WinSetOnTop, но это, имхо, не удобно...В идеале, хочется чтобы можно было вызвать окно сохранения (к примеру), и нажимая на окно гуи, чтобы вызванное окно мигало, точно также как это происходит если вызвать дочернее окно гуи... вот пример:
Код:
Код: Выделить всё
#include
$ParentWin = GUICreate("Parent GUI", 250, 250)
$Button = GUICtrlCreateButton("Child", 20, 50)
GUISetState()
$ChildWin = GUICreate("Child GUI", 200, 200, -1, -1, -1, -1, $ParentWin)
While 1
$msg1 = GUIGetMsg()
Select
Case $msg1 = $GUI_EVENT_CLOSE
Exit
Case $msg1 = $Button
GUISetState(@SW_DISABLE, $ParentWin)
GUISetState(@SW_SHOW, $ChildWin)
While 1
$msg2 = GUIGetMsg()
Select
Case $msg2 = $GUI_EVENT_CLOSE
GUISetState(@SW_RESTORE, $ParentWin)
GUISetState(@SW_ENABLE, $ParentWin)
GUISetState(@SW_HIDE, $ChildWin)
ExitLoop
EndSelect
Wend
EndSelect
WEndКстати, почти такой же способ (в плане задумки функиональности) как ты привёл в примере, я использовал для скрипта который разукрашивает скрипты для поста
. Ты его уже видел? тот который я запостил [архив - Часть 2] AutoIt скрипты
.P.S
Вместо WinSetState лучше GuiSetState, и порядок таких объявлении очень важен... если именно для дочернего гуи, то так как я привёл в посте (@SW_HIDE в конце), это идеальный способ (таким образом не мигает окно родительского гуи в момент его активации).
И ещё, вместо WinActivate("Title") лучше WinSetState("Title", "", @SW_RESTORE), это если для гуи, оно быстрее срабатывает.
P.S.S.
А ты не знаешь случам как решить задачку про проверку на нажатие определённой клавиши, кнопки мышки, или любого другого действия со стороны пользователя? (Которую я тоже привёл в
[архив - Часть 2] AutoIt скрипты
).-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
Dentel
Цитата:
У меня есть сервер, к которому не подключен монитор. На сервере установлена WinXP. Захожу на этот сервер с помощью "Подключение к удаленному рабочему столу" через локальную сеть. На сервере вылажен скрипт. Если "подключение" активно, то скрипт работает и делает то, что надо. Если "подключение" закрыто, скрипт глохнет
При отключении рабочий стол блокируется, для нормальной работы его нужно разблокировать удаленно или с локальной консоли... Поэтому связка AutoLogon+VNC удобней для администрирования серверов нежели RDP. ИМХО.
Цитата:
У меня есть сервер, к которому не подключен монитор. На сервере установлена WinXP. Захожу на этот сервер с помощью "Подключение к удаленному рабочему столу" через локальную сеть. На сервере вылажен скрипт. Если "подключение" активно, то скрипт работает и делает то, что надо. Если "подключение" закрыто, скрипт глохнет
При отключении рабочий стол блокируется, для нормальной работы его нужно разблокировать удаленно или с локальной консоли... Поэтому связка AutoLogon+VNC удобней для администрирования серверов нежели RDP. ИМХО.
-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
Creat0R
Цитата:
В идеале, хочется чтобы можно было вызвать окно сохранения (к примеру), и нажимая на окно гуи, чтобы вызванное окно мигало, точно также как это происходит если вызвать дочернее окно гуи
Можно самому написать аналогичные функции, пример:
Код:
Цитата:
В идеале, хочется чтобы можно было вызвать окно сохранения (к примеру), и нажимая на окно гуи, чтобы вызванное окно мигало, точно также как это происходит если вызвать дочернее окно гуи
Можно самому написать аналогичные функции, пример:
Код:
Код: Выделить всё
#include
#include
$GUIParent = GUICreate("My GUI", 290, 70)
Opt("GUICoordMode",2)
$Button_1 = GUICtrlCreateButton ("Message Box", 30, 25, 100)
$Button_2 = GUICtrlCreateButton ("File Open", 30, -1)
GUISetState ()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $Button_1
_MsgBox ($GUIParent, "Сообщение", "Текст сообщения", $MB_OK + $MB_ICONASTERISK)
Case $msg = $Button_2
$file = _FileOpenDialog ($GUIParent, "Выбор файла", "C:\WINDOWS", "Документы (*.DOC)|Все (*.*)")
_MsgBox ($GUIParent, "Сообщение", "Выбран файл: " & $file, $MB_OK + $MB_ICONASTERISK)
EndSelect
Wend
Func _MsgBox ($mainGUI, $MsgBoxTitle, $MsgBoxText, $MsgBoxType)
$ret = DllCall ("user32.dll", "int", "MessageBox", _
"hwnd", $mainGUI, _
"str", $MsgBoxText , _
"str", $MsgBoxTitle, _
"int", $MsgBoxType)
Return $ret [0]
EndFunc
Func _FileOpenDialog ($mainGUI, $sTitle, $sInitDir, $sFilter = 'All (*.*)')
Local $aFilter = StringSplit ( $sFilter, '|')
Local $aCSTR [$aFilter [0] *2+1]
Local $i, $iStart, $iFinal, $sCStruct = '', $sWStruct = ''
$aCSTR [0] = $aFilter [0] *2
For $i=1 To $aFilter [0]
$iStart = StringInStr ($aFilter [$i], '(', 0, 1)
$iFinal = StringInStr ($aFilter [$i], ')', 0,-1)
$aCSTR [$i*2-1] = StringStripWS (StringLeft ($aFilter [$i], $iStart-1), 3)
$aCSTR [$i*2] = StringStripWS (StringTrimRight (StringTrimLeft ($aFilter [$i], $iStart), StringLen ($aFilter [$i]) -$iFinal+1), 3)
$sCStruct = $sCStruct & 'byte[' & StringLen ($aCSTR [$i*2-1])+1 & '];byte[' & StringLen ($aCSTR [$i*2])+1 & '];'
$sWStruct = $sWStruct & 'byte[' & StringLen ($aCSTR [$i*2-1])*2+2 & '];byte[' & StringLen ($aCSTR [$i*2])*2+2 & '];'
Next
Local $uCSTR = DllStructCreate ($sCStruct & 'byte[1]')
Local $uWSTR = DllStructCreate ($sWStruct & 'byte[2]')
For $i=1 To $aCSTR [0]
DllStructSetData ($uCSTR, $i, $aCSTR [$i])
Next
$ret = DllCall ("kernel32.dll", "int", "MultiByteToWideChar", _
"int", 0, _
"int", 0, _
"ptr", DllStructGetPtr ($uCSTR), _
"int", DllStructGetSize ($uCSTR), _
"ptr", DllStructGetPtr ($uWSTR), _
"int", DllStructGetSize ($uWSTR) )
$ret = DllCall("Shell32.dll", "int", 'GetFileNameFromBrowse', _
'hwnd', $mainGUI, _
'wstr', '', _
'int', 255, _
'wstr', $sInitDir, _
'wstr', '', _
'ptr', DllStructGetPtr ($uWSTR), _
'wstr', $sTitle )
Return $ret [2]
EndFunc-
amel27
Re: [Архив - Часть 1.2] AutoIt скрипты
Creat0R
Цитата:
А ты не знаешь случам как решить задачку про проверку на нажатие определённой клавиши, кнопки мышки, или любого другого действия со стороны пользователя? (Которую я тоже привёл в посте со скриптом для разукрашивания).
- AutoIT не годится для программ типа "клавиатурных шпионов" - такие программы работают на уровне ядра, а не в пользовательском режиме;
- нет надежных средств для снятия состояния клавиатуры, пользовательские программы работают с виртуальной, а не реальной клавиатурой;
- существуют API-функции, позволяющие снимать состояние всех клавиш виртуальной клавиатуры за один вызов, т.е. возможно отслеживать все действия пользователя, но пока активно окно приложения.
Цитата:
А ты не знаешь случам как решить задачку про проверку на нажатие определённой клавиши, кнопки мышки, или любого другого действия со стороны пользователя? (Которую я тоже привёл в посте со скриптом для разукрашивания).
- AutoIT не годится для программ типа "клавиатурных шпионов" - такие программы работают на уровне ядра, а не в пользовательском режиме;
- нет надежных средств для снятия состояния клавиатуры, пользовательские программы работают с виртуальной, а не реальной клавиатурой;
- существуют API-функции, позволяющие снимать состояние всех клавиш виртуальной клавиатуры за один вызов, т.е. возможно отслеживать все действия пользователя, но пока активно окно приложения.