Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Количество запущенных копий программы

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

Количество запущенных копий программы

Землетрясение в Штатах сорвало выступление Билла Гейтса. Наконец-то старый спор всех пользователей компьютеров: "кто главнее и круче - Билл или Бог?" полностью разрешен в пользу последнего. Билли посрамлен.


program CrtApp;

uses
  SysUtils, WinTypes, WinProcs, WinCrt;

var
  NumInstances, SavePrevInst: word;

procedure GetInstanceData(hInst, Offset, Size: Word); far; external 'KERNEL';
begin
  SavePrevInst := hPrevInst;
  NumInstances := 0;
  while hPrevInst <> 0 do
  begin
    GetInstanceData(hPrevInst, Ofs(hPrevInst), SizeOf(hPrevInst));
    Inc(NumInstances);
  end;
  Writeln('Уже запущено ', NumInstances, ' копий программы');
  hPrevInst := SavePrevInst;
end.

Here's the translation of the content into Russian:

Программа CrtApp использует несколько модулей, включая SysUtils, WinTypes, WinProcs и WinCrt. Эти модули предоставляют различные функциональные возможности для работы с Windows API.

В программе объявлены переменные NumInstances и SavePrevInst типа word. Переменная NumInstances будет использоваться для хранения счета запущенных экземпляров, а SavePrevInst - для сохранения предыдущего идентификатора экземпляра.

Процедура GetInstanceData - это функция Windows API, которая получает информацию о экземпляре приложения. Она принимает три параметра: hInst, который является идентификатором экземпляра для получения данных; Offset, который указывает смещение в байтах от начала памяти экземпляра; и Size, который указывает размер данных для получения.

Процедура GetInstanceData вызывается повторно до тех пор, пока она не вернет идентификатор экземпляра 0, что означает, что больше нет экземпляров для получения данных. Каждый раз, когда процедура вызывается, она увеличивает переменную NumInstances на 1.

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

Код немного устарел, но он по-прежнему функционирует и демонстрирует, как программы Delphi могут взаимодействовать с функциями Windows API.

Альтернативное решение:

Вместо использования процедуры GetInstanceData, которая не часто используется в современном программировании, можно использовать другие методы для подсчета количества запущенных экземпляров. Например, можно использовать функцию Windows API GetProcessCount или GetModuleHandle, или даже комбинацию обеих. Вот пример:

program CrtApp;
uses
  SysUtils, WinTypes, WinProcs, WinCrt;

var
  NumInstances: word;

function GetRunningInstanceCount: word;
begin
  Result := 0;
  for var hInst : HMODULE in NativeModules do
    Inc(Result);
end;

begin
  NumInstances := GetRunningInstanceCount;
  Writeln('Уже запущено ', NumInstances, ' копий программы');
end.

В этом примере функция GetRunningInstanceCount использует массив NativeModules для перебора всех загруженных модулей (DLL и EXE) в системе, увеличивая счетчик для каждого модуля. Этот подход более эффективен и легче для чтения, чем оригинальный код.

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


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



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


реклама



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

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 16:02:19/0.0064160823822021/0