Что нового

Спрятать программу при запуске

The_Immortal

Новичок
Сообщения
84
Репутация
4
Приветствую!

Необходимо прятать виртуальную машину при её запуске.

Пробовал делать так:
Код:
Run("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe ""c:\Windows XP Professional.vmx""",@SW_HIDE)
- машина не стартует.
Код:
Run("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe ""c:\Windows XP Professional.vmx""",@SW_MINIMIZE)
- так тоже.

Без параметров запуск происходит нормально.

В чем может быть проблема?

Спасибо!
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
InnI, да уж... Спасибо :smile:
Сворачивание (@SW_MINIMIZE) работает, а вот @SW_HIDE не срабатывает:
Код:
Run("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe ""c:\Windows XP Professional.vmx""","",@SW_HIDE)
- как можно принудительно убрать отображение программы из панели задач при её запуске?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
The_Immortal
@SW_HIDE не срабатывает
Не каждое окно можно скрыть сразу при запуске. Но почти все можно спрятать после запуска
Код:
WinSetState("title", "", @SW_HIDE)
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
InnI,
Код:
Run("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe ""c:\Windows XP Professional.vmx""",  "",  @SW_MINIMIZE)
WinWait ("Windows XP Professional - VMware Player (Non-commercial use only)", "", 0)
WinSetState("Windows XP Professional - VMware Player (Non-commercial use only)", "", @SW_HIDE)
- таким образом виртуальная машина через некоторое вообще выгружается из памяти... Точнее сказать сам процесс vmplayer.exe остается, а сама машина пропадает.

Это глюк самой машины, извиняюсь, всё в порядке.

Большое спасибо!


UPD:
Нет, всё равно работает как-то не так:
Код:
Run("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe ""c:\Windows XP Professional.vmx""","",@SW_MINIMIZE)
WinWait ("Windows XP Professional - VMware Player (Non-commercial use only)", "", 0)
WinSetState("Windows XP Professional - VMware Player (Non-commercial use only)", "", @SW_HIDE)
Exit
- на долю секунды значок появляется в панели задач, потом исчезает и через несколько секунд вновь появляется на панели и там уже остается.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
The_Immortal
вновь появляется на панели
Ну, вот так она работает... что ж тут поделать.
Скройте окно ещё раз. Или уберите кнопку из панели (см. пример к функции ObjCreateInterface в оригинальной английской справке).
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
InnI,
InnI сказал(а):
Ну, вот так она работает... что ж тут поделать.
Появляется она ещё раз сразу после загрузки виртуальной машины, которую не отловить. Можно просто выжидать какое-то время (пока виртуальная машина грузится) и потом прятать, но это как-то не комильфо.

InnI сказал(а):
уберите кнопку из панели (см. пример к функции ObjCreateInterface в оригинальной английской справке).
- а вот это шикарнейший вариант. Спасибо Вам огромнейшее!
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
CreatoR, попробовал:
Код:
_shellExecuteHidden("c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe","c:\WinXP.vmx")
- по каким-то причинам 2-ой параметр ("c:\WinXP.vmx") игнорируется. Сам процесс vmplayer.exe запускается, но указанную в параметрах виртуальную машину он не запускает - это видно по Диспетчеру задач.

Если выполняю то же самое через cmd - то машина стартует.

Залез в функцию:
Код:
#include <WinAPI.au3>
#include <WinAPISys.au3>

$tProcess = DllStructCreate( $tagPROCESS_INFORMATION )
$tStartup = DllStructCreate( $tagSTARTUPINFO )
DllStructSetData( $tStartup , 'Size', DllStructGetSize( $tStartup) )
DllStructSetData( $tStartup , 'Desktop', _WinAPI_CreateString(  "ShellExecuteHidden_Desktop" ) )

Local $test
$test = _WinAPI_CreateProcess( "c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe","c:\WinXP.vmx", 0, 0, 0, 0x00000200 , 0, 0, DllStructGetPtr($tStartup), DllStructGetPtr($tProcess)) 
MsgBox(0,"test",$test)
- _WinAPI_CreateProcess возвращает "1", но при этом также игнорирует параметр... Причем даже если указать заведомо неверный параметр (например, "c:\WinXP1.vmx"), то всё равно возращает "1" - типа всё нормально. Т.е. происходит полный игнор параметра почему-то.

Я как-то неверно задаю параметр?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Указывайте все передаваемые параметры в первом параметре функции.
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
Yashied, тоже пробовал:
Код:
#include <WinAPI.au3>
#include <WinAPISys.au3>

$tProcess = DllStructCreate( $tagPROCESS_INFORMATION )
$tStartup = DllStructCreate( $tagSTARTUPINFO )
DllStructSetData( $tStartup , 'Size', DllStructGetSize( $tStartup) )
DllStructSetData( $tStartup , 'Desktop', _WinAPI_CreateString(  "ShellExecuteHidden_Desktop" ) )

Local $test
$test = _WinAPI_CreateProcess( """c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe"" c:\WinXP.vmx", "", 0, 0, 0, 0x00000200 , 0, 0, DllStructGetPtr($tStartup), DllStructGetPtr($tProcess))
MsgBox(0,"test",$test)
- выдает ошибку "0".


UPD:
В общем, передаваемые параметры воспринимаются именно вторым параметром ($sCommand) - вот там и надо всё указывать:
Код:
#include <WinAPI.au3>
#include <WinAPISys.au3>

$tProcess = DllStructCreate( $tagPROCESS_INFORMATION )
$tStartup = DllStructCreate( $tagSTARTUPINFO )
DllStructSetData( $tStartup , 'Size', DllStructGetSize( $tStartup) )
DllStructSetData( $tStartup , 'Desktop', _WinAPI_CreateString(  "ShellExecuteHidden_Desktop" ) )

_WinAPI_CreateProcess("", """c:\Program Files (x86)\VMware\VMware Player\vmplayer.exe"" c:\WinXP.vmx", 0, 0, 0, 0x00000200 , 0, 0,  DllStructGetPtr($tStartup), DllStructGetPtr($tProcess))


В случае передачи параметров для запускаемого процесса назначение первого параметра ($sAppName) указанной выше функции мне вообще непонятно...

P.S. Последний код успешно скрывает приложение при её запуске за счет задействования скрытого рабочего стола.
 
Верх