Lazarus(Free Pascal)の次のコードを使用して、メインウィンドウのハンドルを取得しようとしています。
function FindMainWindow(Pid: LongWord): LongWord;
type
TParam = record
Window: HWnd;
Test: Integer;
Pid: LongWord;
end;
PParam = ^TParam;
var
Params: TParam;
function _FindMainWindow(Wnd: HWnd; MyLParam: PParam): Bool; stdcall;
var
WinPid: DWord;
begin
with MyLParam^ do
begin
Test := 2;
GetWindowThreadProcessID(Wnd, @WinPid);
Result := (WinPid <> Pid) or (not IsWindowVisible(Wnd))
or (not IsWindowEnabled(Wnd));
if not Result then begin
Window := Wnd;
end;
end;
end;
begin
Params.Pid := Pid;
Params.Test := 1;
EnumWindows(@_FindMainWindow, LParam(@Params));
ShowMessage('Done!');
ShowMessage(IntToStr(Params.Test));
Result := Params.Window;
end;
問題はParams.Test
、コールバックを実行した後もまだ1であるということです。関数Params
内のを変更したい。_FindMainWindow
注: 「アクセス違反」エラーが発生したためParams
、_FindMainWindow
直接アクセスできませんでした。