选中另一个进程的syslistview32中的其中一项前面的checkbox!解决办法

选中另一个进程的syslistview32中的其中一项前面的checkbox!
情况是:调用外部程序,要选中这个程序的syslistview(listbox)里其中一项,但这个LISTBOX在它的每一项的开头都添加了一个checkbox,现在我想选中一项,应该怎么做?::SendMessage(hwnd, LVM_SETITEMSTATE, Index, (LPARAM)buffer)这个只能选中其中一项,不能单击checkbox。

------解决方案--------------------
如果是ListBox,我估计它的CheckBox的Create出来,然后设置为ListBox的子窗口的,因为ListBox本身不具有提供CheckBox的功能。

你可以尝试通过ListBox的窗口句柄然后调用GetWindow(GW_CHILD)的方法来获取子窗口句柄
------解决方案--------------------
bool SelectLvItemCheck(HWND Lv, int Index, BOOL Check)
{
bool result = false;
DWORD processId = NULL;
GetWindowThreadProcessId(Lv, &processId);
if (processId == NULL) return false;
HANDLE process = ::OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, processId);
if (process == NULL) return false;
PVOID buffer = VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
if (buffer != NULL)
{
LVITEM item;
item.mask = LVIF_STATE;
if (Check)
item.state = 0x0200;
else
item.state = 0x0100;
item.stateMask = LVIS_STATEIMAGEMASK;
WriteProcessMemory(process, buffer, &item, sizeof(LVITEM), NULL);
if (SendMessage(Lv, LVM_SETITEMSTATE, Index, (LPARAM)buffer) != 0) result = true;
VirtualFreeEx(process, buffer, sizeof(LVITEM), MEM_DECOMMIT);
}
CloseHandle(process);
return result;
}