模拟对Systreeview32内节点的单击

sculida 2016-04-19 03:16:02
我只会c++语言。

如图,这个控件是Systreeview32。我需要单击“当日委托”这个按钮。
mouse_event的方法我已经实现了,但是有缺陷,不想用。
参照这篇模拟双击的方法
http://blog.csdn.net/visualeleven/article/details/6403628
我写了代码如下。简单起见,我要点击“卖出”按钮

HWND hTree = HWND(0x60842);//systreeview32的hwnd,直接从spy++获得,暂且写死
HTREEITEM hItemRoot = TreeView_GetRoot(hTree);
HTREEITEM hItem = TreeView_GetNextSibling(hTree, hItemRoot);//这是卖出图标的hitem
::SendMessage(hTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hItem);//这时候“卖出”图标会变成蓝色,表示被选中
DWORD pid = 0;
GetWindowThreadProcessId(hTree, &pid);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, true, pid);

RECT *prect = (RECT*)VirtualAllocEx(hProcess, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
RECT rect = { 0 };
unsigned long n = 0;
*(HTREEITEM*)&rect = hItem;
WriteProcessMemory(hProcess, prect, &rect, sizeof(RECT), NULL);
::SendMessage(hTree, TVM_GETITEMRECT, (WPARAM)TRUE/*FALSE*/, (LPARAM)prect);
ReadProcessMemory(hProcess, prect, &rect, sizeof(RECT), &n);

POINT pt = { 0 };
pt.x = rect.left + (rect.right - rect.left) / 2;
pt.y = rect.top + (rect.bottom - rect.top) / 2;

NMHDR nm;
nm.hwndFrom = hTree;
nm.idFrom = GetDlgCtrlID(hTree);//这个在spy++里核实,control id确实是这个数
nm.code = NM_CLICK;
HWND hParent = GetParent(hTree);

::PostMessage(hTree, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM((WORD)pt.x, (WORD)pt.y));
SendMessage(hParent, WM_NOTIFY, nm.idFrom, (LPARAM)&nm);
::SendMessage(hTree, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM((WORD)pt.x, (WORD)pt.y));
//释放内存
CloseHandle(hProcess);
VirtualFreeEx(hProcess, prect, 0, MEM_RELEASE);

问题是最后三句SendMessage无论这样发送消息,都不能转到“卖出”界面
...全文
1426 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-03-02
  • 打赏
  • 举报
回复
hajianyu 2017-03-01
  • 打赏
  • 举报
回复
把鼠标移到你要点击的那个位置就好了,但如何通过程序来“假装”鼠标在那个位置,我就不知道了。
  • 打赏
  • 举报
回复
用postmessage试试

64,654

社区成员

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

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