|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.02.2011, 18:34 | #1 |
Регистрация: 28.02.2011
Сообщений: 3
|
значение из стороннего приложения
Здравствуйте!
Есть задача, нужно записать в переменную, число. Значение это нужно взять из одного из запущенных приложений, подскажите пожалуйста, как это сделать, если известен адрес значения. |
28.02.2011, 18:42 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
OpenProcess
ReadProcessMemory CloseHandle Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
28.02.2011, 21:25 | #3 |
Регистрация: 28.02.2011
Сообщений: 3
|
Спасибо. Задача частично решена:
const WindowTitle = 'Project1_1'; ZnachAdress = $0045CBE8; var Form1: TForm1; Wnd : THandle; ProcessId, ProcHandle, MainZnach : integer; rw : cardinal; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Wnd := FindWindow(nil,WindowTitle); GetWindowThreadProcessId(Wnd, @ProcessId); ProcHandle := OpenProcess(PROCESS_ALL_ACCESS,fals e,ProcessId); ReadProcessMemory(ProcHandle,ptr(Zn achAdress),@MainZnach,4,rw); Label1.caption := FloatToStr(MainZnach); Closehandle(ProcHandle); End end; end. Но теперь появился другой вопрос. WindowTitle = 'Project1_1'. но как быть если название окна программы постоянно меняется? вернее название программы в окне есть, но перед ним постоянно менятся значения. в этом случае нужно будет вызывать список всех запущенных процессов и выбирать нужный, либо же можно вобще не использовать название окна? |
28.02.2011, 22:10 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
может вам стоит привязатся к имени процесса?
или к классу окна?(а не его заголовку) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
01.03.2011, 00:04 | #5 |
Регистрация: 28.02.2011
Сообщений: 3
|
Пробую получить класс окна, т.к. предполагаю что как и имя заголовка будет изменятся и имя процесса. чтобы узнать класс окна пользую след.:
procedure TForm1.Timer1Timer(Sender: TObject); var nm:array [0..100] of char; begin GetClassName(WindowFromPoint(Mouse. CursorPos),Nm,sizeof(nm)); caption:=nm; end; Класс окна у нужного приложения не определяется. не определяется почему то только у него, со всеми остальными окнами работает. есть какой либо еще способ определить класс окна? P.S. Наверняка делаю что то не так, ибо не програмист, делфи держу в руках меньше недели, ранее если где то и писал то только какиенибуть скрипты, ну и когда то давно QBasic юзал... стала задача, решил автоматизировать некоторые процессы, пришлось взять в руки делфи. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Получение данных из TStringGrid стороннего приложения | BeerDrinker | Win Api | 9 | 31.01.2011 17:53 |
Защита стороннего приложения | Mifody | Общие вопросы Delphi | 1 | 25.03.2010 13:19 |
Работа с компонентами стороннего приложения | imprezident | Win Api | 1 | 30.05.2009 22:12 |
Как определить класс стороннего приложения. | Son | Win Api | 6 | 25.11.2008 11:52 |
Смена иконки стороннего приложения | Wiedzmin | Win Api | 2 | 01.05.2007 16:19 |