求救:怎么模拟向其它进程的TreeView指定节点发送鼠标双击消息? 怎么模拟向其它进程的TreeView指定节点发送鼠标双击消息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 发双击你要达到什么目的?可以发其它的来替代,TVN_SELCHANGED 。TVN_ITEMEXPANDED。TVN_ITEMEXPANDING。TVN_SELCHANGING 发双击消息直接打开另外一个窗体,不需要用鼠标去双击树的节点TVN_SELCHANGED都试过了,好象不行 查了MSDN,好象有一个NM_DBLCLK的,没有给出怎么用,试着按下面写了一下,但好象也不行 NMHDR pnmh; pnmh.hwndFrom=parent_hwnd;//控件所以窗体句柄 pnmh.idFrom=idCtrl;//idCtrl是控件ID=2006 pnmh.code=NM_DBLCLK; ::SendDlgItemMessage(parent_hwnd,2006,WM_NOTIFY,(WPARAM)NodeHTreeItem,(LPARAM)&pnmh);请高手指正!!不胜感激!!! NMHDR pnmh; pnmh.hwndFrom=m_tree.GetSafeHwnd();//控件所以窗体句柄 pnmh.idFrom=IDC_TREE1;//idCtrl是控件ID=2006 pnmh.code=NM_DBLCLK; SendMessage(WM_NOTIFY,(WPARAM)IDC_TREE1,(LPARAM)&pnmh); 老大,不行啊,我是先用SendMessage试了,再用SendDlgItemMessage试的我这个程序的目的是给一个有树型控件的程序写一个辅助程序,在树型控件看不到的情况下从这个辅助程序发消息到树型控件,模拟鼠标双击节点的事件,让它打开一个窗体 1。4楼的没问题,我添加了NM_DBLCLK响应函数试了的,没问题,可以跟到响应函数中,看你怎么处理了。2. 你这样写很绕,把双击那部分的代码提出来,单独封一个函数,可以在这里调用,也可以在双击时调用。另,我用SendDlgItemMessage发TVM_ 消息成功了的,可是NM_ 都没成功,不知有哪位仁兄可以不吝赐教 4楼代码那是在自己的程序空间里,在程序里自己发消息给自己,我没有试,应该是可以的但是我现在不是这样子的,控件窗体句柄是用FindWindow找到的,树型控件ID是用spy++查看到的,我现在就是不要去用鼠标双击节点,而是从我的辅助程序里发消息给另外程序的树型节点,实现鼠标的双击功能 已经注入到对方地址空间,其它问题都已经解决,现在就是不知道怎么模拟对树型控件指定节点发鼠标双击消息,我不想用发WM_LBUTTONDOWN WM_LBUTTONUP来模拟,不知哪位兄台赐教一二,谢谢了!!! 我觉得8楼有道理,当你向其他进程发送TVN_XXX消息时,要把TVITEM结构写入到远程进程地址。下面是一个实例:hwnd=FindWindow("#32770","Windows 任务管理器"); hwnd=FindWindowEx(hwnd,0,"#32770",0); hwnd=FindWindowEx(hwnd,0,"SysListView32",0); if (!hwnd) MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL); else { GetWindowThreadProcessId(hwnd, &PID); hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID); if (!hProcess) MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL); else { plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); p_MyItemText=(char*)VirtualAllocEx(hProcess, NULL, 12, MEM_COMMIT, PAGE_READWRITE); if ((!plvitem)||(!p_MyItemText)) MessageBox(NULL,"无法分配内存!","错误!",NULL); else { MessageBox(NULL,"本演示程序将更改TaskManager中第6个项目中第1列的内容。","提示",NULL); iItem=5;//5在这里是第六个(从零开始) lvitem.iSubItem=0;//同上 lvitem.pszText=p_MyItemText; WriteProcessMemory(hProcess, p_MyItemText, &str_MyItemText, 12, NULL); WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL); //向目标程序发送LVM_SETITEMTEXT消息 SendMessage(hwnd, LVM_SETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem); } } } //释放内存 CloseHandle(hwnd); CloseHandle(hProcess); VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE); VirtualFreeEx(hProcess, p_MyItemText, 0, MEM_RELEASE); 非常感谢各位高手的帮助!!但还是没有回答我的问题我的程序已经进入到目标程序的地址空间,不需要象10楼的那样操作了,也能直接用宏TreeView_GetItem TreeView_Expand等来对目标程序的树型控件进行操作,可以对目标树型控件进行任何操作(添,删,改,查节点),只是我现在想模拟一下对指定节点的鼠标双击,就不知道怎么做了.急啊!!!! tsinghuait兄 请问你是怎么解决的,望能指点 求教:根据XML数据生成界面 使用PE注入技术 可否将菜单栏(文件,编辑)用图标来表示? 请教高手关于VC中用于是视频截取以及保存截图的的方法 笔试的一些题目,大家看看 已经得到了bmp文件,指定位置,如何在此BMP文件指定上画上鼠标。谢谢 简单问题 一本好书,但我没有!!求救!! 为什么"Update表Set字段=值"中,值只有为数字时才能更新成功? VC++ 的使用故障??? VC2005的控件怎样用啊? MFC(如何将视图窗口中的自绘图,以图片方式保存最好是.BMP格式!) 在线等,立马给分!
TVN_SELCHANGED 。TVN_ITEMEXPANDED。TVN_ITEMEXPANDING。TVN_SELCHANGING
TVN_SELCHANGED都试过了,好象不行
NMHDR pnmh;
pnmh.hwndFrom=parent_hwnd;//控件所以窗体句柄
pnmh.idFrom=idCtrl;//idCtrl是控件ID=2006
pnmh.code=NM_DBLCLK;
::SendDlgItemMessage(parent_hwnd,2006,WM_NOTIFY,(WPARAM)NodeHTreeItem,(LPARAM)&pnmh);请高手指正!!不胜感激!!!
pnmh.hwndFrom=m_tree.GetSafeHwnd();//控件所以窗体句柄
pnmh.idFrom=IDC_TREE1;//idCtrl是控件ID=2006
pnmh.code=NM_DBLCLK;
SendMessage(WM_NOTIFY,(WPARAM)IDC_TREE1,(LPARAM)&pnmh);
我这个程序的目的是给一个有树型控件的程序写一个辅助程序,在树型控件看不到的情况下从这个辅助程序发消息到树型控件,模拟鼠标双击节点的事件,让它打开一个窗体
2. 你这样写很绕,把双击那部分的代码提出来,单独封一个函数,可以在这里调用,也可以在双击时调用。另,我用SendDlgItemMessage发TVM_ 消息成功了的,可是NM_ 都没成功,不知有哪位仁兄可以不吝赐教
但是我现在不是这样子的,控件窗体句柄是用FindWindow找到的,树型控件ID是用spy++查看到的,我现在就是不要去用鼠标双击节点,而是从我的辅助程序里发消息给另外程序的树型节点,实现鼠标的双击功能
不知哪位兄台赐教一二,谢谢了!!!
下面是一个实例:hwnd=FindWindow("#32770","Windows 任务管理器");
hwnd=FindWindowEx(hwnd,0,"#32770",0);
hwnd=FindWindowEx(hwnd,0,"SysListView32",0); if (!hwnd)
MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);
else
{
GetWindowThreadProcessId(hwnd, &PID);
hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
if (!hProcess)
MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);
else
{
plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
p_MyItemText=(char*)VirtualAllocEx(hProcess, NULL, 12, MEM_COMMIT, PAGE_READWRITE); if ((!plvitem)||(!p_MyItemText))
MessageBox(NULL,"无法分配内存!","错误!",NULL);
else
{
MessageBox(NULL,"本演示程序将更改TaskManager中第6个项目中第1列的内容。","提示",NULL);
iItem=5;//5在这里是第六个(从零开始)
lvitem.iSubItem=0;//同上
lvitem.pszText=p_MyItemText;
WriteProcessMemory(hProcess, p_MyItemText, &str_MyItemText, 12, NULL);
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
//向目标程序发送LVM_SETITEMTEXT消息
SendMessage(hwnd, LVM_SETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
}
}
}
//释放内存
CloseHandle(hwnd);
CloseHandle(hProcess);
VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, p_MyItemText, 0, MEM_RELEASE);
但还是没有回答我的问题
我的程序已经进入到目标程序的地址空间,不需要象10楼的那样操作了,也能直接用宏TreeView_GetItem TreeView_Expand等来对目标程序的树型控件进行操作,可以对目标树型控件进行任何操作(添,删,改,查节点),只是我现在想模拟一下对指定节点的鼠标双击,就不知道怎么做了.急啊!!!!