1

外部リストビューでアイテムを選択しようとしましたが、複数の選択されたアイテムを受け入れるリストビューでのみ機能するようです:

HANDLE process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, 0xC30); 

LVITEM lvi;

LVITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); 

 lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.mask = LVIF_STATE;

 WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); 
 int abc = ::SendMessage((HWND)0x00080D6A, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi); 
 VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
4

1 に答える 1

1

あなたのコードは有効に見え、動作するはずです.私は自分のGUIアプリケーション自体で内部的にテストしたので、おそらく問題は実際のプロセスの外部からアクセスしようとしたことにあります. ListView の HWND をハードコーディングしていることに気付きました。また、メッセージを送信した後、すぐに仮想メモリを解放することにも注意してください。送信されたメッセージは (HWND が正しいと仮定して) ListView メッセージ ポンプにポストされることに注意してください。すぐには対処できない可能性があり、その頃には、LVITEM のメモリを解放している可能性が十分にあります。GUI内で内部的に試して、それが機能していることを確認してから、このアプローチに戻って適切なデバッグポイントを設定することをお勧めします(GUI内で、これが他の人のものである場合は、

于 2009-07-04T21:20:39.927 に答える