2009-07-04 25 views
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); 

答えて

1

あなたのコードは有効と思われ、動作するはずです。自分のGUIアプリケーション自体で内部的にテストしました。実際のプロセスの外部からアクセスしようとしている可能性があります。 ListViewのハードウェアコードをハードコードしていることがわかります。また、私はメッセージを送信した後すぐに仮想メモリを解放するという事実に注意しています。送信されたメッセージは、ListViewメッセージポンプに(HWNDが正しいと仮定して)ポストされることに注意してください。それはすぐに世話をすることはできませんし、その時までにLVITEMのメモリを解放したことは間違いありません。 GUI内で内部的に試してみましょう。そうすれば、このアプローチに戻り、適切なデバッグポイントを設定することをお勧めします(GUI内で、これが他の人の場合は、listViewを使って簡単なダイアログを作成します)。メッセージが適切に受信され、メモリが有効であることを確認してください。

関連する問題