他プロセスのリストコントロールに表示されている数値を監視するプログラムを作ってます。

ぐぐったら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)などしてみましたが駄目でした。どなたか解決策をご存知ないでしょうか?