c++ - 从 ListView 中选择并突出显示项目

标签 c++ windows winapi visual-c++

我想从 ListView 控件中选择并突出显示一个项目,我正在使用以下代码

#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);
}

我得到的结果是

enter image description here

而不是项目被选中并突出显示

enter image description here

请告诉我可能出了什么问题

最佳答案

对于哪些进程可以将焦点设置在窗口上存在限制,并且当对话框处于事件状态时,选择 ListView 项目的应用可能不满足这些限制。例如,被聚焦的 HWND 必须附加到调用线程的消息队列。因此,在另一个应用程序的窗口上调用 SetFocus() 之前,突出显示应用程序必须使用 AttachThreadInput()

关于c++ - 从 ListView 中选择并突出显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18589921/

相关文章:

windows - 从 powershell 在批处理文件中传递参数

c# - 获取独占进程句柄

c++ - DeleteFile() 失败但文件存在(文件名很长)

c++ - 二叉搜索树崩溃

c++ - 我无法让我自己的静态库在我的项目中工作

windows - 任何显示运行线程详细信息的 Windows 工具?

windows - 从 Visual Studio 运行时,STARTUPINFO.wShowWindow 为 0

c++ - 如何将两组 4 条短裤加载到 XMM 寄存器中?

c++ - 循环依赖和函数

C++ 半透明窗口 SDL