Главная страница
    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.45 MB
Время: 0.035 c
1-1103408469
pika
2004-12-19 01:21
2005.01.02
Надо вырезать квадрат с буквой !!!


1-1103125417
Чайник
2004-12-15 18:43
2005.01.02
Как создать объект по имени его класса


1-1103498206
Артем Владимирович
2004-12-20 02:16
2005.01.02
Отображение Richedit в WebBrowser


1-1103189974
dima
2004-12-16 12:39
2005.01.02
Вызвать стандартный редактор


14-1102688066
z_man
2004-12-10 17:14
2005.01.02
Как скопировать файл по сетке?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский