Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
29th
Ноя
Управление чужой программой
Posted by maloy under Delphi, Архив
Gigan
Есть “чужая” программа, нужно с помощью программы на Delphi, влиять на интерфейс этой “чужой” программы, т. е. программно нажимать кнопки на ней, вводить и считывать текстовую информацию с полей типа Edit, также работать с другими компонентами “чужой” программы, можно ли это реализовать с помощью Delphi, используя какие-то API функции или др.
SuperVisor
пример, как брать названия классов, строки полей из-под указателя мыши….
И функции…
//(Стоит на таймере, время - 100 мс)//Процедура вывода классов, текстов и кодов компонента и главного окна
procedure TMain.GetClassTimerTimer(Sender: TObject);
var
CurP: TPoint;
ClName: array [0..255] of Char;
Wind, PWind: Hwnd;
begin
//Очистка массива и Поиск окна под кусором
ClName:='';
GetCursorPos(CurP);
wind:=WindowFromPoint(CurP);
//Берем класс и текст компонента под курсором
GetClassNameA(wind,ClName,255);
WClass.Text:=ClName; //WClass - Отображает класс окна под курсором
ClName:='';
GetWindowTextA(wind,clName,255);
WText.Text:=ClName; //WText - Отображает текст в окне под курсором
ClName:='';
//Берем класс и текст главного окна компонента
Pwind:=GetMainWindow(Wind);
GetClassNameA(Pwind,ClName,255);
PClass.Text:=ClName; //PClass - Отображает класс родительского окна
ClName:='';
GetWindowTextA(Pwind,clName,255);
PText.Text:=ClName; //PText - Отображает текст родительского окна
ClName:='';
//Выводим Коды окон в HEX
Window.Text:=integerToHexString(wind);
PWindow.Text:=integerToHexString(Pw ind);
end;
//Получение истинного родителя окна.
function TMain.GetMainWindow(Window: Hwnd) : HWnd;
begin
Result:=Window;
while GetParent(Result)<>0 do
Result:=GetParent(Result);
end;
Скорее всего такая функция есть, но однажды написав свою я пользуюсь ей:
function IntegerToHexString(const Int: Integer) : string;
var
Val, Buf: integer;
function Cs(const Num: Integer) : string;
begin
case Num of
0..9: Result:=chr(48+Num);
10: Result:='A';
11: Result:='B';
12: Result:='C';
13: Result:='D';
14: Result:='E';
15: Result:='F';
else Raise EInvalidCast.Create('Can''t Convert Char');
end;
end;
begin
Result:='';
val:=int;
Buf:=val mod 16;
Result:=Cs(Buf)+Result;
val:=val div 16;
repeat
Result:=Cs(val mod 16)+Result;
val:=val div 16;
until val<=0;
end;
EnumWindows(@Procedure(h: HWND),0) - поиск окон. (@Procedure(h: HWND) - указатель на процедуру обработки при нахождении.
FindWindow(Class, WindowName):HWND; вместо параметров можно ставить nil, тогда будет искать все.
тема на форуме от 2006 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)