如何跨进程对SysTreeView32控件节点模拟双击的

ckillcn 2009-04-18 12:42:41
取节点坐标->然后移鼠标过去->双击 此方法已实现!

向tree控件的某节点位置发向两次如下的消息已过无效
::SendMessage(GetParent(hTreeWnd), WM_LBUTTONDOWN, 0, (LPARAM)MAKELONG(pt.y ,pt.x ));
::SendMessage(GetParent(hTreeWnd), WM_LBUTTONUP, 0, (LPARAM)MAKELONG(pt.y ,pt.x ));

向tree控件发送如下消息 有效果 但无法产生双击事件
::SendMessage(hTreeWnd,WM_LBUTTONDOWN,0,(LPARAM)MAKELONG(pt.y ,pt.x ));
Sleep(50);
::SendMessage(hTreeWnd,WM_LBUTTONDOWN,0,(LPARAM)MAKELONG(pt.y ,pt.x ));

另外本人也试了NM_DBLCLK消息 NM_DBLCLK消息本人第一次用,代码如下,结果无效 不知是因为有错误 还是确实此方法无效
//以下是向tree发送一个WM_NOTIFY消息,目的是想触发双击事件 但不成功

NMHDR *pnmh=(NMHDR*)VirtualAllocEx(hProcess, NULL, sizeof(NMHDR), MEM_COMMIT, PAGE_READWRITE);
NMHDR nmh;
nmh.code = NM_DBLCLK; // Message type defined by control.
nmh.idFrom = GetDlgCtrlID(hTreeWnd);
nmh.hwndFrom = GetParent(hTreeWnd);
WriteProcessMemory(hProcess, pnmh, &nmh, sizeof(NMHDR), NULL);
SendMessage(GetParent(hTreeWnd),WM_NOTIFY,(WPARAM)nmh.idFrom,(LPARAM)pnmh);


哪位大哥有更好的方法 跨进程对SysTreeView32控件节点模拟双击的????(取节点坐标->然后移鼠标过去->双击 此方法已实现!)
...全文
1175 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kioooi 2011-12-18
  • 打赏
  • 举报
回复
实际上楼主的方法:
::SendMessage(GetParent(hTreeWnd), WM_LBUTTONDOWN, 0, (LPARAM)MAKELONG(pt.y ,pt.x ));
::SendMessage(GetParent(hTreeWnd), WM_LBUTTONUP, 0, (LPARAM)MAKELONG(pt.y ,pt.x ));

已经触发了双击处理事件,只是这个双击响应函数会检测当前鼠标位置,才执行楼主想要的程序,比如一个双击响应函数这么写:
void CMyDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码

CPoint pt;
UINT nFlags;
::GetCursorPos(&pt);
::ScreenToClient(m_cTree.m_hWnd, &pt);
HTREEITEM hItem = m_cTree.HitTest(pt,&nFlags);

CString sMsg;
sMsg.Format(_T("%s"), m_cTree.GetItemText(hItem));
AfxMessageBox(sMsg);

*pResult = 0;
}
如果鼠标光标不在要双击的节点位置上,是不会触发想要的双击事件的
cuteair 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ckillcn 的回复:]

四月18日发的贴子 现在已四月27了 沉了很久的贴子 最终问题还是自己解决了 特来此公布本人自己这么多天来的研究结果!

首现感谢一下2楼的ltc_mouse
一个完整的消息是以下四个消息 虽然对SysTreeView32控件节点模拟双击 没有效果 但更正了本人一直以来的一个错误
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and W……
[/Quote]
能否贴出代码来啊
这个WM_NCHITTEST消息是在那条消息之后发?
所有的消息顺序是什么啊
有木有用到WM_NOTIFY消息?
希望你还能看到这个帖子
ioriliao5 2010-08-04
  • 打赏
  • 举报
回复
呵呵。。。我遇到同样的问题,这个模拟方法太麻烦了,也不好使,最终我发现用一个彻底的方法,就是用ollydbg找出双击事件函数的地址,然后用一个dll注入,在dll中调传递相关的参数后调用这个函数则是,我现在也还在研究中,多多指教!
b170365892 2010-07-11
  • 打赏
  • 举报
回复
我也遇见这个问题怎么办哦····
hanlotus 2010-04-03
  • 打赏
  • 举报
回复
请问楼主你这个问题是如何解决的,能说详细点,或者把相关代码贴一下么?谢谢!
ckillcn 2009-04-27
  • 打赏
  • 举报
回复
四月18日发的贴子 现在已四月27了 沉了很久的贴子 最终问题还是自己解决了 特来此公布本人自己这么多天来的研究结果!

首现感谢一下2楼的ltc_mouse
一个完整的消息是以下四个消息 虽然对SysTreeView32控件节点模拟双击 没有效果 但更正了本人一直以来的一个错误
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP

对SysTreeView32控件节点发消息模拟双击 在网上查了许久 都是有问无答 或者方法是把鼠标移地去点击

于是本人不得不自己研究!经过研究 发现要激活SysTreeView32控件节点双击事件 除了要发送一个WM_LBUTTONDBLCLK消息外

另需发送一个WM_NCHITTEST消息 此消息是移动鼠标,按住,或释放鼠标时发生

本贴明天晚上结贴!
ckillcn 2009-04-24
  • 打赏
  • 举报
回复
自己加顶一下吧
ckillcn 2009-04-22
  • 打赏
  • 举报
回复
没人回答 自己再顶一下
S_zxing 2009-04-22
  • 打赏
  • 举报
回复
帮顶……
ckillcn 2009-04-21
  • 打赏
  • 举报
回复
经过多天来的研究 并且请高手帮忙 还是没有解决 现在希望高手高手高高手出来帮帮小弟


SysTreeView32 控件是QQ游戏的游戏列表控件

移动鼠标过去双击的方法已实现除外
liqinghua1653 2009-04-19
  • 打赏
  • 举报
回复
不知道LZ想干什么, 是不是想从控制这些东西, 做一个像自动化的东西。
LZ可以试试UIAutomation的东西, .net 3.0的东西。 可以很容易的展开和收缩一个systreeviw的item。 如果LZ想从这方面入手, 可以找我讨论一下。
liliangbao 2009-04-18
  • 打赏
  • 举报
回复
帮顶~
老邓 2009-04-18
  • 打赏
  • 举报
回复
如果要跨平台的话,要先注入DLL到对方进程的地址空间,然后该DLL再进行相应操作,否则会内存访问违例的。
ltc_mouse 2009-04-18
  • 打赏
  • 举报
回复
WM_LBUTTONDOWN产生效果了,那试试WM_LBUTTONDBCLICK呀,一个完整的双击有4个事件
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP

MSDN如是说:
Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the
user presses, releases, and again presses the left mouse button within the system's double-click time limit. Double-clicking
the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and
WM_LBUTTONUP.
Proteas 2009-04-18
  • 打赏
  • 举报
回复
跨进程我就知道消息了。
帮顶。

64,433

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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