[開発環境]Delphi7 Professional
[ O S ]WindowsXP Pro
いつもお世話になっております。
早速件名についてご教授願いたいのですが
下記のコーディングを行い他のプログラムのメモリを読みとろうとすると
ReadProcessMemoryを行うと0が返ってきました。
エラー内容をみると
「メモリ ロケーションへのアクセスが無効です。」となります。
で調べたのですが、このボタンを押す度にプロセスのハンドル(t_hPrs)が変動
します。おそらくはこのせいだと思うのですが。
またC++で同様の内容をコーディングすると正常に取得でき
プロセスのハンドル値も一定です。
procedure TForm1.Button1Click(Sender: TObject);
var
t_hWnd : HWND;
t_uPid : Cardinal;
t_hPrs : Cardinal;
mBase : Cardinal;
dwRMem : Cardinal;
t_Text : Pointer;
begin
t_Text := nil;
mBase := $04394551;
t_hWnd := FindWindow(nil,'TEST');
GetWindowThreadProcessId(t_hWnd,t_uPid);
t_hPrs := OpenProcess(PROCESS_ALL_ACCESS, FALSE, t_uPid);
ReadProcessMemory(t_hPrs,pointer(mBase),t_Text,1,dwRMem);
end;
> ReadProcessMemoryを行うと0が返ってきました。
t_Text = nil だからじゃねぇ?
記述していない部分で、メモリの確保かなんかしてるのけ?
>t_Text = nil だからじゃねぇ?
>記述していない部分で、メモリの確保かなんかしてるのけ?
t_Text = nil をコメントアウトすると 初期化されないので
ゴミデータが保持されたまま値が変わらずそのまま終了となります。
ReadProcessMemory(t_hPrs,pointer(mBase),t_Text,1,dwRMem);
Edit1.Text := InttoStr(GetLastError());
とすると、 998が返ってくるので調べると件名のエラーがでることまでは
わかりました。
t_Text = nil; のところを
GetMem(t_Text, 1); でメモリを確保すればいいのでは?
通りすがり様
そのとおりでございました。
GetMem(t_Text, 1);とすることで正常に取得できました。
は?様
おっしゃるとおりでございました。
まことに申し訳ありませんでした。
ツイート | ![]() |