EnumWindowsProc遍历窗体可不可以写到DLL中去

hdc733 2018-11-09 07:12:29
大虾们:
我现在想把EnumWindowsProc写到DLL中去,遍历窗体后将窗体名称在回传出来。由于功底比较差没能写成功,高手可不可以给予指点一二,万分感激。
function EnumWindowsProc_2(hwnd: HWND; lParam: LPARAM): Boolean; stdcall;
var
buf: array[Byte] of Char;
begin
GetWindowText(hwnd, buf, SizeOf(buf));
Result := True;
end;
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SupermanTm 2018-11-12
  • 打赏
  • 举报
回复
当然可以,只是“将窗体名称回传出来”这个过程你要预先分配好足够大的内存缓冲区,因为DLL中一般是不能用String类型的。

BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);

BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);

DLL 中应该这样处理:

library dllTest1;

uses
Windows,
SysUtils;

{$R *.res}

type
TEnumBuff = record
hTextBuf: PChar;
FBuffSize: Integer;
FCount: Integer;
end;
PEnumBuff = ^TEnumBuff;

function EnumWindowsProcCB(Wnd: HWND; lParam: Integer): Boolean; stdcall;
var
X: Integer;
P: PEnumBuff;
begin
P:= Pointer(lParam);
with P^ do begin
X:= GetWindowText(Wnd, hTextBuf, FBuffSize);
Result:= (X < FBuffSize);
if Result and (X <> 0) then begin
Inc(hTextBuf, X);
hTextBuf^:= #0;
Inc(hTextBuf);
FBuffSize:= FBuffSize - (X+1);
Inc(FCount);
end;
end;
end;

function EnumWindowsNames(lpTextBuf: Pointer; BuffSize: Integer): Integer; stdcall;
var
FBuff: TEnumBuff;
begin
Result:= 0;
with FBuff do begin
hTextBuf:= lpTextBuf;
FBuffSize:= BuffSize;
FCount:= 0;
end;
if EnumWindows(@EnumWindowsProcCB, Integer(@FBuff)) then begin
Result:= FBuff.FCount;
end;
end;

exports
EnumWindowsNames name 'EnumWindowsNames';

begin end.


相应的宿主程序:

function EnumWindowsNames(lpTextBuf: Pointer; BuffSize: Integer): Integer; stdcall; external 'dlltest1.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
N: Integer;
Buf: array [0..8191] of Char;
begin
P:= @Buf;
N:= EnumWindowsNames(P, 8192);
if N <> 0 then repeat
ListBox1.Items.Add(P);
Inc(P, StrLen(P) + 1);
Dec(N);
until N = 0;
end;
hdc733 2018-11-11
  • 打赏
  • 举报
回复
没人知道吗。帮顶一下也好呢

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧