![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как получить handle контрола на чужей форме
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