Delphi - Find Window by partial title


Para poder localizar o nome de uma janela por parte do nome, vamos fazer o uso do FindWindow do "Windows.pas" junto com a função GetWindowText.

Como sabemos, para localizar uma janela com o título inteiro basta fazer algo do tipo:

...
var
 wHandle: Handle{Cardinal, DWORD, HWND};
begin
 wHandle := FindWindow(nil, 'Untitled - Notepad');
end;

Agora se esse título for algo que fica mudando, teremos problemas, pois essa função não conseguirá achar mais a janela do windows.
Para resolver o problema, vamos adaptá-la da seguinte forma:

function FindWindowExtd(partialTitle: string): HWND;
var
  hWndTemp: hWnd;
  iLenText: Integer;
  cTitletemp: array [0..254] of Char;
  sTitleTemp: string;
begin
  hWndTemp := FindWindow(nil, nil);
  while hWndTemp <> 0 do begin
    iLenText := GetWindowText(hWndTemp, cTitletemp, 255);
    sTitleTemp := cTitletemp;
    sTitleTemp := UpperCase(copy( sTitleTemp, 1, iLenText));
    partialTitle := UpperCase(partialTitle);
    if pos( partialTitle, sTitleTemp ) <> 0 then
      Break;
    hWndTemp := GetWindow(hWndTemp, GW_HWNDNEXT);
  end;
  result := hWndTemp;
end;

Agora podemos pesquisar por parte do nome:

...
var
 hNotepad: Hwnd;
begin
 hNotepad := FindWindowExt(' - Notepad');
end;

delphi · ‎windows · ‎findwindow · ‎getwindowtext · ‎getwindow

Última atualização: 31/01/2018 às 14:20


  • Buscar