[Delphi] Uchwyt okna - brak classname i caption

0

Caption w oknie jest zmienne, classname też z pewnych względów odpada. Czy jest jakaś inna metoda pobrania uchwytu do okna obcego programu bez użwania classname i caption?

Edit: Zauważyłem że mimo iż Caption jest zmienne to zawsze powtarza sie jeden wyraz, czy możliwe jest zlapanie uchwytu poprzez "niepełny" caption ?

0

Wylistuj okna przez EnumWindows (jest przykład w FAQ/Art/Download/Forum) a potem sprawdzaj przez GetWindowText i Pos czy poszukiwany tekst znajduje się w caption okna.

0

Dzięki!! Udało się !! :D

0

Dilbo84: może pokażesz nam jak to zrobiłeś? Chyba każdy jest zainteresowany Twoim rozwiązaniem :)

0

Funkcja wywołuje miganie okna które ma zmienny caption i dynamiczne classname oraz jest zminimalizowane:

function EnumWindowProc(uchwyt:HWnd;P:Pointer):boolean;stdcall;
var
winname,cname:array[0..144]of char;
begin
result:=true;
if (frmMain.TimerBlink.Enabled=False) then
begin
getwindowtext(uchwyt,winname,144);
getclassname(uchwyt,cname,144);
if (Pos('Niezmienny_fragment_caption', winname)>0) then
  begin
    frmMain.H2:=uchwyt;
    if (IsIconic(uchwyt)=True) then
        begin
        frmMain.TimerBlink.Enabled:=True;
        frmMain.TimerBlinkTimer(nil);
        end;
  end;
end;
end;

Wywołanie funkcji to: EnumWindows(@enumwindowproc,0);

Kod Timera:

public
    { Public declarations }
    H2: THandle;

procedure TfrmMain.TimerBlinkTimer(Sender: TObject);
var
Miganie : Boolean;
begin
if (IsIconic(H2)=True) then
  begin
  Miganie := not Miganie;
  FlashWindow(H2, Miganie);
  end else
      begin
      TimerBlink.Enabled:=False;
      FlashWindow(H2, False);
      end;
end;

Kod może sie wydawać troche zakręcony ale to dlatego że to jest plugin (DLL) i eksportuje nazwe uchwytu do formy na której jest wykorzystywany przez Timera

1 użytkowników online, w tym zalogowanych: 0, gości: 1