Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Работа: предложения и спрос
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.08.2024, 13:05
MIKHALKIN MIKHALKIN вне форума
Прохожий
 
Регистрация: 10.06.2023
Сообщения: 1
Версия Delphi: Delphi 10.4
Репутация: 10
По умолчанию Программа запрет запуска второго экземпляра и обработка параметров

Добрый день.

Нужен пример(исходный код) программы:
Что бы программа не запускала новые экземпляры программы, но при этом получала параметры(хотя бы в поле едит). Нужен пример рабочий на VLC (Delphi 12)
Ответить с цитированием
  #2  
Старый 14.08.2024, 21:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну примеров полно в интернете.
Например, я делаю так:

В dpr файле:
Код:
program Project1;

uses ...

{$R *.res}

function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL; stdcall; external 'user32.dll';

function IsSecondCopy : Boolean;
var
  hMutex : THandle;
begin
  Result := False;

  WndMessage := RegisterWindowMessage(PChar(GetMessageName(AppName)));

  hMutex := CreateMutex(Nil, True, PChar(GetMutexName(AppName)));
  If hMutex<>0 Then
    If GetLastError=ERROR_ALREADY_EXISTS Then
      Begin
        AllowSetForegroundWindow(DWORD(-1));
        PostMessage(HWND_BROADCAST,WndMessage,0,0);
        Result := True;
      End;
end;

begin
  If IsSecondCopy Then Halt(0);
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMainForm, MainForm);
  Application.HookMainWindow(MainForm.HookMessageProc);
  Application.Run;
end.

В главной форме:
Код:
const
  AppName = 'Password Keeper';

type
  TMainForm = class(TForm)
    ...
  public
    { Public declarations }
    function HookMessageProc(var Message : TMessage) : Boolean;
  end;

...

function TMainForm.HookMessageProc(var Message : TMessage) : Boolean;
begin
  Result := False;
  If Message.Msg = WndMessage Then
    Begin
      If WindowState = wsMinimized Then Application.Restore;
      Application.BringToFront;
      SetForegroundWindow(Self.Handle);
      Result := True;
    End;
end;

Это по поводу второй копии.
По поводу передачи данных (небольших), надо пользовать сообщение WM_COPYDATA. Код можно посмотреть, например, тут:
https://stackoverflow.com/questions/...ia-wm-copydata
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter