Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.021 c
3-1100425554
Dell3r
2004-11-14 12:45
2005.01.02
Сортировка в DBGrid


14-1103149584
украинец
2004-12-16 01:26
2005.01.02
Россияне! Почему вы так ненавидите Украину ?


14-1102821580
Думкин
2004-12-12 06:19
2005.01.02
С днем рождения! 12 декабря


8-1095360284
Big D.
2004-09-16 22:44
2005.01.02
Программное перемещение DSTrackBar


6-1098096236
Term
2004-10-18 14:43
2005.01.02
Сервер при приёме файла падает




   Наверх