Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

Запуск "скрытого" приложения   Найти похожие ветки 

 
e-a-r-l ©   (2004-11-18 08:16) [0]

Уважаемые мастера!

Столкнулся с такой проблемой. Пытаюсь запустить приложение (например, калькулятор) так, чтобы после запуска его окно было скрытым:


var
 ProcessInfoFld : TProcessInformation;
 StInfo : TStartupInfo;
begin
 FillChar(StInfo, sizeof(StInfo), #0);
 StInfo.cb := sizeof(TStartupInfo);
 StInfo.dwFlags := STARTF_USESHOWWINDOW;
 StInfo.wShowWindow := SW_HIDE;
 CreateProcess(
     PChar("C:\WINDOWS\system32\calc.exe"),
     nil,
     nil,
     nil,
     false,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StInfo,
     ProcessInfoFld)
end;


и -- ни-фи-га! :( То есть приложение запускается, но окно остается видимым. Пробовал первым параметром CreateProcess() ставить nil, вторым -- PChar("C:\WINDOWS\system32\calc.exe") -- не помогает.
Что интересно, для DOS-овских задач (например, nc) код работает.
Для калькулятора прошел следующий пример, но он мне не нравится из-за sleep():


var
 ProcessInfoFld : TProcessInformation;
 StInfo : TStartupInfo;
begin
 FillChar(StInfo, sizeof(StInfo), #0);
 StInfo.cb := sizeof(TStartupInfo);
 StInfo.dwFlags := STARTF_USESHOWWINDOW;
 StInfo.wShowWindow := SW_HIDE;
 if CreateProcess(
     PChar("C:\WINDOWS\system32\calc.exe"),
     nil,
     nil,
     nil,
     false,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     StInfo,
     ProcessInfoFld) then begin
   sleep(1000);
   ShowWindow( FindWindow(nil, PChar("Калькулятор")), SW_HIDE)
 end
end;


Нельзя ли обойтись одним CreateProcess() с нужными параметрами?

Заранее благодарен.


 
Игорь Шевченко ©   (2004-11-18 10:20) [1]


> Нельзя ли обойтись одним CreateProcess() с нужными параметрами?


В общем случае нельзя. Приложение само решает, использовать ли ему параметры видимости окна переданные в функцию CreateProcess или не использовать.


 
Erik1 ©   (2004-11-18 11:18) [2]

Но без sleep можно, поскольку CreateProcess возвращает ProcessHandle то можно подождать создание  очереди сообщений. А уж после сделать SW_HIDE.


 
e-a-r-l ©   (2004-11-18 13:20) [3]

В этом случае окно калькулятора все равно "сморгнет" не экране :(((


 
Юпитер   (2004-11-19 02:25) [4]

запускаешь сплэшь форму которая все окна перекрывает (либо просто пустую форму которая по верх всех окон. либо Копия картинки экрана. но тоже форма по верх всех окон).
в сплэше пишешь "Loading..."
затем пишешь цикл пока не..

пока размеры формы не изменятся повторять цикл
  изменить размер на например 2- ширина 2 высота.
  тоесть левый размер
конец цикла
после цикла посылаешь
sendmessage(этой проге,0,скрыть) // чтобы скрыть ее
затем закрываешь свой сплэшь .. готово


дело в том что при посылке сообщений программе которая
еще не запустилась они проподают в пустую.
а убедиться что программа полностью запустилась.
надо дождаться пока она нормальн о будет реагировать
на команды.
я это делаю путем проверки команды изменения ее размера.
есть и другие способы...
например самый крутой::: сканировать память
но для этого надо писать много :)



Страницы: 1 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1103289396
tytus
2004-12-17 16:16
2005.01.02
ShellTreeView


1-1103451288
idiliya
2004-12-19 13:14
2005.01.02
Как создавать thumbnails для больших изображений?


1-1103430349
Roobee
2004-12-19 07:25
2005.01.02
Создание Records во время работы программы


14-1102777344
Gusto
2004-12-11 18:02
2005.01.02
ASMEdit 3.5 - GUI-оболочка ассемблера.


1-1103025766
Юрий К
2004-12-14 15:02
2005.01.02
работа с кодом от dcu2pas v1.3