Конференция "Начинающим" » Заголовок окна
 
  • Жук (31.03.18 23:24) [0]
    С помощью хука отлавливаю создание окна, но заголовок в нём появляется спустя 2 секунды. Мне нужно подождать и считать заголовок. Какие есть варианты?

    Мой вариант:

    ListTimer: TList<TTimer>;
    //Отлов создания окна
    begin
       ListTimer.Add(TTimer.Create(nil));
       ListTimer.Last.Tag := wnd;
       ListTimer.Last.Interval := 2000;
       ListTimer.Last.OnTimer := OnTimer_Timer;
       ListTimer.Last.Enabled := True;
    end;

    procedure OnTimer_Timer(Sender: TObject);
    var
     Timer: TTimer;
     i: integer;
    begin
     Timer := TTimer(Sender);
     //считываем заголовок
     Timer.Enabled := False;
     i := ListTimer.IndexOf(Timer);
     ListTimer[i].Free;
     ListTimer[i] := nil;
     ListTimer.Delete(i);
    end;

  • kilkennycat © (01.04.18 01:03) [1]

    > ListTimer.Last.Interval := 2000;

    сделать 3568, и тогда заголовок появится через 3,568 секунды
    достаточно для
    > Мне нужно подождать

    ?
  • Жук (01.04.18 01:22) [2]
    Не понял. Смотрите, я с помощью хука отлавливаю создание окна, но в момент создания у окна ещё нет заголовка, он появиться спустя 1,5 секунды. Мне нужно чтобы определённый код выполнился спустя 2 секунды после создания окна, чтобы я в этом коде мог считать и обработать заголовок.
    Sleep не подходит. И окон может открыться сразу несколько. У меня появилась идея с таймерами, добавляться их в TList и по истечению 2 секунды выполнять код и удалять их.
    У меня опыта мало, может существует лучшее решение?
  • KilkennyCat © (01.04.18 02:18) [3]
    ну тогда поставить хук на заголовок окна, кто его там пишет, SetWindowText ?
  • Leonid Troyanovsky © (01.04.18 09:43) [4]

    > Жук   (01.04.18 01:22) [2]

    > У меня опыта мало, может существует лучшее решение?

    Ставить хук WH_CALLWNDPROC/RET и отслеживать изменение
    заголовка окна при WM_GETTEXT.

    --
    Regards, LVT.
  • Игорь Шевченко © (01.04.18 10:37) [5]

    > У меня опыта мало, может существует лучшее решение?


    Заплатить тому, у кого этот опыт есть. Вроде очевидно.
Есть новые Нет новых   [134427   +34][b:0][p:0.001]