![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Прошу прощения, если данная тема уже подымалась, но ничего нужного по этому вопросу я не нашел (наверно плохо искал).
Возможно ли узнать у ОС Windows 98/XP (и Vista не помешает), запущено в данный момент другое приложение (например: "C:\Program Files\Borland\Delphi7\Bin\delphi32.exe") и если нет, то запустить его? Заранее спасибо за любую информацию |
|
#2
|
||||
|
||||
|
Пролистай процессы и сравни их имена с нужным процессом, если совпадает то процесс запущен иначе WinExec. Либо ищи хендл окна программы и при его отсутствии запускай процесс.
|
|
#3
|
|||
|
|||
|
Хорошо, перефразирую вопрос, как можно вытянуть из ОС перечень запущенных процессов?
WinExec - это функция какого модуля, другими словами , как ее запустить? |
|
#4
|
||||
|
||||
|
Исходников по этой теме много, ищи, а у меня ни времени ни желания писать нет, слишком избитая тема ;-) WinExec - это функция запуска процессов, ты в справку Делфи заглядывай по чаще!
|
|
#5
|
||||
|
||||
|
Как вариант искать по классам окон.
|
|
#6
|
||||
|
||||
|
Цитата:
В Uses ShellApi Код:
var
window:HWND;
begin
window:=findwindow(nil,PChar('Delphi 7'));
if window=0 then
ShellExecute(Form1.Handle,nil,'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe',nil,nil,SW_SHOWNORMAL);end; |
|
#7
|
||||
|
||||
|
Код:
var
HM: THandle;
{$R *.res}
function Check: boolean;
begin
HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
Result := (HM <> 0);
if HM = 0 then
HM := CreateMutex(nil, false, 'MyOwnMutex');
end;
begin
if not Check then
begin
Application.Initialize;
Application.CreateForm(TfForm, fForm);
Application.Run;
end
else
begin
Application.MessageBox('ВНИМАНИЕ !!! Программа уже запущена','ВНИМАНИЕ',0);
Exit;
end; |
|
#8
|
||||
|
||||
|
Код:
uses
TlHelp32, ShellAPI;
function GetProcessByEXE(exename: string): THandle;
var
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin
Result:= 0;
hSnapshoot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = 0) then Exit;
pe32.dwSize:= SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
if (pe32.szExeFile = exename) then
begin
Result:= pe32.th32ProcessID;
exit;
end;
until not Process32Next(hSnapshoot, pe32);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if GetProcessByEXE('notepad.exe') = 0 then
ShellExecute(0, 'open', 'notepad', nil, nil, SW_SHOWNORMAL)
else
ShowMessage('Уже запущено');
end;Последний раз редактировалось Karsh, 16.03.2009 в 20:04. |