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

Вниз

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

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

Наверх




Память: 0.46 MB
Время: 0.009 c
11-23048
Proton
2002-07-30 19:30
2003.05.08
RoterPro


14-23340
race1
2003-04-19 16:07
2003.05.08
cakewalk vs. w2k


3-22996
lustr
2003-04-17 16:37
2003.05.08
ошибка при конекте через TDataBase


4-23433
Шоломицкий
2003-03-05 20:34
2003.05.08
Посылка сообщений Winamp 3


14-23346
sashundra
2003-04-18 15:17
2003.05.08
с Fox Pro yf на Delphi





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