在 FM 中查找窗口
FindWindow in FM
我正在尝试在 FM 中使用 findwindow api 调用,我可以在 VCL 应用程序中使用它查找,但不能在 FM 中使用。
这是我的代码
function WindowExists(titlename: string): boolean;
var
hwd: THandle;
begin
hwd := 0;
hwd := FindWindow(nil, pchar(titlename));
Result := False;
if not(hwd = 0) then { window was found if not nil }
Result := True;
end;
这是我在尝试编译时遇到的错误
[dcc32 错误] global_proc.pas(62):E2010 不兼容的类型:'HWND' 和 'Pointer'
我做错了什么?
您的问题很可能是您的代码正在查找 FMX.Platform.Win.FindWindow
而不是 Winapi.Windows.FindWindow
。此外 FindWindow
returns 一个 HWND
而不是 THandle
.
你的代码应该是这样的:
function WindowExists(const TitleName: string): Boolean;
var
wnd: HWND;
begin
wnd := Winapi.Windows.FindWindow(nil, PChar(TitleName));
Result := wnd <> 0;
end;
甚至
function WindowExists(const TitleName: string): Boolean;
begin
Result := Winapi.Windows.FindWindow(nil, PChar(TitleName)) <> 0;
end;
注意,这样写代码总是没有意义的:
A := 0;
A := 1;
这就是您的代码在函数的前两行中所做的实质内容。使用不等于运算符 <>
而不是否定等于运算符也是惯用的。
我正在尝试在 FM 中使用 findwindow api 调用,我可以在 VCL 应用程序中使用它查找,但不能在 FM 中使用。
这是我的代码
function WindowExists(titlename: string): boolean;
var
hwd: THandle;
begin
hwd := 0;
hwd := FindWindow(nil, pchar(titlename));
Result := False;
if not(hwd = 0) then { window was found if not nil }
Result := True;
end;
这是我在尝试编译时遇到的错误 [dcc32 错误] global_proc.pas(62):E2010 不兼容的类型:'HWND' 和 'Pointer'
我做错了什么?
您的问题很可能是您的代码正在查找 FMX.Platform.Win.FindWindow
而不是 Winapi.Windows.FindWindow
。此外 FindWindow
returns 一个 HWND
而不是 THandle
.
你的代码应该是这样的:
function WindowExists(const TitleName: string): Boolean;
var
wnd: HWND;
begin
wnd := Winapi.Windows.FindWindow(nil, PChar(TitleName));
Result := wnd <> 0;
end;
甚至
function WindowExists(const TitleName: string): Boolean;
begin
Result := Winapi.Windows.FindWindow(nil, PChar(TitleName)) <> 0;
end;
注意,这样写代码总是没有意义的:
A := 0;
A := 1;
这就是您的代码在函数的前两行中所做的实质内容。使用不等于运算符 <>
而不是否定等于运算符也是惯用的。