Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
ВнизShellExecute/WinExec , проблемка с фокусом . Найти похожие ветки
← →
A.L.E.X.A.N.D.E.R (2007-04-22 16:19) [0]Здравствуйте , возникла у меня проблемка : как сделать , чтобы при использовании ShellExecute/WinExec , фокус не переходил на запущенное данной функцией приложение , а оставался на приложении , из которого была запущена функция ?
← →
Leonid Troyanovsky © (2007-04-22 17:26) [1]
> A.L.E.X.A.N.D.E.R (22.04.07 16:19)
> чтобы при использовании ShellExecute/WinExec , фокус не
> переходил на запущенное данной функцией приложение , а оставался
> на приложении , из которого была запущена функция ?
Winexec("notepad.exe", SW_SHOWNA);
--
Regards, LVT.
← →
A.L.E.X.A.N.D.E.R (2007-04-22 17:30) [2]Пробовал , непомогает .
← →
Leonid Troyanovsky © (2007-04-22 17:34) [3]
> A.L.E.X.A.N.D.E.R (22.04.07 17:30) [2]
> Пробовал , непомогает .
Не верю.
Foreground от level чем отличаем?
--
Regards, LVT.
← →
A.L.E.X.A.N.D.E.R (2007-04-22 17:45) [4]С notepad"ом всё проходит гладко , а с приложением , которое запускаю я , идёт сворачивание .
← →
Leonid Troyanovsky © (2007-04-22 18:05) [5]
> A.L.E.X.A.N.D.E.R (22.04.07 17:45) [4]
> С notepad"ом всё проходит гладко , а с приложением , которое
> запускаю я , идёт сворачивание .
nCmdShow
[in] Specifies how the window is to be shown. This parameter is ignored the first time an application calls ShowWindow, if the program that launched the application provides a STARTUPINFO structure. Otherwise, the first time ShowWindow is called, the value should be the value obtained by the WinMain function in its nCmdShow parameter. In subsequent calls, this parameter can be one of the following values.
Т.е., должно, но, видимо, не исполняет.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2007-04-22 18:12) [6]
> Leonid Troyanovsky © (22.04.07 18:05) [5]
> Т.е., должно, но, видимо, не исполняет.
Ну, и, вывод тоже понятен: используй CreateProcess
с заполненной STARTUPINFO wShowWindow.
RTFM: msdn.
--
Regards, LVT.
← →
A.L.E.X.A.N.D.E.R (2007-04-22 18:22) [7]Спасибо . Сейчас пробовать буду .
← →
A.L.E.X.A.N.D.E.R. (2007-04-23 00:13) [8]Невышло :(
Можете написать функцию , если конечно не сильно "влом" .
← →
{RASkov} (2007-04-23 00:22) [9]> [8] A.L.E.X.A.N.D.E.R. (23.04.07 00:13)
Попробуй так:
WinExec(<прога>, SW_NORMAL);
Application.BringToFront;
Или скажи, что за прогу пытаешься так запустить...
← →
{RASkov} (2007-04-23 00:23) [10]> прогу
Или скажи, что за программа, которую пытаешься так запускать...
← →
Германн © (2007-04-23 01:02) [11]2 {RASkov}
Лучше было бы спросить так:
> A.L.E.X.A.N.D.E.R (22.04.07 18:22) [7]
>
> Спасибо . Сейчас пробовать буду .
> <Цитата>
>
> A.L.E.X.A.N.D.E.R. (23.04.07 00:13) [8]
>
> Невышло :(
>
Как пробовал и что "невышло"? :-)
← →
A.L.E.X.A.N.D.E.R (2007-04-23 14:12) [12]Вот так:
>Ну, и, вывод тоже понятен: используй CreateProcess
>с заполненной STARTUPINFO wShowWindow.
>RTFM: msdn.
Процесс запускается и и его окно всё равно становится активным .
2 {RASkov}:
Запускаю я свою программу , тоже написана на делфе , может в ней что-то надо прописать ? Просто если запускать , к примеру , блокнот , тогда всё Ок .
← →
A.L.E.X.A.N.D.E.R (2007-04-23 14:17) [13]2 {RASkov}:
И ещё , "Application" не катит , т.к. я делаю Длл .
← →
Leonid Troyanovsky © (2007-04-23 20:18) [14]
> A.L.E.X.A.N.D.E.R (23.04.07 14:12) [12]
> Запускаю я свою программу , тоже написана на делфе , может
> в ней что-то надо прописать ? Просто если запускать , к
Если запускается собственное дельфийское приложение,
попробуй сделать ему такой обработчик OnShow главной формы:
procedure TForm1.FormShow(Sender: TObject);
begin
if (cmdshow = SW_SHOWNA) then
begin
cmdshow := SW_SHOW;
ShowWindow(Handle, SW_SHOWNA);
Visible := True;
end;
end;
Тогда, запустить его можно будет хоть так:
Winexec("mydelphiproject.exe", SW_SHOWNA);
--
Regards, LVT.
← →
assa (2007-04-24 13:10) [15]Использую такую функцию, она легко адаптируется под любые нужды.
function WinExecAndWait32(FileName: string;Visibility: Integer): cardinal;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo,Sizeof(StartupInfo), #0);
StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USEPOSITION or STARTF_USESIZE;
StartupInfo.wShowWindow:=Visibility;
// StartupInfo.wShowWindow:=SW_SHOWNOACTIVATE;
StartupInfo.wShowWindow:=SW_SHOWNORMAL;
StartupInfo.dwX:=0;
StartupInfo.dwY:=0;
StartupInfo.dwXSize:=50;
StartupInfo.dwYSize:=50;
if not CreateProcess(nil,
PChar(Filename), { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
IDLE_PRIORITY_CLASS,
// REALTIME_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then
begin
end
else
begin
hProcess:=ProcessInfo.hProcess;
if Timeout=0 then
WaitforSingleObject(ProcessInfo.hProcess, INFINITE)
else
WaitforSingleObject(ProcessInfo.hProcess, Timeout);
try
TerminateProcess(ProcessInfo.hProcess,0);
finally
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
end;
ЗЫ: я код подчистил, так что не пинать за возможные не состыковки.
← →
Leonid Troyanovsky © (2007-04-24 19:01) [16]
> assa (24.04.07 13:10) [15]
> ЗЫ: я код подчистил, так что не пинать за возможные не состыковки.
Зря, IMHO, подчищал, бо исходный вариант был by Peter Below,
если мне склероз не изменяет.
Только, для неактивации дельфийских приложений
потребуется кооперация с ними. Ну, или - насилие ;)
См. также [14].
--
Regards, LVT.
← →
A.L.E.X.A.N.D.E.R (2007-04-25 15:17) [17]2Leonid Troyanovsky : по Вашему коду работает , спасибо . И ещё один вопрос , может не в тему , но всёравно , моё запущеное "неактивное" приложение работает только во время простоя системы , т.е. если процессор загружен довольно хорошо , то программа практически не в работоспособном состоянии , можно это как-то исправить ?
← →
Leonid Troyanovsky © (2007-04-25 22:06) [18]
> A.L.E.X.A.N.D.E.R (25.04.07 15:17) [17]
> запущеное "неактивное" приложение работает только во время
> простоя системы , т.е. если процессор загружен довольно
> хорошо , то программа практически не в работоспособном состоянии
> , можно это как-то исправить ?
Для этого достаточно добавить, по-крайней мере, один процессор :)
Т.е., если приложение способно работать только во время простоя,
то пусть и работает. IMHO, это будет весьма достойное приложение.
Ну, а если не сумеет, то, видимо, оно нуждается в повышении
собс-ного приоритета. Навсегда или в ключевые моменты.
RTFM: msdn SetPriorityClass & etc
Кста, хорошим кандидатом на роль работающего в фоне
может стать служба (service).
--
Regards, LVT.
← →
A.L.E.X.A.N.D.E.R © (2007-04-25 23:49) [19]спс
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c