■MFC相談室 mfc21d.dll■
■ このスレッドは過去ログ倉庫に格納されています
0089デフォルトの名無しさん
2009/09/17(木) 00:48:35ぐぐったらVirtualAllocExとLVM_GETITEMTEXTメッセージを組み合わせれば良いとわかったので、以下を繰り返して取得しています。
相手ウィンドウのHWNDからpidを求め、PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITEでOpenProcessする
↓
VirtualAllocExで、アドレス指定はNULL、MEM_COMMIT、PAGE_READWRITE、サイズは文字列バッファ(64バイト固定長)+sizeof(LVITEM)ぶんのメモリを確保
↓
ローカル変数でLVITEM変数を宣言、ゼロクリアした後以下を代入
iItem,iSubItem←必要なマス目の座標(いつも同じ場所)
pszText←上記確保したメモリ+sizeof(LVITEM)
cchTextMax←64
↓
そのLVITEM変数のポインタから確保した先頭アドレスにWriteProcessMemoryする
↓
LVM_GETITEMTEXTをSendMessageする
↓
確保したメモリの先頭+sizeof(LVITEM)を64バイトReadProcessMemoryして文字列ゲット
↓
確保した先頭アドレスを指定、MEM_RELEASEにてVirtualFreeExする
↓
プロセスハンドルをCloseHandleする
実際、おおむねこれで取得できているのですが、数十回ほど取得を繰り返すと相手側が「Visual C++ RunTime Error! Abnormal Program Termination」と表示して落ちてしまいます。取得するたびSleep(100)などしてみましたが駄目でした。どなたか解決策をご存知ないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています