|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как проверить запущено приложение или нет?
Прошу прощения, если данная тема уже подымалась, но ничего нужного по этому вопросу я не нашел (наверно плохо искал).
Возможно ли узнать у ОС Windows 98/XP (и Vista не помешает), запущено в данный момент другое приложение (например: "C:\Program Files\Borland\Delphi7\Bin\delphi32.exe") и если нет, то запустить его? Заранее спасибо за любую информацию |
#2
|
||||
|
||||
Пролистай процессы и сравни их имена с нужным процессом, если совпадает то процесс запущен иначе WinExec. Либо ищи хендл окна программы и при его отсутствии запускай процесс.
|
#3
|
|||
|
|||
Хорошо, перефразирую вопрос, как можно вытянуть из ОС перечень запущенных процессов?
WinExec - это функция какого модуля, другими словами , как ее запустить? |
#4
|
||||
|
||||
Исходников по этой теме много, ищи, а у меня ни времени ни желания писать нет, слишком избитая тема ;-) WinExec - это функция запуска процессов, ты в справку Делфи заглядывай по чаще!
|
#5
|
||||
|
||||
Как вариант искать по классам окон.
Хорошо написанная программа не требует документации ICQ 9-184-668. |
#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; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#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; Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра. Последний раз редактировалось Karsh, 16.03.2009 в 20:04. |