В этой статье подробно объясняется, как Delphi получает дескрипторы и отправляет сообщения в виде примеров. Конкретные инструкции по использованию следующие:
Найдите дескриптор другого окна:
handle := FindWindow(nil,PChar('Название окна'));//Находим дескриптор формы
Найдите подформы:
childHandle := FindWindowEx(handle,0,'класс подчиненной формы','заголовок подчиненной формы');
Существует также API для перечисления подформ.
EnumChildWindows (дескриптор основного тела, функция @callback, пользовательские параметры);
Чтобы использовать эту функцию, вам необходимо самостоятельно написать функцию обратного вызова, например:
функция EnumChildProc (ahWND: HWND; параметр: LPARAM): логическое значение; stdcall; sendmessage (дескриптор, сообщение, wl, rl)
модуль Unit1 использует Windows,Messages,Tlhelp32,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;type TForm1=class(TForm)procedure FormCreate(Sender: TObject) Private {Частные объявления} public {Публичные объявления}; конец; var Form1: TForm1;реализация{$R *.DFM}процедура TForm1.FormCreate(Отправитель: TObject);var a,b:PAnsiChar;h:HWND;beginh:= FindWindow(nil,'abc.txt - Notepad');h:= FindWindowEx(h,0,'edit', ноль );SendMessage(h,WM_SETTEXT,255,Integer(PChar('Я здесь, чтобы измерить')));ShowMessage( IntToStr(h));конец;
SendMessage(TreeView.Handle,TVM_SETBKCOLOR,0,RGB(255,0,0)); Установить цвет фона телевизора SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0); Нажмите левую кнопку мыши SendMessage(Button.Handle,WM_LBUTTONUP); , 0,0); Поднимите левую кнопку мыши SendMessage(Edit.Handle,WM_SETTEXT,255,Integer(PChar('abc'))); Передайте текст SendMessage(Edit.Handle,WM_Char,Wparam('Q'),2); SendMessage( Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1); Изменить стиль кнопки SendMessage(ComboBox.Handle,CB_SETDropPEDWIDTH,300,0 Изменить CBDownWidth);
WM_CUT, WM_COPY и WM_PASTE вырезание, копирование, вставка
Реализуйте любую комбинацию клавиш:
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0);keybd_event(ord('V') , MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0);keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
Описание SendMessageA: вызовите оконную функцию окна, чтобы отправить сообщение этому окну. Эта функция не возвращает значение, пока сообщение не будет обработано.
SendMessage содержит 4 параметра:
1. Hwnd 32-битный дескриптор окна Окно может быть любым типом экранного объекта, поскольку Win32 может поддерживать дескрипторы большинства визуальных объектов.
2. wMsg — это постоянное значение, используемое для различения других сообщений. Эти константы могут быть предопределенными константами в модулях Windows или настраиваемыми константами.
3. wParam обычно представляет собой постоянное значение, связанное с сообщением, или может быть дескриптором окна или элемента управления.
4. lParam обычно представляет собой указатель, указывающий на данные в памяти. Поскольку WParm, lParam и Pointer являются 32-битными, их можно конвертировать друг в друга.
Подробное описание функции wMsg:
★WM_Create создает окно.
★WM_DESTROY Отправляется при уничтожении окна.
★WM_MOVE Переместить окно
★WM_SIZE Изменение размера окна.
★WM_ACTIVATE Окно активируется или деактивируется.
★WM_SETFOCUS Окно получает фокус.
★WM_KILLFOCUS Окно теряет фокус.
★WM_ENABLE переводит окно в состояние «Включить».
★WM_SETREDRAW Установить, можно ли перерисовать окно.
★WM_SETTEXT Приложение отправляет это сообщение для установки текста окна.
★WM_GETTEXT Приложение отправляет это сообщение для копирования текста соответствующего окна в буфер.
★WM_GETTEXTLENGTH Получает длину текста, относящегося к окну (исключая нулевые символы).
★WM_PAINT просит окно перерисоваться.
★WM_CLOSE отправляет сигнал, когда окно или приложение необходимо закрыть.
★WM_QUERYENDSESSION Пользователь решает закрыть диалоговое окно или программа сама вызывает функцию ExitWindows.
★WM_QUIT используется для завершения выполнения программы.
★WM_QUERYOPEN Когда окно пользователя вернется к своему предыдущему размеру и положению, отправьте это сообщение на значок.
★WM_ERASEBKGND Когда необходимо стереть фон окна (например, когда окно меняет размер)
★WM_SYSCOLORCHANGE При изменении системного цвета отправить это сообщение всем окнам верхнего уровня.
★После сообщения WM_QUERYENDSESSION это сообщение отправляется приложению, чтобы уведомить его о завершении разговора.
★WM_SHOWWINDOW Это сообщение отправляется этому окну, когда окно скрыто или отображено.
★WM_ACTIVATEAPP отправляет приложению сообщение о том, какое окно активно, а какое неактивно.
★WM_FONTCHANGE Это сообщение отправляется во все окна верхнего уровня при изменении библиотеки ресурсов шрифтов системы.
★WM_TIMECHANGE Отправлять это сообщение всем окнам верхнего уровня при изменении системного времени.
★WM_CANCELMODE Отправьте это сообщение, чтобы отменить текущий режим (операцию)
★WM_SETCURSOR Если мышь заставляет курсор перемещаться в окне.
★WM_ENDSESSION Если в системном процессе возникают проблемы и ввод данных с помощью мыши не фиксируется, в окно отправляется сообщение.
★WM_MOUSEACTIVATE отправляет это сообщение в текущее окно, когда курсор находится в неактивном окне и пользователь нажимает кнопку мыши.
★WM_CHILDACTIVATE Отправлять это сообщение дочернему окну MDI, когда пользователь щелкает строку заголовка этого окна или когда окно активируется, перемещается или изменяется размер.
★WM_QUEUESYNC Это сообщение отправляется компьютерной программой обучения, а входное сообщение пользователя отделяется программой-перехватчиком WH_JOURNALPALYBACK.
★WM_GETMINMAXINFO Это сообщение отправляется окну, когда оно собирается изменить размер или положение.
★WM_PAINTICON Отправляется в свернутое окно, когда его значок собирается перерисоваться.
★WM_ICONERASEBKGND Это сообщение отправляется в свернутое окно только в том случае, если перед рисованием значка необходимо перерисовать его фон.
★WM_NEXTDLGCT★Отправьте это сообщение в диалоговое окно программы, чтобы изменить положение фокуса.
★WM_SPOLERSTATUS Это сообщение выдается каждый раз, когда задание добавляется или удаляется из очереди управления печатью.
★WM_DRAWITEM Отправляется при изменении внешнего вида кнопки, поля со списком, списка и меню.
★WM_MEASUREITEM При создании кнопки, поля со списком, списка, элемента управления списком или элемента меню.
★WM_VKEYTOITEM Это сообщение имеет стиль LBS_WANTKEYBOARDINPUT, выданный его владельцу в ответ на сообщение WM_KEYDOWN.
★WM_CHARTOITEM Это сообщение отправляется полем списка стиля LBS_WANTKEYBOARDINPUT его владельцу в ответ на сообщение WM_CHAR.
★WM_SETFONT При рисовании текста программа отправляет это сообщение, чтобы узнать цвет, который будет использоваться элементом управления.
★WM_GETFONT Приложение отправляет это сообщение, чтобы получить шрифт текста, нарисованного текущим элементом управления.
★WM_SETHOTKEY Приложение отправляет это сообщение, чтобы связать окно с горячей клавишей.
★WM_GETHOTKEY Приложение отправляет это сообщение, чтобы определить, связана ли горячая клавиша с окном.
★WM_QUERYDRAGICON Это сообщение отправляется в свернутое окно. Когда это окно собирается перетащить и в его классе не определен значок, приложение может вернуть значок или дескриптор курсора, когда система отображает этот значок или курсор. пользователь перетаскивает значок.
★WM_COMPAREITEM Отправьте это сообщение, чтобы определить относительное положение вновь добавленных элементов в поле со списком или в списке.
★WM_COMPACTING показывает, что памяти очень мало.
★WM_WINDOWPOSCHANGING Отправьте это сообщение функции setwindowpos или другим функциям управления окнами, когда размер и положение окна будут изменены.
★WM_WINDOWPOSCHANGED Отправьте это сообщение функции setwindowpos или другим функциям управления окнами, когда размер и положение окна были изменены.
★WM_POWER Это сообщение отправляется, когда система собирается войти в состояние паузы.
★WM_COPYDATA Это сообщение отправляется, когда одно приложение передает данные другому приложению.
★WM_CANCELJOURNA Когда пользователь отменяет состояние активации журнала программы, отправьте это сообщение в программу.
★WM_NOTIFY Когда произошло событие элемента управления или элементу управления необходимо получить некоторую информацию, это сообщение отправляется в его родительское окно.
★WM_INPUTLANGCHANGEREQUEST Когда пользователь выбирает язык ввода или изменяется горячая клавиша языка ввода.
★WM_INPUTLANGCHANGE Это сообщение отправляется в затронутое окно верхнего уровня, когда сцена платформы была изменена.
★WM_TCARD Это сообщение отправляется приложению, когда программа инициализирует процедуру справки Windows.
★WM_HELP Это сообщение показывает, что пользователь нажал F1. Если меню активировано, это сообщение будет отправлено в меню, связанное с этим окном. В противном случае оно будет отправлено в окно с фокусом. Если в данный момент фокус отсутствует. сообщение будет отправлено для текущего активного окна.
★WM_USERCHANGED Это сообщение отправляется во все окна после того, как пользователь вошел в систему или вышел из нее. Когда пользователь входит в систему или выходит из системы, система обновляет информацию о конкретных настройках пользователя. Система отправляет это сообщение немедленно, когда пользователь обновляет настройки.
★WM_NOTIFYFORMAT Общедоступные элементы управления, настраиваемые элементы управления и их родительские окна используют это сообщение, чтобы определить, использует ли элемент управления структуру ANSI или UNICODE.
функция EnumChildWindowsProc(hwnd, lparam: Integer): Boolean; var buffer: array[0..255] of char; start Result: = GetClassName(hwnd,buffer,256); if StrPas(Buffer)='Edit' then начать SendMessage (hwnd, WM_GETTEXT, 256, lparam Результат: = False end; конец; процедура TForm1.Button1Click(Sender: TObject); var hwnd: Integer; buffer: array[0..255] of char; Begin hwnd := FindWindow('CabinetWClass',nil); если hwnd<> 0, то начать EnumChildWindows (hwnd,@EnumChildWindowsProc,Longint(@buffer[0])); StrPas (буфер); конец;