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

Узнать, запущена ли программа из пакета MS Office

Delphi , Технологии , OLE Automation MSOffice

Узнать, запущена ли программа из пакета MS Office

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

uses
   ComObj, ActiveX;

 function IsObjectActive(ClassName: string): Boolean;
 var
   ClassID: TCLSID;
   Unknown: IUnknown;
 begin
   try
     ClassID := ProgIDToClassID(ClassName);
     Result  := GetActiveObject(ClassID, nil, Unknown) = S_OK;
   except
     // raise; 
    Result := False;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   if IsObjectActive('Word.Application') then ShowMessage('Word is running !');
   if IsObjectActive('Excel.Application') then ShowMessage('Excel is running !');
   if IsObjectActive('Outlook.Application') then ShowMessage('Outlook is running !');
   if IsObjectActive('Access.Application') then ShowMessage('Access is running !');
   if IsObjectActive('Powerpoint.Application') then ShowMessage('Powerpoint is running !');
 end;

Программный код на Delphi, который проверяет, запущены ли какие-либо из приложений Microsoft Office (Word, Excel, Outlook, Access, PowerPoint) на компьютере пользователя.

Суть работы:

  1. Функция IsObjectActive принимает строковый параметр - имя класса и возвращает булевое значение, указывающее, является ли экземпляром этого класса активным.
  2. В функции используется ProgIDToClassID, чтобы преобразовать предоставленное имя класса в идентификатор класса (CLSID).
  3. Затем функция пытается получить активный объект с помощью CLSID, используя GetActiveObject. Функция возвращает значение из эnum S_OK до S_FAIL.
  4. Если блок except не выполняется (т.е. не возникает исключение), то GetActiveObject успешно вернула активный объект, поэтому функция устанавливает Result в True.
  5. Главное событие нажатия кнопки формы вызывает эту функцию для каждого из приложений Microsoft Office и отображает сообщение, если какой-либо из них запущен.

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

Альтернативное решение с более современным подходом:

uses
  System.SysUtils,
  ComObj;

function IsObjectActive(const ClassName: string): Boolean;
var
  ClassID: TCLSID;
begin
  Result := (ProgIDToClassID(ClassName) <> 0) and
             (GetActiveObject(ClassID, nil) <> 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsObjectActive('Word.Application') then
    ShowMessage('Word is running!');
  if IsObjectActive('Excel.Application') then
    ShowMessage('Excel is running!');
   // ...
end;

В этом варианте используется функция ProgIDToClassID, чтобы преобразовать имя класса в CLSID, и проверяется, является ли возвращаемое значение не равно нулю (что указывает на успех). Также используется GetActiveObject с CLSID и проверяется ее возвращаемое значение. Этот подход более компактен и легче для чтения.

Статья описывает способ определения запущенной программы из пакета MS Office (Word, Excel, Outlook, Access, Powerpoint) с помощью Delphi и ActiveX.


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

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




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


:: Главная :: OLE Automation MSOffice ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:24:46/0.0055410861968994/1