Страница 2 из 3
.
Добавлено: 17 мар 2008, 13:26
BBB
Viktor Zull писал(а):Текст в этой метке может изменяться в процессе работы программы. Может быть любым. Я знаю что изначально при запуске программы текст в метке: Label1. Если я отредактирую hex редактором exe - поставлю свой текст, то сначала это будет мой текст, а затем он будет изменен. Верно?
Верно .
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 13:45
Viktor Zull
А как насчет изменения значения в процессе работы программы? Можно в памяти найти ячейку где хранится значение метки и изменить его?
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 15:13
MOTOCoder
Да вроде бы можно сдампить память процесса, найти текст в буфере, вычислить смещение и записать данные, но на практике такого не делал.
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 15:44
Viktor Zull
Интересно как "сдампить память процесса". Может кто-нибудь подскажет как это сделать. Я такими вещами еще не занимался, даже затрудняюсь с чего начать.
Может есть ссылки или примеры.
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 16:45
MOTOCoder
Вообще идея такая(это только идея, я её не проверял):
-Запустить программу на выполнение и получить указатель на процесс
-Получить дамп памяти процесса(короче записать память процесса в буфер) с помощью ReadProcessMemory
-Просканировать буфер на наличие нужного слова(нужной последовательности байтов) и вычислить позицию данного блока в буфере
-Записать измененные данные с помощью WriteProcessMemory
В принципе ничего сложного, ноработоспособность не гарантирую-сам не делал
А вот на счет конкретных примеров-ничего вразумительного не нашел.
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 18:02
Viktor Zull
Как получить указатель на процесс? Через FindWindow через Handle можно?
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 18:09
Viktor Zull
Чтобы получить указатель на процесс нужно использовать функцию GetWindowThreadProcessId?
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 18:33
MOTOCoder
Указатель не проблема, его можно получить при запуске приложения, вот как получить размер памяти процесса и базовый адрес - вот это вопрос.
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 19:09
Viktor Zull
Мне при запуске моей программы нужно получать указатель чужой программы? Повашему это не сложно? Подскажите как?
Почему именно при запуске?
Re: Функция FindWindowEx не может найти Label
Добавлено: 17 мар 2008, 20:32
MOTOCoder
Нет, я имел в виду то, что вы сами запускаете чужую программу.
Или нужно работать с уже запущенной программой?
Вообще я имел в виду такой метод:
[syntax='Delphi']
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
implementation
{$R *.dfm}
function WinExecAndWait32(FileName: String;
Visibility: integer): cardinal;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
setcurrentdir(workdir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName,
nil,
nil,
false,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then Result :=1
else begin
end;
//В ProcessInfo.hProcess будем иметь указатель на процесс
end;
end.
[/syntax]