Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
10th
Окт
Как узнать запущена программа или нет?
Posted by Chas under Delphi, Пост-обзор
Допустим у меня запущена программа, свойство формы программы visible:=False . Ее не видно. Что прописать и где, чтобы если например пользователь форму не видит а захочет ее увидеть и запустит программу повторно, программа не запускалась повторно, а просто visible:=True; И Возможно ли вобще это сделать.
Terran
Первое, что пришло в голову:
Procedure OnlyOne;
Begin
If OpenMutex(MUTEX_ALL_ACCESS,False,'Form1') <> 0 Then
Begin
CreateMutex(Nil,True,'Form2');
Sleep(300);
Halt;
End
Else
Begin
CreateMutex(Nil,True,'Form1');
End;
End;
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Application.ShowMainForm:=False;
OnlyOne;
End;
Procedure TForm1.Timer1Timer(Sender: TObject);
Begin
If OpenMutex(MUTEX_ALL_ACCESS,False,'Form2') <> 0 Then
Begin
Form1.Visible:=True;
End;
End;
У таймера интервал 200. Если так не устроит, что можно подумать над оптимизацией.
JUDAS
фрагмент с рабочего проекта
procedure GetProcessList(var List: TstringList);
var ovi: TOSVersionInfo;
begin
if List = nil then Exit;
ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(ovi);
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
VER_PLATFORM_WIN32_NT : CreateWinNTProcessList(List);
end
end;
function GetExeRunCount(const FileName: string):integer;
var i : Integer;
fList : TstringList;
s0,S1 : string;
begin
result:=0;
s0:=ExtractFileName(FileName);
fList := TStringList.Create;
try
GetProcessList(fList);
for i := 0 to fList.Count - 1 do
begin
s1:=ExtractFileName(Trim(fList.strings));
inc(result, byte(s1=s0));
end;
finally
fList.Free;
end;
end;
begin
Application.Initialize;
if GetExeRunCount(Application.ExeName, false)>1 then
begin
MessageBox(0,'Процесс уже запущен ','ХХХХХХХХХХ',0);
Application.Terminate;
exit;
end;
...
...
...
Application.run;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)