Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.037 c
14-1102962094
AlterEgo of WondeRu
2004-12-13 21:21
2005.01.02
Почему аська находит только 20 контактов?


14-1102765633
Alter_WondeRu
2004-12-11 14:47
2005.01.02
Интернет через GPRS... Перспективы...


11-1084616878
hammer
2004-05-15 14:27
2005.01.02
Глючит Delphi c kol ом


4-1100697304
cautur
2004-11-17 16:15
2005.01.02
Формат даты Windows


14-1103004599
Урфин Джюс
2004-12-14 09:09
2005.01.02
Компонент для RSS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский