Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.05 c
2-1169389410
$00FF00
2007-01-21 17:23
2007.02.04
Контролы ХР-стиля в API


2-1169067190
Svet
2007-01-17 23:53
2007.02.04
Отбор не точен ...


4-1158723543
Wolfram
2006-09-20 07:39
2007.02.04
Работа с нестандартными клавишами


1-1165824158
ZFS
2006-12-11 11:02
2007.02.04
MDI-приложение


3-1163669328
darlock
2006-11-16 12:28
2007.02.04
Как определить пуст блоб или нет





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