2019年9月6日 星期五

[研究][Delphi]計算開啟的 Word 文件數

[研究][Delphi]計算開啟的 Word 文件數

2019-09-06

Delphi 10.3  (v26.0) (2019)

(下圖)  Word 2016 用手動執行和開啟文件,只會啟動一個 WinWord.exe



(下圖) 但若使用程式去啟動或調用 Word 2016,或者 Word 當掉,這種情況下會不只一個 WinWord.exe 被啟動。此程式只是偵測某一個 WinWord.exe 開啟的文件數。





(下圖) 網路上有文章用此種方式判斷電腦中使否有 Word 被啟動,這是不準的,因為 WinWord.exe 可能有被啟動,但沒有開啟文件,結果會 0個。

下面 Word 已經被啟動,但尚未開啟任何文件,此時會算出 0 個文件。


(下圖) 尚未編輯的空白文件,也算1個文件。

另外,不同版本 Word 軟體,情況可能不同,不保證。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

USES ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;

  oWord: OLEVariant;
begin
  oWord := GetActiveOleObject('Word.Application');
  Label1.Caption := IntToStr(oWord.Documents.Count);

  for i := 1 to oWord.Documents.Count do
  begin
    // if oWord.Documents.Item(i).Name = 'MyDocument.doc' then
    // oWord.Documents.Item(i).Select;
  end;
  // oWord.ActiveDocument.SaveAs('C:\MyDocument.doc');
  // oWord.Quit;
  oWord := Unassigned;
end;

end.

(完)

沒有留言:

張貼留言