How do I get another application's window handle passed to Delphi via a mouse click

后端 未结 3 572
再見小時候
再見小時候 2020-12-17 06:49

How can I get the handle of a window to be passed to Delphi by the user selecting the window (could be any other aplication\'s window) by clicking with the mouse on it. In m

3条回答
  •  無奈伤痛
    2020-12-17 07:23

    if you know what text is in the title of the window, this code will do the trick for you:

    var
      WindowList: TList;
    
    function GetHandle (windowtitle: string): HWND;
    var
      h, TopWindow: HWND;
      Dest: array[0..80] of char;
      i: integer;
      s: string;
    
      function getWindows(Handle: HWND; Info: Pointer): BOOL; stdcall;
        begin
          Result:= True;
          WindowList.Add(Pointer(Handle));
        end;
    
    begin
      result:= 0;
    
      try
        WindowList:= TList.Create;
        TopWindow:= Application.Handle;
        EnumWindows(@getWindows, Longint(@TopWindow));
        i:= 0;
        while (i < WindowList.Count) and (result = 0) do
          begin
            GetWindowText(HWND(WindowList[i]), Dest, sizeof(Dest) - 1);
            s:= dest;
            if length(s) > 0 then
              begin
                if (Pos(UpperCase(Windowtitle), UpperCase(s)) >= 1) then
                  begin
                    h:= HWND(WindowList[i]);
                    if IsWindow(h) then
                      result:= h
                 end
               end;
            inc(i)
          end
        finally
          WindowList.Free;
        end;
    end;
    

    Usage in your example (notepad puts the name of the opened file in the window caption):

    h:= getHandle('text.txt');
    if (h = 0)
      // Oops not found
    else 
      begin
        // you got the handle!
      end;
    

    I used this code to check if my application was already up and running. But it can be used on any launched application.

提交回复
热议问题