在 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;

这就是您的代码在函数的前两行中所做的实质内容。使用不等于运算符 <> 而不是否定等于运算符也是惯用的。