在此处查看简单的 Delphi 代码:
function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
TMemo(Lparam).Lines.Add(IntToStr(Handle));
end;
叫它 :
procedure TForm1.FormCreate(Sender: TObject);
begin
EnumWindows(@EnumProc, Lparam(Memo1))
end;
此代码在 Windows XP、Window 7 x86 和 Windows 8 中成功运行。
现在在 Windows 7 x64 中测试代码,它只返回一项,这意味着 windows 只调用了一次 EnumProc ,这意味着 EnumProc 的结果是 false 并且没有更多的窗口可用于枚举它......
现在将我们的 EnumProc 更改为:
function EnumProc(Handle: THandle; Lparam: LPARAM): Bool; stdcall;
begin
TMemo(Lparam).Lines.Add(IntToStr(Handle));
result:= True;
end;
好的,这个怎么样?!它适用于任何版本的 Windows,包括 Windows 7 x64!
任何想法 ?它是 Windows 中的错误还是我的代码中的错误?
问候 Mojtaba 。