Показать полную графическую версию : [решено] Не работает команда @SW_HIDE в Autoit последней версии
Добрый "вечер", уважаемые кодеры. Я новичок в AutoIt, поэттому прошу сильно не пинать, если что. Так вот, я часто бываю на данном форуме, наткнулся на интересную статью про AutoIt и заинтересовался программой, прочитал почти всю справку и решил опробывать полученные знания, а чтоб было интересней (чтоб не бросить на пол пути) стал эксперементировать над программой Product Key Explorer. Сначала я долго не мог понять, как же передать программе ключи командной строки, но потом разобрался, всё вроде бы работает, кроме команды @SW_HIDE, окно попросту не прячется. Код получился вот такой:
RunWait('ProductKeyExplorer.exe /remote 127.0.0.1 /f BackUp.xls /exit ' ,@ScriptDir, @SW_HIDE) за счёт использования ключа "/exit" программа выходит, притом пока она работает, её окно видно, получается, что окно программы моргает вместо того, что бы не появляться вообще. Если не использовать ключ "/exit", то программа выполнит своё дело, а её окно останется висеть, пока не нажмёшь кнопку выхода. собственно сабж: как же заставить окно программы не появляться, а делать свои дела по-тихому?
P.S.: если я взялся эксперементировать над программой такого рода, то это ещё совсем не значит, что я буду использовать её во вред другим. Помогите, пожалуйста разобраться.
ZPro, если приложение после своего запуска самостоятельно устанавливает видимость своего окна — никак (разве что кроме правки самого кода):
…
wShowWindow
If dwFlags specifies STARTF_USESHOWWINDOW, this member can be any of the SW_ constants defined in Winuser.h. Otherwise, this member is ignored.
For GUI processes, wShowWindow specifies the default value the first time ShowWindow is called. The nCmdShow parameter of ShowWindow is ignored. In subsequent calls to ShowWindow, the wShowWindow member is used if the nCmdShow parameter of ShowWindow is set to SW_SHOWDEFAULT.
… Максимум, что Вы можете сделать — запустить приложение, дождаться появления его окна, скрыть это окно. От кратковременного мигания, конечно, сим не избавитесь. Другой вариант, если приложение запоминает последнее местоположение своего окна, попробовать использовать сие, заранее задав тем или иным способом (зависит от конкретно взятого приложения) положение окна заведомо за границами экрана.
В случае же «Product Key Explorer» первое:
Run("""c:\Program Files\Nsasoft\ProductKeyExplorer\ProductKeyExplorer.exe"" /remote 127.0.0.1 /f ""c:\Temp\BackUp.xls"" /exit", "", @SW_HIDE)
WinSetState(WinWait("[TITLE:Product Key Explorer; CLASS:#32770]"), "", @SW_HIDE)
не особо помогает (поскольку приложение отрабатывает быстрее, нежели скрывается окно), а второе попросту неприменимо, поскольку не используется приложением. Так что, самое реальное решение — используйте флаг @SW_MINIMIZE или значение «7» — «SW_SHOWMINNOACTIVE»:
#define SW_SHOWMINNOACTIVE 7
Iska, спасибо, работает, но вот ещё вопрос: можно ли запустить PKE вот так: RunWait('ProductKeyExplorer.exe /remote 127.0.0.1 /f BackUp.html /exit' ,@ScriptDir, 7) но так что бы программа складывала файлы отчёта не в ту же папку, а в другую папку внутри этой? Эээ... как то я заморочено написал ;), ну примерно так: @ScriptDir\Logs. Просто прямые пути, как тут:
""c:\Temp\BackUp.xls"" не известны.
P.S.: Скрипт потом будет откомпилированн в *.exe, запускаться будет из start.bat, можно ли прописать в скрипте ключи, что бы он сам выполнялся без видимого окна? или как запустить его (скрипт) из start.bat без видимого окна?
ZPro, разумеется. Не забывайте, на всякий случай, обрамлять пути кавычками:
RunWait('ProductKeyExplorer.exe /remote 127.0.0.1 /f "@ScriptDir\Logs\BackUp.html" /exit' , '"@ScriptDir"', 7)
запускаться будет из start.bat »
Старайтесь не давать пакетным файлам имён встроенных команд.
можно ли прописать в скрипте ключи, что бы он сам выполнялся без видимого окна? »
Так у него и нет видимого окна, только иконка в System Tray.
Уважаемый Iska, к сожалению написанный вами пример не срабатывает, программа даже не запускается, а если убрать'"@ScriptDir"' »
то программа вообще отчёты не оставит
написанный вами пример не срабатывает, »
Угу. Языки перемешались.
Так:
RunWait("""" & @ProgramFilesDir & "\Nsasoft\ProductKeyExplorer\ProductKeyExplorer.exe"" /remote 127.0.0.1 /f """ & @ScriptDir & "\BackUp.xls"" /exit", "", 7 , True)
Или так:
RunWait('"' & @ProgramFilesDir & '\Nsasoft\ProductKeyExplorer\ProductKeyExplorer.exe" /remote 127.0.0.1 /f "' & @ScriptDir & '\BackUp.xls" /exit', '', 7 , True)
Предполагается, что «Product Key Explorer» установлен в умолчальную папку.
Iska, спасибо тебе большое! Всё получилось!
Я использую Portable версию и для неё у меня получилось вот так:
RunWait('"' & 'ProductKeyExplorer.exe" /remote 127.0.0.1 /f "' & @ScriptDir & '\Logs\BackUp.html" /exit', '', 7 , True)
Ещё раз спасибо! Хороший язык, надеюсь у меня получится изучить его.
ZPro, если исполняемый файл «ProductKeyExplorer.exe» находится рядом со скриптом…
…тогда надёжнее указать на сей факт:
RunWait('"' & @ScriptDir & '\ProductKeyExplorer.exe" /remote 127.0.0.1 /f "' & @ScriptDir & '\Logs\BackUp.html" /exit', '', 7 , True)
Хороший язык, надеюсь у меня получится изучить его. »
Не забывайте про русскоязычное сообщество: Русское сообщество AutoIt - Главная страница (http://autoit-script.ru/).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.