|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2006, 17:07 | #1 |
Регистрация: 06.11.2006
Сообщений: 5
|
как на счет поуправлять чужой программой?
Есть “чужая” программа, нужно с помощью программы на Delphi, влиять на интерфейс этой “чужой” программы, т. е. программно нажимать кнопки на ней, вводить и считывать текстовую информацию с полей типа Edit, также работать с другими компонентами “чужой” программы, можно ли это реализовать с помощью Delphi, используя какие-то API функции или др.
Я извиняюсь если такие темы уже обсуждались в форуме, я не смог найти. |
10.11.2006, 17:15 | #2 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,758
|
Api функции... на сайте есть литературы на эту тему.
|
10.11.2006, 18:07 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
|
10.11.2006, 18:37 | #4 |
Регистрация: 06.11.2006
Сообщений: 5
|
<Если Вы ещё не забанены то это не Ваша заслуга, а наша недоработка! >
Что это значит? За книжечку спасибо, будит чем заняться! Если не затруднит, подскажите нужные функции для моей цели, немножко срочный вопрос. Как например, найти хендл Edit поля в чужой проге, а потом воспользоваться им чтоб считать текст с этого поля? |
10.11.2006, 19:02 | #5 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
могу привести пример, как брать названия классов, строки полей из-под указателя мыши.... если надо - пиши. а если нет, то функции я тебе подскажу, но мозги ты себе попаришь!!!
Познавая других, мы познаем себя.
С'est la vie... |
10.11.2006, 19:17 | #6 |
Регистрация: 06.11.2006
Сообщений: 5
|
Примерчик конечно давай, я попробую его подресать под себя. И функции подкинь, может помогут. Спасибо!
|
10.11.2006, 19:31 | #7 | |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Цитата:
//Процедура вывода классов, текстов и кодов компонента и главного окна (Стоит на таймере, время - 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... |
|
10.11.2006, 19:52 | #8 |
Павел Сергеевич
Форумчанин
Регистрация: 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 - вы хотите чтоб у меня зрение вообще испортилось? :) |
13.11.2006, 16:57 | #9 |
Регистрация: 06.11.2006
Сообщений: 5
|
Окей! Все хорошо, все работает как и написано выше. За это спасибо! Теперь я знаю коды компонентов их классы, но как воздействовать на них, остается вопрос. Какое сообщение нужно послать Бутону (к примеру) с известным кодом чтоб с эмулировать его нажатие?
|
13.11.2006, 18:59 | #10 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Открой модуль Messages.pas: там написаны все возможные сообщения Windows.
И пользуйся все той же процедурой SendMessage.
Познавая других, мы познаем себя.
С'est la vie... Последний раз редактировалось SuperVisor; 13.11.2006 в 19:01. Причина: Добавления |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
заблуждения на счет программистов | 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 |