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

Вниз

Определение, запущена ли программа   Найти похожие ветки 

 
-= Demon =-   (2003-04-24 20:10) [0]

Можно ли по имени exe-файла определить, запущена ли уже программа?


 
-= Demon =-   (2003-04-24 20:12) [1]

В смысле, кроме просмотра списка всех запущенных процессов...


 
jack128 ©   (2003-04-25 00:05) [2]

Здесь когда то предлагали прикольный вариант.

h := CreateFile(Pchar("c:\test.exe"),
GENERIC_WRITE + GENERIC_READ,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if h <> INVALID_HANDLE_VALUE then
// файд запущен

Согласись врятли кто нибудь будет просматривать EXE - файл в текст редакторе -)

ЗЫ А чем просмотр всех процессов не нравиться?


 
DeMoN-777 ©   (2003-04-25 02:16) [3]

Лучше смотри процессы!


 
dtrn   (2003-04-25 10:50) [4]

Menu Project/View Source

program MyProgram;
uses
Forms,
Windows,
Messages,
SysUtils,
......

{$R *.RES}
var
hMutex: THandle;
FoundWnd: THandle;
ModuleName: string;
function EnumWndProc (hwnd: THandle;
Param: Cardinal): Bool; stdcall;
var
ClassName, WinModuleName: string;
WinInstance: THandle;
begin
Result := True;
SetLength (ClassName, 100);
GetClassName (hwnd, PChar (ClassName), Length (ClassName));
ClassName := PChar (ClassName);
if ClassName = TFormMain.ClassName then
begin
// get the module name of the target window
SetLength (WinModuleName, 200);
WinInstance := GetWindowLong (hwnd, GWL_HINSTANCE);
GetModuleFileName (WinInstance,
PChar (WinModuleName), Length (WinModuleName));
WinModuleName := PChar(WinModuleName); // adjust length
// compare module names
if WinModuleName = ModuleName then
begin
FoundWnd := Hwnd;
Result := False; // stop enumeration
end;
end;
end;
begin
HMutex := CreateMutex (nil, False, "EKAFPEMutex");
if WaitForSingleObject (hMutex, 0) <> wait_TimeOut then
begin
Application.Initialize;
.......
Application.Run;
end
else
begin
SetLength (ModuleName, 200);
GetModuleFileName (HInstance,
PChar (ModuleName), Length (ModuleName));
ModuleName := PChar (ModuleName);
EnumWindows (@EnumWndProc, 0);
if FoundWnd <> 0 then
begin
Application.MessageBox
(PChar("Program is started’, PChar("Attention’"),mb_Ok or MB_ICONWARNING);
end;
end;
end.


 
jack128 ©   (2003-04-25 15:10) [5]

dtrn (25.04.03 10:50)
Требуется не предотвратить запуск второй копии программы, а определить запущена ли программа по заданному EXE"нику.

-= Demon =- или я не прав?

кроме просмотра процессов нечего другого не выдумаешь,
ну либо модифицировать пример dtrn, но имхо хуже ибо это просмотр окон...



 
Александр из Минска   (2003-04-25 16:14) [6]

на событие FormCreate
if FileExists("1.ttt") then
begin
//прога уже запущена
//закрываешь эту прогу
end
else
begin
//не запущена
//создаешь файл 1.ttt
end;

на событие FormClose
//удаляешь файл 1.ttt

Проблема в том, что если пользователь вышел не по нормальному, тогда файл остается и прога не запустится, если его не удалить...


 
Dms   (2003-04-25 16:47) [7]


> Проблема в том, что если пользователь вышел не по нормальному,
> тогда файл остается и прога не запустится, если его не удалить...

именно поэтому применяется похожий алгоритм, но только с помощью файлов, проэцируемых в память. по закрытию всех процессов, работающих с этим файлов он АВТОМАТИЧЕСКИ уничтожается. если надо, то можно и подробнее про такое решение проблемы.



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

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

Наверх




Память: 0.48 MB
Время: 0.015 c
14-23349
Плохой человек
2003-04-20 15:11
2003.05.08
Глюки с хелпом.....


6-23272
mixamixa
2003-03-14 07:24
2003.05.08
Определить IP-адрес компьютера


6-23265
Andrew777
2003-03-13 15:52
2003.05.08
Socket & Delphi7


3-22920
Sokol
2003-04-16 23:56
2003.05.08
Подключение...


1-23185
Filat
2003-04-24 20:17
2003.05.08
Как узнать что на одной из TPanel компонент в фокусе или OnEnter?