Форум: "Начинающим";
Текущий архив: 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.048 c