Четверг, 28.11.2024, 00:44 Приветствую Вас Гость



                 Официальный сайт клана "Victory"

Главная | Регистрация | Вход | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Исследование Lineage II
DemolДата: Вторник, 04.05.2010, 18:53 | Сообщение # 1
Адм. Академии
Группа: Администраторы
Сообщений: 156
Статус: Offline
Предисловие

Сидит программер, клепает свою прогу, тут звонок в дверь. Программер открывает - там смерть с косой стоит. Он в панике: "Смерть, дай мне еще полчаса, я закончу прогу, над которой работал два года и можешь меня забирать..." Смерть ему в ответ: "Я не за тобой, я за твоим винтом!"

Решился я на отчаянный шаг - упростить себе жизнь путём изврата: задумал написать программу которая будет мне автоматически вводить Login и Password в окно Lineage 2.
Далее будет излагаться мало кому понятная чушь и лишь некоторые, имеющие опыт в программировании на Pascal и те кто решит разобраться смогут меня понять:
Для работы я использовал следующие программы:
1) Собстно сама Lineage 2
2) Lazarus IDE 0.9.28.2 бета (аналог Delphi 7, вполне себе ничего, тока помедленней)
3) Texter 2.15

После начала работы сразу-же столкнулся с тремя проблемами, мне нужно было:
1) Узнать название окна Lineage 2;
2) Узнать класс окна Lineage 2;
3) Вспомнить что проходили в технаре;

Пришлось вспоминать старое...
Я написал маленькую программку которая мне помогла в поиске окна Lineage и определения её Класса и Имени:

Code
procedure TForm1.Button1Click(Sender: TObject);
Var
       Wd : HWnd;
       Nm: Array[0..255] of Char;   // буфер для имени
       Cs: Array[0..255] of Char; // буфер для класса
       wincount:integer;              //счетчик окон
begin
       Memo1.Lines.Clear;         //Очистим поле перед поиском окон
       wincount:=0;
       Wd:=FindWindow(nil,nil);          // Найдем первое окно верхнего уровня любого класса
       While (Wd<>0) do              // Если такое окно существует
       Begin
            if IsWindowEnabled(Wd) and IsWindow(Wd) and not IsIconic(Wd) then
               begin
               Inc(wincount);
               GetWindowText(Wd,Nm,255); //Считываем имя окна
               GetClassName(Wd,Cs,255);  //Считываем Класс окна
               Memo1.Lines.Add(IntToStr(Wd)+': Class('+String(cs)+'); Name Wnd: '+String(Nm));    // Добавим описатель, класс и имя окна в виде текста в список
               end;
       Application.ProcessMessages;         //разрешим обработку других процессов пока выполняется цикл
       Wd:=GetNextWindow(Wd,GW_HWNDNEXT);   //Найдём следующее окно
       end;
       Edit1.text:=IntToStr(wincount);
end;         

Вот что я получил:
Класс окна: L2UnrealWWindowsViewportWindow
Имя окна: Lineage II

Продолжение следует....




"...орки были, есть и будут… есть!" ©

 
  • Страница 1 из 1
  • 1
Поиск: