![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа в скрытом окне |
|
|
[решено] Работа в скрытом окне
|
![]() Старожил Сообщения: 398 |
Здравствуйте!
Скажите пожалуйста, можно ли скрыть определённое окно программы, потом ему выслать комбинацию CTRL+S, ввести путь и нажать сохранить? Пробовал так: Но не работает после отсылки кмбинации ктрл+S окно активируется и ничего не происходит. |
|
------- Отправлено: 00:38, 16-03-2009 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать пример:
#region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) Opt('SendKeyDelay', 1) #endregion #region: - Global Global $iPid, $hHwd #endregion $iPid = Run('notepad.exe', '', @SW_HIDE) While 1 $hHwd = _ProcessGetWindow($iPid, 1) If IsHWnd($hHwd) Then ExitLoop WEnd ConsoleWrite($hHwd & @CRLF) ;~ MsgBox(0, '', $hHwd) ControlSetText($hHwd, '', '[CLASS:Edit; INSTANCE:1]', 'Новый текст') ControlSend($hHwd, '', '[CLASS:Edit; INSTANCE:1]', '^s') Sleep(500) WinSetState($hHwd, '', @SW_SHOW) MsgBox(64, 'Внимание', 'Пока окно было сркыто, ему была высланна строка текста и комбинация Ctrl+S') ProcessClose($iPid) Func _ProcessGetWindow($iPID, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iPID) Then $iPID = ProcessExists($iPID) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iPID Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc |
------- Отправлено: 04:00, 16-03-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 398
|
Профиль | Сайт | Отправить PM | Цитировать proxy, спасибо но есть один косячок, не знаю как отловить окно сохранить как... После высылки ктрл+S скрипт не может завершить сохранение.
|
------- Отправлено: 13:12, 16-03-2009 | #3 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Обычно в текстовых редакторах комбинация CTRL+S отвечает, за простое сохранение в открытом окне... А на появление окна Сохранить как, назначено другое сочетание клавиш, вот у меня попробовал 4 программы и только в Опере при нажатии на CTRL+S выскакивает окно Сохранить как... Поэтому хоть название программы дай, в которой нужно такое проделать...
|
------- Отправлено: 17:31, 16-03-2009 | #4 |
![]() Старожил Сообщения: 398
|
Профиль | Сайт | Отправить PM | Цитировать beve, Дак вообщето в томже блокноте если его открыть через run=>notepad.exe, а не открыть файл тогда он выдаёт окно сохранить как, т.к. куда ему сохранять?
|
|
------- Отправлено: 18:16, 16-03-2009 | #5 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать кстати:
Цитата:
благополучно со всеми окнами сохранения ))))) самый просто пример как отследить окошко "Сохранить как": #region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) Opt('SendKeyDelay', 1) #endregion #region: - Global Global $iMainWinPid, $hMainWinHwd Global $hSaveAsWinHwd #endregion ;~ $iMainWinPid = Run('notepad.exe') $iMainWinPid = Run('notepad.exe', '', @SW_HIDE) While 1 $hMainWinHwd = _ProcessGetWindow($iMainWinPid, 1) If IsHWnd($hMainWinHwd) Then ExitLoop WEnd ControlSetText($hMainWinHwd, '', '[CLASS:Edit; INSTANCE:1]', 'Новый текст 1') ControlSend($hMainWinHwd, '', '[CLASS:Edit; INSTANCE:1]', '^s') While 1 $hSaveAsWinHwd = WinGetHandle('[ACTIVE]') If ControlGetText($hSaveAsWinHwd, 'Текстовые документы (*.txt)', '[CLASS:Edit; INSTANCE:1]') == '*.txt' Then WinSetState($hSaveAsWinHwd, '', @SW_HIDE) ControlSetText($hSaveAsWinHwd, 'Текстовые документы (*.txt)', '[CLASS:Edit; INSTANCE:1]', 'new file.txt') ControlClick($hSaveAsWinHwd, 'Текстовые документы (*.txt)', '[CLASS:Button; INSTANCE:2]') ExitLoop EndIf WEnd Sleep(50) $hSaveAsWinHwd = WinGetHandle('[ACTIVE]') If ControlGetText($hSaveAsWinHwd, '&Да', '[CLASS:Button; INSTANCE:1]') == '&Да' Then WinSetState($hSaveAsWinHwd, '', @SW_HIDE) ControlClick($hSaveAsWinHwd, '&Да', '[CLASS:Button; INSTANCE:1]') EndIf WinSetState($hMainWinHwd, '', @SW_SHOW) MsgBox(64, 'Внимание', 'Пока окно было сркыто:' & @CRLF & _ '- ему был высланна строка текста:' & @TAB & 'Новый текст 1' & @CRLF & _ '- ему был высланна комбинация:' & @TAB & 'Ctrl+S' & @CRLF & _ '- файлы был сохранен под иминем:' & @TAB & 'new file.txt' & @CRLF & _ '- файл был сохранен с заменой файлов' & @CRLF & @CRLF & _ 'Сейчас это окно будет закрыто') ProcessClose($iMainWinPid) Func _ProcessGetWindow($iMainWinPid, $iRet=-1) Local $aWinList = WinList() Local $aRet[2] If IsString($iMainWinPid) Then $iMainWinPid = ProcessExists($iMainWinPid) For $i = 1 To UBound($aWinList)-1 If WinGetProcess($aWinList[$i][1]) = $iMainWinPid Then $aRet[0] = $aWinList[$i][0] ;Title $aRet[1] = $aWinList[$i][1] ;WinHandle If $iRet = 0 Then Return $aRet[0] If $iRet = 1 Then Return $aRet[1] Return $aRet EndIf Next Return SetError(1, 0, $aRet) EndFunc то тут нужно разбираться непосредственно с окном. К примеру можно кликнуть на кнопочку на панели Tool bar, если там есть конечно нужная. |
|
------- Отправлено: 19:37, 16-03-2009 | #6 |
![]() Старожил Сообщения: 398
|
Профиль | Сайт | Отправить PM | Цитировать С блокнотом работает и ещё с несколькими программами, а вот с этой не хочет. Помогите пожалуйста, хоть разберусь.
|
------- Отправлено: 22:12, 16-03-2009 | #7 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать хитрая прожка....лучше не получилось:
#region: - Option Opt('MustDeclareVars', 1) Opt('TrayIconDebug', 1) Opt('TrayIconHide', 0) Opt('SendKeyDelay', 1) Opt('WinDetectHiddenText', 1) Opt('WinSearchChildren', 1) #endregion #region: - Global Global $sFilePath = 'C:\Program Files\Multi Password Recovery\MPR.exe' Global $iMainWinPid, $hMainWinHwd Global $sWarningText = 'Attention! Saving all recovered passwords to a single file is insecure.' Global $sFileSaveName = 'mpf_save.mpf' #endregion ;~ ==>отладка ;~ $iMainWinPid = Run($sFilePath) ;~ Sleep(2000) ;~ WinSetState('Multi Password Recovery v.1.0.5', '', @SW_SHOW) ;~ WinMove('Multi Password Recovery v.1.0.5', '', @DesktopWidth-700, @DesktopHeight-700) ;~ Exit ;~ <==отладка HotKeySet('!{ESC}', '_Pro_Exit') ;~ таймер, закрывает скрипт через 2 минуты: AdlibEnable('_Pro_Exit', 1000*60*2) If ProcessExists('MPR.exe') Then ProcessClose('MPR.exe') ProcessWaitClose('MPR.exe') EndIf $iMainWinPid = Run($sFilePath) WinWait('Multi Password Recovery v.1.0.5') ;~ WinMove('Multi Password Recovery v.1.0.5', '', @DesktopWidth+100, @DesktopHeight+100); не работает ;~ WinSetState('Multi Password Recovery v.1.0.5', '', @SW_HIDE); не работает While 1 If WinExists('Multi Password Recovery v.1.0.5', 'Scan finished') Then WinSetState('Multi Password Recovery v.1.0.5', 'Scan finished', @SW_HIDE) ControlSend('Multi Password Recovery v.1.0.5', '', '[CLASS:TTreeView; INSTANCE:1]', '^s') EndIf If WinExists('Warning', $sWarningText) Then WinSetState('Warning', $sWarningText, @SW_HIDE) ControlCommand('Warning', $sWarningText, '[CLASS:TCheckBox; INSTANCE:1]', 'Check') WinClose('Warning', $sWarningText) EndIf If WinExists('Сохранить как', 'Password files (*.mpf)') Then WinSetState('Сохранить как', 'Password files (*.mpf)', @SW_HIDE) ControlSetText('Сохранить как', 'Password files (*.mpf)', '[CLASS:Edit; INSTANCE:1]', $sFileSaveName) ControlClick('Сохранить как', 'Password files (*.mpf)', '[CLASS:Button; INSTANCE:2]') EndIf If WinExists('Сохранить как', $sFileSaveName & ' уже существует') Then WinSetState('Сохранить как', $sFileSaveName & ' уже существует', @SW_HIDE) ControlClick('Сохранить как', $sFileSaveName & ' уже существует', '[CLASS:Button; INSTANCE:1]') EndIf If WinExists('OK', 'File saved') Then WinSetState('OK', 'File saved', @SW_HIDE) ControlClick('OK', 'File saved', '[CLASS:Button; INSTANCE:1]') ExitLoop EndIf Sleep(10) WEnd _Pro_Exit() Func _Pro_Exit() ProcessClose($iMainWinPid) Exit EndFunc |
------- Отправлено: 02:21, 17-03-2009 | #8 |
Старожил Сообщения: 460
|
Профиль | Отправить PM | Цитировать При запуске, MPR создает дочерное окно, которое и отображает GUI.
Стандартными средствми скрыть основное окно, а соответсвенно и кнопку с панели задач не удалось, ни Run со флагом @SW_HIDE, ни WinSetState с параметром @SW_HIDE - не помогли. Если же сразу после запуска сркыть или переметсить за область видимости дочерное окно, которое отображает GUI, то скрипт не сработает, так как элементы и данные в дочерном GUI окне НЕ ОБНОВЛЯЮТСЯ, т.е. к примеру так и не появиться надпись "Scan finished" в статус баре... п.с. в таком виде все работает ок, думаю если не применять такой сценарий для вредноносных целей, то сойдет ))) |
------- Отправлено: 04:26, 17-03-2009 | #9 |
![]() Старожил Сообщения: 398
|
Профиль | Сайт | Отправить PM | Цитировать proxy, спасибо огромное, а я то думал что я криво сделал. А оказывается
Цитата proxy:
|
|
------- Отправлено: 10:20, 17-03-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] _IECreate("Url", Default, 0) Узнать процент загрузки страницы при скрытом окне IE | FlatX007 | AutoIt | 2 | 13-10-2009 12:05 | |
Разное - [решено] Папки открываются в новом окне! | ra_mc | Microsoft Windows Vista | 9 | 17-05-2009 17:52 | |
Интерфейс - [решено] Диски открываются в новом окне... | atax | Microsoft Windows 2000/XP | 2 | 07-05-2009 00:19 | |
Установка - [Хелп] Слетела VISTA из-за XP и требует диск, но все внутри в скрытом | spaxy | Microsoft Windows Vista | 29 | 27-04-2008 12:36 | |
[решено] Папки открываются в новом окне | PCYuriy | Microsoft Windows 2000/XP | 10 | 13-07-2006 12:31 |
|