2

別のプログラムのリスト ビューで選択されている項目を選択できるようにしたい (そのコードにアクセスできない)。実際には、それは SysListView32 であり、これは同じだと思います。私はすでに次のコードを持っていますが、残念ながらコンパイルしても何もしないようです (ただし、SendMessage() は 1 を返します)。

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

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

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

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

4 に答える 4

0

メモリをコミットする前に、アドレス空間を予約する必要があります。MEM_COMMITに変更することで、両方を一度に行うことができますMEM_RESERVE|MEM_COMMIT

于 2009-06-24T06:11:02.050 に答える
0

行き詰まった場合は、AutoHotKey というオープン ソース プロジェクトがあり、リスト内のアイテムを簡単に選択できるスクリプトなどを作成できます。

于 2009-06-12T21:17:13.863 に答える
0

ターゲット プロセスのメモリにコピーされているソース LV_ITEM の残りのメンバーをどのように初期化していますか? ソース LV_ITEM の「マスク」メンバーに LVIF_STATE フラグを含めていますか? そうでない場合、ListView は、指定しようとしている「状態」と「状態マスク」の値を無視します。

于 2009-06-10T20:59:36.113 に答える