Listview通过消息控制ITEM求助

低调的猪猪 2014-11-07 03:04:10
我想通过消息选中LISTView的某行,然后发出双击消息,现在选中已经可以了,就是后面的双击事件无效。请高手帮忙分析下哪里出错了。由于对API不怎么熟悉,代码网上找的。
procedure TForm1.SetItemSelected(nItemIndex: Integer;LstID,Wid:Thandle);//LstID是Listview handle Wid是Window Handle
var
LVI_1: TLVItemA;
pLVI_2: PLVItemA;
nRet: LongBool;
tagPId: DWORD;
tagPHandle: THandle;
tagHwnd: THandle;
lpNumOfBytesW: Cardinal;
pdr:pNMHDR;
myNMHDR:NMHDR;
begin
tagPId := 0;
tagPHandle := 0;
tagHwnd := 0;
lpNumOfBytesW := 0;
try
GetWindowThreadProcessId(Wid, @tagPId); // 取进程ID
tagPHandle := OpenProcess(
PROCESS_ALL_ACCESS, False, tagPId); // 获取进程句柄
except
CloseHandle(tagPHandle);
end;

try
// 向目标远程目标进程申请内存空间
pLVI_2 := VirtualAllocEx(
tagPHandle, nil, SizeOf(TLVItemA), MEM_COMMIT, PAGE_READWRITE);
Assert((pLVI_2 <> nil), '远程内存申请失败');
LVI_1.mask := LVIF_STATE;
LVI_1.iSubItem := 0;
LVI_1.state := LVIS_SELECTED or LVIS_FOCUSED;
LVI_1.stateMask := LVIS_SELECTED or LVIS_FOCUSED;

nRet := WriteProcessMemory(// 将本地进程中的结构写入到目标进程
tagPHandle, pLVI_2, @LVI_1, SizeOf(TLVItemA), lpNumOfBytesW);
Assert((nRet), '目标进程写入失败');

SendMessage(LstID, LVM_SETITEMSTATE, Integer(nItemIndex),
Integer(pLVI_2));//这上面的已经Ok了。。能成功选择自己设定的ITEM
lpNumOfBytesW:=0;
pdr := VirtualAllocEx(
tagPHandle, nil, SizeOf(myNMHDR), MEM_COMMIT, PAGE_READWRITE);
myNMHDR.code := NM_DBLCLK;
myNMHDR.hwndFrom :=Lstid;
myNMHDR.idfrom := GetWindowLong(LstID, GWL_ID);
VirtualProtectEx(tagPHandle, pdr, sizeof(myNMHDR), PAGE_READWRITE,lpNumOfBytesW);
nRet:=WriteProcessMemory(tagPHandle,pdr, @myNMHDR, SizeOF(myNMHDR),lpNumOfBytesW);//写入内存
Assert((nRet), '目标进程写入失败');
PostMessage(Wid, WM_NOTIFY, myNMHDR.idfrom, Integer(pdr));
except
VirtualFreeEx(tagPHandle, nil, SizeOf(PLVItem), MEM_FREE);
end;

CloseHandle(tagPHandle);
VirtualFreeEx(tagPHandle, nil, SizeOf(PLVItem), MEM_FREE);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
SetItemSelected(2,listview1.Handle,form1.Handle);

end;
...全文
364 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
低调的猪猪 2014-11-07
  • 打赏
  • 举报
回复
已经成功了。win7的问题。放XP上就Ok了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧