我想从列表视图控件中select并突出显示一个项目,并使用下面的代码
#include <Windows.h> #include <commctrl.h> int main() { //Hardcoded Handle to the ListView Windows of Add Printer Dialog HWND hwndListView = (HWND)0x000206D6; DWORD dwProcessID; ::GetWindowThreadProcessId( hwndListView, &dwProcessID ); HANDLE process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, dwProcessID); 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); ::SendMessage(hwndListView, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi); VirtualFreeEx(process, _lvi, 0, MEM_RELEASE); }
我得到的结果是
而不是select和突出显示的项目
请让我知道什么可能会出错
有哪些进程可以将焦点设置在窗口上,以及在对话框处于活动状态时,选择ListView项目的应用程序不能满足这些限制。 例如,所关注的HWND必须附加到调用线程的消息队列中。 所以突出显示的应用程序将不得不在另一个应用程序的窗口调用SetFocus()
之前使用AttachThreadInput()
。