Конференция "WinAPI" » hwnd кнопки всегда один и тот же ?
 
  • Артём (19.08.13 16:27) [0]
    hwnd кнопки всегда один и тот же ? или он меняется там допустим при перезапуски проги или виндоус ?
  • DVM © (19.08.13 16:34) [1]
    даже во время работы программы может поменяться
  • Артём (19.08.13 16:46) [2]
    ёпрст, логично)
    большое спасибо за ответ!
  • Артём (19.08.13 17:16) [3]
    интересно, узнал wnd окна, хотел посмотреть все его элементы через EnumChildWindows, а у меня ничего не отобразилось, как будто там голая форма
    класс окна тоже политический
    'HwndWrapper[HoldemManager.exe;;84d24142-ca5c-4ac3-98f8-7c84fd06f61e]'
    может у кого то есть идеи?*
  • DVM © (19.08.13 17:24) [4]

    > может у кого то есть идеи?*

    Либо ты не правильно ищешь дочерние окна, либо их там нет, а все что ты  там видишь глазами - не оконные элементы.
    Возьми какой либо проверенный инструмент, например Spy++ и посмотри, есть ли там дочерние окна или нет.
  • Артём (21.08.13 16:45) [5]
    Так, нашёл окно с классом #32770, на этой форме есть кнопка, хочу нажать её.
    В Spy++ иерархия сначала
    #32770 и в ней сразу моя кнопка.
    Далее через FindWindowEx пытаюсь получить hwnd  кнопки, но не получается, возвращается 0.
  • Артём (21.08.13 16:48) [6]
    и вообще через свою вспомогательную прогу и spy++ вычислил whd кнопки
    пишу SendMessage(526188,BM_CLICK,0,0); ничего не происходит

    а если написать SetActiveWindow(где hwnd это окно с классом #32770 то оно фокуса не получает);
  • brother © (21.08.13 16:48) [7]
    > пытаюсь получить hwnd  кнопки

    ты код то покажи...
  • Артём (21.08.13 16:51) [8]
    да код то дефолтный
    h := FindWindow(nil, 'заголовок окна'); (тут всё хорошо, hwd получил)
    h2:= FindWindowEx(h, 0, 'класс', 'Register'); (тут возвращает 0)
    SendMessage(h2,BM_CLICK,0,0);
  • brother © (21.08.13 16:52) [9]
    > 'класс', 'Register'

    О_о это что?
  • Артём (21.08.13 16:54) [10]
    ну там класс кнопки (я не стал его копировать, его легко нашёл с помощью своей проги и он совпал с spy++) и имя кнопки(тоже совпало)
  • brother © (21.08.13 16:57) [11]
    телепаты в отпуске, ты ПОЛНЫЙ код приводи...
  • Артём (21.08.13 17:01) [12]

    procedure TForm1.Button2Click(Sender: TObject);
    var h,h2: hwnd;      i:integer;
    begin
    h := FindWindow(nil, 'PokerStars Lobby - Logged in as Artyom');
    h2:= FindWindowEx(FindWindow('Windows', nil), h, 'PokerStarsButtonClass', 'Register');
    SendMessage(h2,BM_CLICK,0,0);
    end;

  • Артём (21.08.13 17:03) [13]
    не так (этот вариант я сейчас попробовал тоже не катит)
    вот


    procedure TForm1.Button2Click(Sender: TObject);
    var h,h2: hwnd;
    begin
    h := FindWindow(nil, 'PokerStars Lobby - Logged in as Artyom');
    h2:= FindWindowEx(h, 0, 'PokerStarsButtonClass', 'Register');
    SendMessage(h2,BM_CLICK,0,0);
    end;

  • brother © (21.08.13 17:04) [14]
    мдя, я так и догадывался...
  • Артём (21.08.13 17:04) [15]
    ну я писал дефолтно)
  • brother © (21.08.13 17:05) [16]
    такие программы, могут быть защищены от автонажатий итп...
  • brother © (21.08.13 17:06) [17]
    и приведи данные SPY++, что то я струдом верю [10]
  • brother © (21.08.13 17:06) [18]
    ps. "халява" наказуема
  • Артём (21.08.13 17:07) [19]
    я тоже так подумал, просто у меня есть 2 проги (от других разработчиков), и там это происходит так быстро. Я подумал что это программно нажимают.
    Ну как всегда конечно остаётся вариант через мышку)
 
Конференция "WinAPI" » hwnd кнопки всегда один и тот же ?
Есть новые Нет новых   [118582   +31][b:0][p:0.001]