Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как получить handle контрола на чужей форме


Страницы:   1 2

Mell ©   (2004-07-21 13:54:00) 

как получить handle  контрола на чужей форме


Mell   (2004-07-21 16:27:00) [21]

а как найти контрол который имеет фокус?


Rouse_   (2004-07-21 15:50:00) [22]

SendMessage + EM_SETSEL + WM_COPY


Mell   (2004-07-21 15:36:00) [23]

и еще вопрос как скопировать текст с чужего ричедита


Mell   (2004-07-21 14:45:00) [24]

>>Rouse_
Чмок!!1


Rouse_   (2004-07-21 14:28:00) [25]

хм...

////////////////////////////////////////////////////////////////////////////////
//
//  Автор: Александр (Rouse_) Багель
//  © Fangorn Wizards Lab 1998 - 2002
//  16 октября 2002 18:21

//  Данный код приведен лишь для демонстрации
//  А простой вариант поиска Handle Ричедита выглядит так
//  var
//    Handle : HWND;
//  begin
//    Handle:= FindWindowEx(FindWindow(Название формы например 'Form1',nil), 0, Название элемента например 'Button1',  nil),  0, true);

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls;

type
 TMainForm = class(TForm)
   TreeView1: TTreeView;
   procedure FormCreate(Sender: TObject);
   procedure Sys_Windows_Tree(Node: TTreeNode; Handle: HWND);
 end;

var
 MainForm: TMainForm;

implementation

{$R *.DFM}

////////////////////////////////////////////////////////////////////////////////
//
//  Стартовая функция, запускаем рекуссию используя хэндл рабочего стола
//

procedure TMainForm.FormCreate(Sender: TObject);
var
 StartHandle : THandle;
begin
 //Если требуется найти только данные по одному приложению
 //замени 2 строки в функциях их закоментированными аналогами
 StartHandle := GetDeskTopWindow;
 //StartHandle := 67324;//FindWindow(PChar(Caption), nil);  //На примере Винампа
 Sys_Windows_Tree(nil, StartHandle);
end;

////////////////////////////////////////////////////////////////////////////////
//
//  Рекурсивная функция, строит дерево всех открытых окон, кнопок, едитов и т.д.
//  В качестве входных данных получает узел дерева и Хэндл окна
//

procedure TMainForm.Sys_Windows_Tree(Node: TTreeNode; Handle: HWND);
const
 MAX = 128;
var
 TmpArray  : array[0..MAX - 1] of Char;
 Result    : String;
begin
 //Запускаем цикл пока не закончатся окна
 while Handle <> 0 do
 begin
   //Получаем имя класса окна
   GetClassName(Handle, @TmpArray, MAX);
   Result := String(TmpArray);
   //Получаем текст (Его Caption) окна
   GetWindowText(Handle, @TmpArray, MAX);
   Result := Result + '(' + String(TmpArray) +
     '): Handle = '+ IntToStr(Handle);
   //В следующей процедуре, в скобках, добавляем результат
   //в дерево, получаем хэндл дочернего окна и с результатами
   //выполнения этих двух функций выполняем процедуру Sys_Windows_Tree
   Sys_Windows_Tree(TreeView1.Items.AddChild(Node, Result),
     GetWindow(Handle, GW_CHILD));
   //Получаем хэндл следующего (не дочернего) окна
   Handle := GetNextWindow(Handle, GW_HWNDNEXT);
   //Handle := 0;
 end;
end;

end.


Внук   (2004-07-21 14:26:00) [26]

И побольше, побольше :))


Mell   (2004-07-21 14:23:00) [27]

ну блин вы мне пример дайте


pasha_golub   (2004-07-21 14:14:00) [28]

VMcL ©   (21.07.04 14:09) [2]
Согласен.

EnumChildWindows + GetWindow с параметро GW_CHILD


Mell   (2004-07-21 14:10:00) [29]

А пример можеш дать?handle формы я знаю , мне нужно найти на форме richedit  или edit, ит...


VMcL   (2004-07-21 14:09:00) [30]

>>pasha_golub ©  (21.07.04 14:01) [1]

Контрола? Тогда наверное + FindWindowEx и иже с ним.


pasha_golub   (2004-07-21 14:01:00) [31]

FindWindow или EnumWindows


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо