Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Вопрос по компоненту(ам)
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / Delphi & Pascal RSS подписка на сообщения с форума Subscribe


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 2736
Вопрос по компоненту(ам)
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
Leo08




Gold Member
# | Сообщение добавлено 08.03.2011 23:52:23
Отредактировано 09.03.2011 00:29:50 by Leo08
Здравствуйте товарищи делфисты!
Вопросик есть один по компонентам. Есть у меня допустим "чужая" форма с заголовкам. И на ней есть компонент TEdit с позициями слева=520, сверху=180 (ну предположим) и TButton (440,100). Так вот, как мне послать сигнал компоненту и узнать, что это за компонент по его координатам?
Text

Procedure TForm1.DoIt(Cap:string);
Var
H:hwnd;
Begin
H:=findwindow(nil,PChar(cap));
 ¤ ¤ ¤ ? ? ? ¤ ¤ ¤
End;
 
Например мне надо в Edit ввести 1234 и нажать кнопку.
 
БЯЯЯГГАААААА
Сказать спасибо Ответить Цитировать

Virous




Gold Member
# | Сообщение добавлено 11.03.2011 00:12:10
Добрый вечер, Leo08.
 
Я не уверен, что то, что я изложу ниже будет работать, но стоит попробовать.
 
Вот алгоритм действий:
  1)Просматриваем все окна в системе по очереди.
  2)Получив дескриптор очередного окна просматриваем его дочерние окна.
  3)Получив дескриптор очередного дочернего окна, получаем его координаты.
  4)Если полученные координаты савподают с Вашими, то выкачиваем из окна всю необходимую инфу.
 
  Просмотреть все окна в системе можно при помощи процедуры EnumWindows(). Ей нужно передать два параметра:
    -указатель на функцию типа function functionname(h:hwnd):BOOL; stdcall;
    -здесь ставим ноль (0).
  После вызова EnumWindows() функция functionname будет выполнена столько раз, сколько окон открыто в системе, причем при каждом ее вызове в параметр h будет передаваться дескриптор очередного окна.
 
  Просмотреть дочерние окна можно при помощи процедуры с аналогичным синтаксисом enumchildwindows().
  Вот кусочек кода, который выведет в memo1 дескрипторы всех форм, кнопок, edit'ов и.т.д.
Delphi

Function EnumWind(h:hwnd):BOOL; stdcall;
  Begin
  EnumChildWindows(h,@EnumCWnd,0);
  End;
 
Function EnumCWnd(h:hwnd):BOOL; stdcall;
Begin
Memo1.Lines.Add(IntToStr(h));
End;
 
Var h:THandle;
Begin
EnumWindows(@EnumWind,0);
End;
 

  Теперь нам вместо вывода в Memo1 надо получить координаты окна. Это можно сделать через процедуру GetWindowRect(). Ей надо передать 2 параметра:
   -Дескриптор окна, координаты которого определяем.
   -Структура типа TRect, куда и будут записаны координаты.
 
  Если Вы в моем исходнике замените строчку
Memo1.Lines.Add(IntToStr(h));
на строчки
GetWindowRect(h,Rect);
Memo1.Lines.Add(IntToStr(Rect.Left)+' '+IntToStr(Rect.Right));
А так же добавите переменную Rect типа TRect, то в Memo1 будут выведены координаты верхнего левого угла каждой формы, кнопки, edit'a и много чего другого.
  Далее найдите искомые координаты и творите с этим окном что захотите.
  Удачи.
 
Добавлено 11.03.2011 00:31:17 (через 19 минут 7 секунд )
 
  Есть и второй способ. Только не знаю рабочий ли он. Вот исходник:
Delphi

function GetCaptionAtPoint(CrPos: TPoint): string;
 var
   textlength: Integer;
   Text: PChar;
   Handle: HWND;
 begin
   Result := 'Empty';
   Handle := WindowFromPoint(CrPos);
   if Handle = 0 then Exit;
   textlength := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0);
   if textlength <> 0 then
   begin
     getmem(Text, textlength + 1);
     SendMessage(Handle, WM_GETTEXT, textlength + 1, Integer(Text));
     Result := Text;
     freemem(Text);
   end;
 end;
 

Теоретически он должен отображать название элемента, расположенного под курсором.
 
С моей точки зрения первый способ лучше.
 
Ахтунг! Собакирен мит зубен клац, клац! Зубен зи дойч!
Сказать спасибо Ответить Цитировать

Leo08




Gold Member
# | Сообщение добавлено 11.03.2011 08:17:34
Спасибо, Virous!
Я предполагал, что нужно просматривать все окна системы, но думал, что всё же есть функции, согласно которым можно напрямую обращаться к компонентам. Оказывается нету!
Еще раз спасибо!
 
БЯЯЯГГАААААА
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • Релиз ядра Linux 5.9
  • Российские хакеры вооружились уязвимостью Zerologon
  • Тысячи приватных звонков американских заключенных оказались в отк...
  • Шифровальщик атаковал немецкую компанию Software AG
  • Злоумышленники используют службу Windows Error Reporting для бесф...
  • Microsoft предупредила о вымогателях, которые выдают себя за МВД ...
  • Инфостилер Valak ворует информацию из почтовых систем Microsoft E...
  • GitLab обнаружил множество уязвимостей в исходном коде проектов с...
  • Хакеры используют службу WER в бесфайловых кибератаках
  • Ботнет HEH способен уничтожить все данные на IoT-девайсах

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Разное » Re: Помощь в скачивании платного файла
  • Взлом и безопасность / Разное » Помощь в скачивании платного файла
  • Разное / Куплю, приму в дар » куплю | ваш аккаунта | получение нового | описание внутри
  • Разное / Предложения работы » Специалиста
  • Downloads / Другое » Re: Нужна база емайл адресов юр. лиц
  • Downloads / Другое » Нужна база емайл адресов юр. лиц
  • Разное / Предложения работы » Нужен взлом mail и gmail почты
  • Взлом и безопасность / Разное » Re: Нужна помощь в скачивании файла
  • Взлом и безопасность / Разное » Нужна помощь в скачивании файла
  • Разное / Предложения работы » требуется взлом почт на постоянной основе

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}