Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как не допустить запуск второй копии программы 2

Delphi , Программа и Интерфейс , Приложение своё

Как не допустить запуск второй копии программы 2

Вирус - бесплатно распространяемая программа, которая, впрочем, ничего и не делает. Потому и бесплатно.


program Previns;
uses
  WinTypes,
  WinProcs,
  SysUtils,
  Forms,
  Uprevins in 'UPREVINS.PAS' {Form1};
{$R *.RES}

type
  PHWND = ^HWND;

function EnumFunc(Wnd: HWND; TargetWindow: PHWND): bool; export;
var
  ClassName: array[0..30] of char;
begin
  Result := true;
  if GetWindowWord(Wnd, GWW_HINSTANCE) = hPrevInst then
  begin
    GetClassName(Wnd, ClassName, 30);
    if StrIComp(ClassName, 'TApplication') = 0 then
    begin
      TargetWindow^ := Wnd;
      Result := false;
    end;
  end;
end;

procedure GotoPreviousInstance;
var
  PrevInstWnd: HWND;
begin
  PrevInstWnd := 0;
  EnumWindows(@EnumFunc, Longint(@PrevInstWnd));
  if PrevInstWnd <> 0 then
    if IsIconic(PrevInstWnd) then
      ShowWindow(PrevInstWnd, SW_RESTORE)
    else
      BringWindowToTop(PrevInstWnd);
end;

begin
  if hPrevInst <> 0 then
    GotoPreviousInstance
  else
  begin
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.

Программа на Delphi, предназначенная для предотвращения запуска нескольких экземпляров одного приложения. Вот как она работает:

Программа определяет функцию EnumFunc, которая перечисляет все окна на системе и проверяет, есть ли среди них окно с тем же handle инстанции (hPrevInst) как текущий процесс. Если такое окно найдено, функция устанавливает указатель TargetWindow в указывающий на это окно.

Главная процедура GotoPreviousInstance вызывает EnumWindows с callback-функцией @EnumFunc и параметром Longint(@PrevInstWnd). Это перечисляет все окна на системе и находит то, которое соответствует handle инстанции текущего процесса.

Если найденное окно является иконическим (т. е., уменьшенным), программа восстанавливает его до оригинального размера с помощью ShowWindow(SW_RESTORE). Если окно не иконическое, она выводит его на передний план в порядке z-значения с помощью BringWindowToTop.

Если не найдено соответствующего окна (т. е., это первый экземпляр), программа создает новый форм (TForm1) и запускает приложение с помощью Application.Run.

В контексте вируса поведение программы заключается в том, что она может обнаружить и запустить существующий экземпляр самой себя, эффективно предотвращая пользователя от запуска нескольких копий одного программного обеспечения.

Некоторые предложения по улучшению:

  • Вместо использования жестко закодированного handle инстанции (hPrevInst) рассмотрите возможность хранения его в файле конфигурации или настройке реестра, чтобы можно было легко изменить.
  • Рассмотрите добавление дополнительных проверок для уверенности в том, что обнаруженное окно является экземпляром самого себя, а не просто любым окном с тем же handle инстанции.
  • Если вы обеспокоены безопасностью, рассмотрите использование более надежных методов обнаружения и взаимодействия с существующими экземплярами, таких как механизмы межпроцессного общения (IPC), такие как названные трубы или сокеты.

В целом, программа демонстрирует основной подход к предотвращению запуска нескольких экземпляров приложения. Однако она может потребовать дополнительных функций и функциональности для ее более надежной и безопасной работы в реальных сценариях.

В статье описывается способ создания программы на языке Delphi, которая не позволяет запускать вторую копию программы, и предотвращает распространение вирусов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложение своё ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:03:33/0.005836009979248/1