1,183
社区成员
发帖
与我相关
我的任务
分享
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DDEMan, IdStrings;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWND;
Procedure WndProc2(Var Msg: TMessage);
public
Procedure GetWordFileName(Var Msg: TMessage);
end;
Function RegisterShellHookWindow(HWND: LongWord): Integer; stdcall;
external 'User32.dll';
Function StrCmpIW(w1,w2:LPWSTR): Integer; stdcall; external 'Shlwapi.dll';
var
Form1: TForm1;
Msg_ID: Cardinal;
cDDE: TDDEClientConv;
implementation
{$R *.dfm}
Procedure TForm1.WndProc2(Var Msg: TMessage);
var
wcName: string;
buf: array [0..MAX_PATH] Of WideChar;
Begin
If Msg.Msg = Msg_ID then
begin
GetClassNameW(Msg.LParam,@buf,MAX_PATH);
if StrCmpIW('OpusApp',@buf) = 0 then GetWordFileName(Msg);
end
else
Msg.result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.lParam);
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
FWindowHandle := AllocateHWnd(WndProc2);
Msg_ID := RegisterWindowMessage('SHELLHOOK');
RegisterShellHookWindow(FWindowHandle);
cDDE := TDDEClientConv.Create(nil);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeallocateHWnd(FWindowHandle);
cDDE.Free;
end;
Procedure TForm1.GetWordFileName(Var Msg: TMessage);
var
fList: TStringList;
begin
case Msg.WParam of
HSHELL_WINDOWCREATED:
if cDDE.SetLink('WinWord','System') then
begin
fList := TStringList.Create;
while fList.Count < 3 do
SplitColumns(cDDE.RequestData('Topics'), fList, #9);
Memo1.Lines.Add(fList[1]);
cDDE.CloseLink;
fList.Free;
end;
end;
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DDEMan;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FWindowHandle: HWND;
Procedure WndProc2(Var Msg: TMessage);
public
Procedure GetWordFileName(Var Msg: TMessage);
end;
Function RegisterShellHookWindow(HWND: LongWord): Integer; stdcall;
external 'User32.dll';
Function StrCmpIW(w1,w2:LPWSTR): Integer; stdcall; external 'Shlwapi.dll';
var
Form1: TForm1;
Msg_ID: Cardinal;
cDDE: TDDEClientConv;
implementation
{$R *.dfm}
Procedure TForm1.WndProc2(Var Msg: TMessage);
var
wcName: string;
buf: array [0..MAX_PATH] Of WideChar;
Begin
If Msg.Msg = Msg_ID then
begin
GetClassNameW(Msg.LParam,@buf,MAX_PATH);
if StrCmpIW('OpusApp',@buf) = 0 then GetWordFileName(Msg);
end
else
Msg.result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.WParam, Msg.lParam);
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
FWindowHandle := AllocateHWnd(WndProc2);
Msg_ID := RegisterWindowMessage('SHELLHOOK');
RegisterShellHookWindow(FWindowHandle);
cDDE := TDDEClientConv.Create(nil);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DeallocateHWnd(FWindowHandle);
cDDE.Free;
end;
Procedure TForm1.GetWordFileName(Var Msg: TMessage);
var
fList: TStringList;
begin
case Msg.WParam of
HSHELL_WINDOWCREATED:
if cDDE.SetLink('WinWord','System') then
begin
fList := TStringList.Create;
fList.StrictDelimiter := True;
fList.Delimiter := #9;
while fList.Count < 3 do
fList.DelimitedText := cDDE.RequestData('Topics');
Memo1.Lines.Add(fList[1]);
cDDE.CloseLink;
fList.Free;
end;
end;
end;
end.