![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Надпись в чужом процессе [D7, XP]
kester © (2010-12-29 18:29:00)Здравствуйте.
Вопрос вот в чем: в чужом приложении периодически появляется строка с текстом (непонятно что это за компонент). Текст строки известен. Необходимо проверять наличие этой строки. Надо как то искать в памяти процесса? Если да то как?
Спасибо.
Студент (2011-01-09 06:26:00) [1]А вы пробовали смотреть чужое окно через Spy++ и аналогами? Уверен в подавляющем количестве случаев достаточно GetWindowText...
> А если такая строка (в смысле значение) висит в памяти как
> константа?
Разумеется висит...) Куда ж она денется, если "периодически появляется"?)
Разве что из файла берёт каждый раз...
HF-Trade (2011-01-03 06:22:00) [2]Как то так...
Var
H: THandle;
pid, RetVal, pHandle: DWord;
MSG: Array[0..1023] of WideChar;
Begin
H := FindWindow('Имя чужого окна', nil);
GetWindowThreadProcessId(H, pid);
pHandle := OpenProcess(PROCESS_ALL_ACCESS, False, pid);
ReadProcessMemory(pHandle, Ptr($000000{Адрес из артмани}) ,@MSG, 4{Кол-во байт}, RetVal);
Stroka := MSG;
Amoeba_ (2010-12-30 18:49:00) [3]
> Rак мне определить по каким адресам прогонять цикл?
Да ни как.
Ответа на вопрос нет и не может быть.
Сергей М. (2010-12-30 15:35:00) [4]
> В смысле ой?
Ну не надо значит не надо, я же не возражаю)
kester (2010-12-30 15:19:00) [5]Ну я имел ввиду то, что после того как она первый раз появилась, больше ничего делать не надо. В смысле ой?
12 (2010-12-30 15:19:00) [6]посмотрите уже в гугл
сам никогда не занимался, правда, подобным -
а набрав много чего получил, с кодами
http://www.google.ru/webhp?rls=ig#num=20&hl=ru&newwindow=1&rls=ig&biw=1280&bih=814&q=writeprocessmemory+delphi+%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=c7a3af04a750e359
Сергей М. (2010-12-30 15:01:00) [7]
> абсолютно не парит
Ну тады ой)
kester (2010-12-30 14:58:00) [8]
> Или тебя не парит необходимость обнаружения отсутствия строки
> ?
Да, абсолютно не парит. После обнаружения присутствия и сигнала о нем, программа завершает работу.
Сергей М. (2010-12-30 14:55:00) [9]> строка появляется на продолжительное время
А пропадает, к примеру, на доли миллисекунды.
Или тебя не парит необходимость обнаружения отсутствия строки ?
kester (2010-12-30 14:48:00) [10]
> Если факт появления строки нужно обнаружить мгновенно, то
> глупее затеи не придумать.
Нет, не мгновенно, строка появляется на продолжительное время. Проверку планируется сделать с интервалом раз в минуту. Просто поставлю проверку на таймер.
Сергей М. (2010-12-30 14:40:00) [11]> мне просто нужно повторить процедуру артмани
Если факт появления строки нужно обнаружить мгновенно, то глупее затеи не придумать.
kester (2010-12-30 14:36:00) [12]Rак мне определить по каким адресам прогонять цикл? Какие параметры должны быть в ReadProcessMemory?
kester (2010-12-30 12:38:00) [13]
> А если такая строка (в смысле значение) висит в памяти как
> константа? Ведь она откуда то берется? И чего тогда там
> искать? А если такое сочетание 5-и байт случайно встретится
> в памяти? Мало ли чего там валяется?
Через ArtMoney проверил. Все получается, если строка висит - то артмани находит. Строки нет - не находит. Выходит мне просто нужно повторить процедуру артмани.
Dennis I. Komarov (2010-12-30 12:32:00) [14]А если такая строка (в смысле значение) висит в памяти как константа? Ведь она откуда то берется? И чего тогда там искать? А если такое сочетание 5-и байт случайно встретится в памяти? Мало ли чего там валяется?
12 (2010-12-30 12:09:00) [15]а она там точно есть?
посмотрите ArtMoney(что это игровая приблуда - внимания не обращать), читает процессы и ищет байты. Может и не найдется такой строки
kester (2010-12-30 12:04:00) [16]
> Ты вопросы пришел задавать, код просить или работу предлагать?
> Ты уж определись...
Просто очень нужно решить такую задачу. Я пробую сам делать, но мне немного не разобраться, вот и прошу помощи у вас. Просто немного обидело то, что отправили сразу в гугл и все. Естественно, что я сначала поисковики посмотрел. Там есть примеры, да, но немного не то, что мне нужно, тем более я недостаточно хорошо соображаю, чтобы с ними разобраться. Тем более в последние 3 года я очень редко прибегаю к программированию, а сейчас вот опять начал и вспоминается очень с трудом и не все.
> Каждое подчеркнутое требует детального уточнения...
Нужно проверить есть ли в памяти процесса данная строка или нет. Я понимаю, что нужно написать какой то цикл, который последовательно байтам будет проверять содержимое памяти (видимо, с помощью ReadProcessMemory). Если комбинация из 5 байт совпадает с нужными, то 1. Если нигде такой комбинации не нашлось в памяти процесса, то 0. Я мыслю правильно или нет?
Если правильно, то как мне определить по каким адресам прогонять цикл? Какие параметры должны быть в ReadProcessMemory?
Если неправильно, поправьте пожалуйста.
Заранее спасибо!
Dennis I. Komarov (2010-12-30 09:00:00) [17]
> а код функции не могут привести даже за бабло,
Ты вопросы пришел задавать, код просить или работу предлагать? Ты уж определись...
Да, и еще. Ты [0] перечетай и подумай, как человек не видя (зная) чего там где творится может ответить?
> в чужом приложении периодическипоявляется строка с текстом
> ( непонятно что это за компонент). Текст строки известен.
> Необходимо проверятьналичие этой строки. Надо как то искать
> в памяти процесса? Если да то как?
Каждое подчеркнутое требует детального уточнения...
kester (2010-12-30 08:04:00) [18]Не понимаю смысла в форуме "Начинающим" если тут начинающему в качестве совета кидают ссылку на гугл, а код функции не могут привести даже за бабло, хотя я думаю она не очень сложная, вряд ли больше строчек 30.
Германн (2010-12-30 01:49:00) [19]
> По поводу ссылки спасибо, очень помогла.
Если "очень помогла", то зачем платить деньги за "рабочий код"?
А в целом ты не по адресу, имхо.
Тебе нужно обратиться либо сюда:
http://www.delphikingdom.com/notice/putinfo.asp?CategoryID=7
либо сюда:
http://forum.sources.ru/index.php?showforum=149
kester (2010-12-30 01:04:00) [20]Нужен код, который будет в памяти процесса (хэндл окна процесса известен) искать определенную строку (5 известных символов). Просто проверять на наличие строки, 0 или 1, никаких адресов и тд. Очень нужно, за рабочий код отблагодарю материально.
По поводу ссылки спасибо, очень помогла.