Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

ShellExecute (спрятать запущенный процесс)   Найти похожие ветки 

 
Garacio ©   (2007-01-13 15:11) [0]

Прочитал на одном форуме: можно найти процесс по .exe файлу - это действительно возможно? Я запускаю внешнюю программу с помощью ShellExecute и одновременно прячу свою в трей, и мне необходимо, как минимум, знать - когда запущенный процесс прекратится и развернуть свою программу из трея, а в лучем случае ещё и спрятать запущенный процесс.
Если это выполнимо, то огромная просьба поделиться примером кода!


 
FAskerQ   (2007-01-13 17:55) [1]

uses
 TlHelp32;

function IsProcessRunnig(ExeName: string): Boolean;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
 Result := False;
 while Integer(ContinueLoop) <> 0 do
 begin
   if FProcessEntry32.szExeFile = ExeName then
   begin
     Result := True;
   end;
   ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
 end;
 CloseHandle(FSnapshotHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if IsProcessRunnig("notepad.exe") then
  ShowMessage("process is running")
else
  ShowMessage("process not running");
end;


 
Garacio ©   (2007-01-13 18:39) [2]

И куда сдесь поместить:
ShowMessage("Задача выполнена!")
и
SW_HIDE ???


 
FAskerQ   (2007-01-13 19:11) [3]


> необходимо, как минимум, знать - когда запущенный процесс
> прекратится


Пожалуйста

FAskerQ   (13.01.07 17:55) [1]


> когда запущенный процесс прекратится
> и развернуть свою программу из трея, а в лучем случае ещё
> и спрятать запущенный процесс


То есть процесса уже нет а вы хотите его спрятать? или что?


 
Garacio ©   (2007-01-13 19:50) [4]

Задача - минимум: совершить определённые дейстия после закрытия запущенной через ShellExecute программы.
Во-вторых, хотелось бы спрятать запущенное через ShellExecute приложение (на всё время работы этого приложения).


 
FAskerQ   (2007-01-13 20:23) [5]

ShellExecute(Handle, "open", "c:\Windows\notepad.exe", nil, nil, SW_HIDE);

...

в таймере например
if not IsProcessRunnig("notepad.exe") then
begin
 совершить определённые дейстия
end;


придвиньтесь поближе к экрану и начинайте передачу кода своей программы на низкой частоте потому что я никак не вьеду в суть вопроса, а телепат из меня хреновый


 
Garacio ©   (2007-01-13 20:51) [6]

Спасибо! Супер!


 
DrPass ©   (2007-01-14 17:58) [7]


> FAskerQ   (13.01.07 20:23) [5]

Это анальный способ решения данной задачи. Правильный - использовать не ShellExecute, а ShellExecuteEx. Она возвратит ID запущенного процесса, который нужно подставить в функцию WaitForSingleObject. Которая покажет, когда запущенный процесс завершится.


 
Garacio ©   (2007-01-14 18:03) [8]

DrPass, продемонстрируй ради примера! Как продолжить?!
if ShellExecute(Application.Handle, nil, Adres, Kluch, nil, SW_SHOW)<32 then begin
Adres- путь к .exe файлу;
Kluch- ключ в командной строке;


 
DrPass ©   (2007-01-14 18:36) [9]

Как-нибудь так:

var
 exInfo: TShellExecuteInfo;
begin
 FillChar(exInfo, SizeOf(exInfo), 0);
 with exInfo do
 begin
   cbSize := SizeOf(exInfo);
   fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
   Wnd := Application.Handle;
   ExInfo.lpVerb := "open";
   lpFile := Adres;
   nShow := SW_SHOWNORMAL;
 end;
 if ShellExecuteEx(@exInfo) then
 begin
   WaitForSingleObject(exInfo.hProcess, INFINITE);
   //...
 end
end;


 
Garacio ©   (2007-01-15 09:55) [10]

А Kluch где прописывается?


 
DrPass ©   (2007-01-15 10:49) [11]


> Garacio ©   (15.01.07 09:55) [10]

Ты ж программист (ну, или пытаешься им стать). Где твое любопытство? Возьми и посмотри, что такое ShellExecuteEx и что такое TShellExecuteInfo



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
2-1168802992
Kolan
2007-01-14 22:29
2007.02.04
Научите пользоваться resoursestring


15-1168706846
Kolan
2007-01-13 19:47
2007.02.04
Чем заменить NAN


15-1167329662
Rouse_
2006-12-28 21:14
2007.02.04
Вот вам для разминки мозгов.


2-1169034700
AlexT1000
2007-01-17 14:51
2007.02.04
Как восстановить файл(ы) из корзины?


1-1165062961
kernel
2006-12-02 15:36
2007.02.04
Canvas&amp;Desktop