Форум: "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