一度に1つだけ選択した項目を可能にするリストビューで項目を選択する方法

StackOverflow https://stackoverflow.com/questions/1081979

  •  22-08-2019
  •  | 
  •  

質問

私は、外部リストビューの項目を選択しようとしてきたが、それだけで複数選択した項目を受け入れるリストビューで動作するようです。

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);
役に立ちましたか?

解決

あなたのコードが有効になりますし、動作するはずです、私は私自身のGUIアプリケーション自体の内部でそれをテストしてみたので、おそらく問題は、実際のプロセスの外部からアクセスするための試みです。私はあなたがリストビューのためのHWNDをハードコーディングされていることに気づきます。また、私はあなたがすぐにメッセージを送信した後に仮想メモリを解放することに注意してくださいます。送信されたメッセージは、リストビューのメッセージポンプに(HWNDが正しいと仮定して)掲載される予定であることを覚えておいてください。それはすぐに世話をすることはできませんし、それがある時点で、あなたはすでにLVITEMのメモリをリリースしたまともなチャンスがあります。作るために(これは他の誰かのであればGUI内、リストビューを使用して独自の簡単なダイアログを作る)作業、その後、私は戻って、このアプローチに行くと適切なデバッグポイントを設定することをお勧めすることをあなたは持っていることを確認し、GUI内部でそれを試してみてくださいメッセージは、メモリが有効であることを適切に受信し、されていることを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top