小编Jon*_*_rs的帖子

EnumWindows在64位Delphi中表现得很奇怪

我正在使用64位Windows 8计算机上的Delphi XE3,构建32位和64位应用程序.

我正在使用EnumWindows找出给定其进程ID的进程主窗口的Windows句柄.代码使用回调例程中的LPARAM参数将指针传递给记录.

我正在使用的代码适用于32位版本.

当我编译并运行64位构建时,它失败了.出现此问题的原因是LPARAM值似乎在Wnd参数中传递.Param值总是设置为$ FFFF ...换句话说,我根本没有传递HWND值...所以它不是因为参数只是交换了.

type
  PEnumInfo = ^TEnumInfo;
  TEnumInfo = record
    ProcessID : DWORD;
    HWND      : THandle;
  end;

function EnumWindowsProc(Wnd: HWND;  Param : LPARAM): Bool; stdcall;
    var
      PID : DWORD;
      PEI : PEnumInfo;
    begin
// in 32-bit Param matches the address of the param that is passed
// in 64-bit Param is set to $FFFF - however Wnd = the expected address
      ShowMessage('PEI = '+IntToStr(Param));

      PEI := PEnumInfo(Param);
      GetWindowThreadProcessID(Wnd, @PID);

// the code fails at this …
Run Code Online (Sandbox Code Playgroud)

delphi winapi win64 delphi-xe3

3
推荐指数
1
解决办法
895
查看次数

标签 统计

delphi ×1

delphi-xe3 ×1

win64 ×1

winapi ×1