![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateProcess и SW_SHOWNOACTIVATE [D6, Win2k, WinXP]
MixAnOL © (2005-11-08 14:43:00)Здорово всем!
Необходимо решить такую проблемку...
Мое приложение запускает второе приложение (возьмем для примера пустой проект).
Все делаю как надо:
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
...
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow :=SW_SHOWNOACTIVATE;
...
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 }
REALTIME_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then
...
При запуске например блокнота, согласно SHOWNOACTIVATE он запускается,а первое приложение остается активным...
Если же взять мое приложение (пустой проект), то оно не соглашается с этим параметром показа окна...
Поиграл с различными параметрами формы - так и не нашел как решить проблему...
Суть - оставить первое приложение фокусированным
Leonid Troyanovsky (2005-11-09 14:51:00) [1]
> MixAnOL (09.11.05 14:15) [2]
> Приложение запускается и сразу сворачивается, первое остается
> активным.
Если устраивет, что запускаемое свернуто, то достаточно
StartupInfo.dwFlags := SW_SHOWMINNOACTIVE
--
Regards, LVT.
MixAnOL (2005-11-09 14:15:00) [2]Решил проблемку с помощью добавления
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowWindow(Form1.Handle,SW_SHOWNA);
end;
Приложение запускается и сразу сворачивается, первое остается активным.
Если же надо что бы второе было развернуто, но не активно то добавил еще
ShowWindow(Form1.Handle,SW_SHOWNOACTIVATE);
Если есть еще какие-нибудь более красивые решение - сообщите!
ShiFT (2005-11-09 06:34:00) [3]может быть тупо, но как вариант.
var
fWnd : HWND;
...
fWnd = GetForegroundWindow();
// твой код
SetForegroundWindow( fWnd);