Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.041 c
2-1191334493
alles
2007-10-02 18:14
2007.10.28
Вопрос по TForm


2-1191314197
emelin
2007-10-02 12:36
2007.10.28
Delphi+1C. Поиск документов


2-1191743251
мфтнф_й
2007-10-07 11:47
2007.10.28
TCustomListBox -- OnDblClick


2-1191423908
Kolan
2007-10-03 19:05
2007.10.28
Как поймать клик по Табу в TabControl е?


2-1191398821
Кевларвестов Семен
2007-10-03 12:07
2007.10.28
Про TStringList.DelimitedText





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