Главная страница
    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.035 c
9-1094479505
Маг Гыр
2004-09-06 18:05
2005.01.02
Глюк при выводе


1-1103205543
tradakad
2004-12-16 16:59
2005.01.02
Динамическое измение иконки в PopupMenu


3-1101897054
ByteButcher
2004-12-01 13:30
2005.01.02
Как получить список доступных MS SQL серверов?


3-1102316136
Submarine
2004-12-06 09:55
2005.01.02
Хранение JPG в базе данных


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