请问VC如何控制另一个软件中CListCtrl中CheckBox的选中和不选
一个软件中的CListCtrl有CheckBox属性,请问有什么方法可以在另一个软件中设置这个的CheckBox状态
以下是我的代码,运行以后CListCtrl中前面的复选框都找不到了
CWnd *pWnd=FindWindow(NULL,"Login");
if (pWnd==NULL) return;
CListCtrl *pList=(CListCtrl*)pWnd->GetDlgItem(0x3e8);
int Len=pList->GetItemCount();
for (int i=0;i<Len;i++)
{
BOOL Flag=pList->GetCheck(i);
pList->SetCheck(i,TRUE);
Flag=pList->GetCheck(i);
}
或者
HWND hMainWnd=::FindWindow(NULL,"Login");
if (hMainWnd==NULL) return;
HWND hListWnd=::GetDlgItem(hMainWnd,0x3e8);
int Len=::SendMessage(hListWnd,LVM_GETITEMCOUNT,0,0);
//后面该怎么做
... hook 怎么没人知道呢 windows 不支持类指针跨进程引用吧。你这样pList是一个无效不安全的类。在同一个进程中才可以这样引用。不同进程时只能用SendMessage、PostMessage 等消息函数来执行复选框取消与选中的操作。 #define ListView_SetItemState(hwndLV, i, data, mask) \
{ LV_ITEM _ms_lvi;\
_ms_lvi.stateMask = mask;\
_ms_lvi.state = data;\
SNDMSG((hwndLV), LVM_SETITEMSTATE, (WPARAM)i, (LPARAM)(LV_ITEM FAR *)&_ms_lvi);\
}
#define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
#define ListView_SetCheckState(hwndLV, i, fCheck) \
ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
//设置复选框
ListView_SetCheckState(hListWnd, 列表索引, true); 用FindWindows找到这个窗体,再进行下一步操作 4楼的不行啊,跟我的代码运行结果一样,运行后连复选框都找不到了
看下面图片的上面一个
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_702060H23JRH.gif
(原文件名:Snap1.gif) 感谢4楼的提示,虽然4楼的代码不能直接用,但却给了我一种方法,使我实现了这一功能,再次谢谢
页:
[1]