Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2006, 17:07   #1
Gigan
 
Регистрация: 06.11.2006
Сообщений: 5
Хорошо как на счет поуправлять чужой программой?

Есть “чужая” программа, нужно с помощью программы на Delphi, влиять на интерфейс этой “чужой” программы, т. е. программно нажимать кнопки на ней, вводить и считывать текстовую информацию с полей типа Edit, также работать с другими компонентами “чужой” программы, можно ли это реализовать с помощью Delphi, используя какие-то API функции или др.
Я извиняюсь если такие темы уже обсуждались в форуме, я не смог найти.
Gigan вне форума Ответить с цитированием
Старый 10.11.2006, 17:15   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Api функции... на сайте есть литературы на эту тему.
Alar вне форума Ответить с цитированием
Старый 10.11.2006, 18:07   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

http://www.programmersclub.ru/files/win32_api.rar
zetrix вне форума Ответить с цитированием
Старый 10.11.2006, 18:37   #4
Gigan
 
Регистрация: 06.11.2006
Сообщений: 5
По умолчанию

<Если Вы ещё не забанены то это не Ваша заслуга, а наша недоработка! >

Что это значит?


За книжечку спасибо, будит чем заняться!
Если не затруднит, подскажите нужные функции для моей цели, немножко срочный вопрос.

Как например, найти хендл Edit поля в чужой проге, а потом воспользоваться им чтоб считать текст с этого поля?
Gigan вне форума Ответить с цитированием
Старый 10.11.2006, 19:02   #5
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

могу привести пример, как брать названия классов, строки полей из-под указателя мыши.... если надо - пиши. а если нет, то функции я тебе подскажу, но мозги ты себе попаришь!!!
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 10.11.2006, 19:17   #6
Gigan
 
Регистрация: 06.11.2006
Сообщений: 5
По умолчанию

Примерчик конечно давай, я попробую его подресать под себя. И функции подкинь, может помогут. Спасибо!
Gigan вне форума Ответить с цитированием
Старый 10.11.2006, 19:31   #7
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Цитата:
Сообщение от Gigan Посмотреть сообщение
Примерчик конечно давай, я попробую его подресать под себя. И функции подкинь, может помогут. Спасибо!
Держи значить:

//Процедура вывода классов, текстов и кодов компонента и главного окна (Стоит на таймере, время - 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;

Если все сделал правильно, получишь рабочую версию.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 10.11.2006, 19:52   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

И функции...
SendMessage(h:HWND; WM_SETTEXT,O, lparam(LPCTSTR(''))); - Послать сообщение на смену заголовка,
EnumWindows(@Procedure(h: HWND),0) - поиск окон. (@Procedure(h: HWND) - указатель на процедуру обработки при нахождении.
FindWindow(Class, WindowName):HWND; вместо параметров можно ставить nil, тогда будет искать все.
потом еще напишу... Или еще кто-нибудь напишет... Просто где-то было, не могу найти... Точто помню - написал...
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось zetrix; 13.11.2006 в 19:12. Причина: SIZE=1 - вы хотите чтоб у меня зрение вообще испортилось? :)
SuperVisor вне форума Ответить с цитированием
Старый 13.11.2006, 16:57   #9
Gigan
 
Регистрация: 06.11.2006
Сообщений: 5
По умолчанию

Окей! Все хорошо, все работает как и написано выше. За это спасибо! Теперь я знаю коды компонентов их классы, но как воздействовать на них, остается вопрос. Какое сообщение нужно послать Бутону (к примеру) с известным кодом чтоб с эмулировать его нажатие?
Gigan вне форума Ответить с цитированием
Старый 13.11.2006, 18:59   #10
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Открой модуль Messages.pas: там написаны все возможные сообщения Windows.
И пользуйся все той же процедурой SendMessage.
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 13.11.2006 в 19:01. Причина: Добавления
SuperVisor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заблуждения на счет программистов Crazy_Wolfy Свободное общение 20 25.07.2008 11:39
Управление чужой программой через WEB. MethSpeed Безопасность, Шифрование 9 20.07.2008 14:45
подскажите на счет факториала Lindemm Помощь студентам 4 26.03.2008 21:47
На счет фигни в гостевой sb_centr PHP 2 11.05.2007 20:01