如何捕获外部程序LISTVIEW鼠标单击事件,获取该LISTVIEW当前选中行的某列的值

DeltaCat 2011-01-11 06:26:12
加精
现有一个外部程序,其界面上有个LISTVIEW控件,里面有若干行数据,我想通过自己的程序,捕获该外部程序中LISTVIEW的鼠标点击事件,同时获取其当前选中行的某列的值。

现在的初步思路是使用 SetWindowsHookEx 进行注入,但是不确定是使用 WH_MOUSE,还是 WH_CALLWNDPROC 来实现。

或者,我本身的思路就问题,请大家多指教,谢谢。
...全文
5210 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn Lane 2011-10-11
  • 打赏
  • 举报
回复

看不懂哦
liuypengway 2011-07-26
  • 打赏
  • 举报
回复
看不懂
  • 打赏
  • 举报
回复
竟然使用到了鼠标勾子了。
  • 打赏
  • 举报
回复
楼猪真是有钱人呀。
newfang 2011-02-23
  • 打赏
  • 举报
回复
那直接用鼠标钩子不就可以了吗?
pandashare 2011-02-10
  • 打赏
  • 举报
回复
14楼..学习~~
话说..22楼的看不懂- -!郁闷勒...
DeltaCat 2011-02-10
  • 打赏
  • 举报
回复
自己顶顶,没人关注了啊
DeltaCat 2011-01-25
  • 打赏
  • 举报
回复
看了大家的回复,很多都是取LISTVIEW的内容的,这个不是我要的,我要的是捕获外部LISTVIEW的鼠标双击事件,截获这个才是我需要的,谢谢大家,请继续
hejianzhong 2011-01-22
  • 打赏
  • 举报
回复
这个更简单,几句代码搞定

http://www.aau.cn/thread-58-1-1.html
huigezi123 2011-01-21
  • 打赏
  • 举报
回复
对了,以上是cb代码,你把它转成delphi就好了
huigezi123 2011-01-21
  • 打赏
  • 举报
回复
原来老妖有一个minispy想必你应该知道,能够捕获外部句柄,并能取出一些简单控件中的内容,源码可以从老妖网站下载。我曾因为需要作了个读取listview的内容地例子。
在狗狗图标的MouseMove事件里增加下面的代码:(一些名称可能需要替换)

//如果对象为ListView
if (edtName->Text.Pos("ListView")>0)
{
edtCaption->Text = "nocaption";
TLVItem *it = new TLVItem;
it->mask = LVIF_STATE;
it->state = LVIS_SELECTED + LVIS_FOCUSED + LVIS_ACTIVATING;
it->stateMask = DWord(-1);
int iItem;
iItem=SendMessage(hWindow,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
if (iItem==-1)
MessageBox(NULL,"没有指定目标进程 !","错误!",NULL);
// char strCBStr[65535];
// SendMessage(hWindow, LVM_GETITEMTEXT, 0, (LPARAM)strCBStr);

String s;
GetLvItemText(hWindow, iItem, 1, s);
Memo1->Lines->Add(s );
}

其中GetLvItemText函数代码如下:
bool TForm3::GetLvItemText(HANDLE Lv, int Index, int SubItem, String& Text)
{
const int bufferLength = 4000;
bool result = false;
DWORD processId = NULL;
GetWindowThreadProcessId(Lv, &processId);
if (processId == NULL) return false;
HANDLE process = ::OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, processId);
if (process == NULL) return false;
PVOID buffer = VirtualAllocEx(process, NULL, bufferLength, MEM_COMMIT, PAGE_READWRITE);
if (buffer != NULL)
{
LPLVITEM item = (LPLVITEM)new BYTE[bufferLength];
item->mask = LVIF_TEXT;
item->iSubItem = SubItem;
item->pszText = (LPTSTR)((PBYTE)buffer+sizeof(LVITEM));
item->cchTextMax = (bufferLength - sizeof(LVITEM)) / sizeof(TCHAR);
WriteProcessMemory(process, buffer, item, sizeof(LVITEM), NULL);
if (SendMessage(Lv, LVM_GETITEMTEXT, Index, (LPARAM)buffer) != 0)
{
ReadProcessMemory(process, buffer, item, 1024, NULL);
Text = (LPTSTR)((PBYTE)item+sizeof(LVITEM));
result = true;
}
delete item;
VirtualFreeEx(process, buffer, sizeof(LVITEM), MEM_DECOMMIT);
}
CloseHandle(process);
return result;
}
这样应该够你用了,根据自己的需要调整使用吧
lw19860412 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 huigezi123 的回复:]
对了,以上是cb代码,你把它转成delphi就好了
[/Quote]怎么转化?
无条件为你 2011-01-20
  • 打赏
  • 举报
回复
分确实不少,我可以给你提供完整代码,缺的是你的联系QQ。
我可以给你写无DLL的程序实现你的要求。
sx54605628 2011-01-14
  • 打赏
  • 举报
回复
这样的所谓“隐藏”,其实不过是掩耳盗铃,用其他工具还是比较容易看到的。
Hemingway_Brian 2011-01-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kingstaron 的回复:]
引用 2 楼 zhangmeeno 的回复:
每天回帖即可获得10分可用分!小技巧

这种贴是要被封号的
[/Quote]
坏孩子龙少爷 2011-01-12
  • 打赏
  • 举报
回复
都是玩高科技的
weiym 2011-01-11
  • 打赏
  • 举报
回复
参考http://bbs.aisnote.com/viewtopic.php?f=2&t=14
weiym 2011-01-11
  • 打赏
  • 举报
回复
注入DLL, Subclass这个窗口就可以了
bdmh 2011-01-11
  • 打赏
  • 举报
回复
下面是钩子回调函数,在里面捕捉右键抬起,在外部程序的TListView上右键点击后,会被截住,并获得所点击的ListView组件,你可以将其数据传递给你自己的程序

function HookProc(code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
MouseHookStruct: ^TMOUSEHOOKSTRUCT;
WC: TWinControl;
classname: array [0..99] of char;
i:Integer;
begin
Result := 0;
if code < 0 then
Result := CallNextHookEx(NextHook,code,wParam,lParam);
case wParam of
WM_LBUTTONDOWN:
begin

end;
WM_LBUTTONUP:
begin

end;
WM_LBUTTONDBLCLK:
begin

end;
WM_RBUTTONDOWN:
begin
MouseHookStruct := Pointer(LParam);
//MouseHookStruct.hwnd为所点击组件的句柄,通过它得到它的类名
GetClassName(MouseHookStruct.hwnd,classname,100);
//如果是TLitView
if StrPas(classname) = 'TListView' then
begin
//获取该组件
WC := TListView(PInteger(Integer(GetWindowLong(MouseHookStruct.hwnd, GWL_WNDPROC)) + 9)^);
//循环显示item的Caption
for i := 0 to TListView(WC).Items.Count - 1 do
begin
ShowMessage(TListView(WC).Items[i].Caption);
end;
end;
end;
WM_RBUTTONUP:
begin

end;
WM_NCMOUSEMOVE,WM_MOUSEMOVE:
begin
//给调用者发消息
SendMessage(CallHandle,MessageID,pMouseHookStruct(lParam)^.hwnd,Integer(@pMouseHookStruct(lParam)^));
end;
end;
end;
Edai9508 2011-01-11
  • 打赏
  • 举报
回复
WH_MOUSE,并判断点击的是否为TListView
加载更多回复(9)
超实用的jQuery代码段精选近350个jQuery代码段,涵盖页面开发中绝大多数要点、技巧与方法,堪称史上最实用的jQuery代码参考书,可以视为网页设计与网站建设人员的好帮手。《超实用的jQuery代码段》的代码跨平台、跨设备、跨浏览器,充分向读者演示了如何使用jQuery的各项技术,实现令人激动的网页效果。    《超实用的jQuery代码段》从jQuery框架的使用原理与应用场景出发,对最实用的jQuery代码段进了全方位的介绍和演示。全书分为11章,包含网页效果、DOM元素与属性、HTML事件、CSS样式、用户输入自动完成、拖放、图形图像、AJAX、算法、jQuery Mobile应用、浏览器、Cookies等jQuery技术内容,对提高网站开发人员和设计人员的jQuery技术水平有指导作用。 超实用的jQuery代码段 目录: 序1 jQuery必知必会 VIII 序2 你绝对不可能全部做对的jQuery题 XVI 序3 最流的前端面试题 XXIII 第1章 jQuery操作网页 1.1 显示或隐藏网页内容 1.2 切换页面的显示或隐藏 1.3 实现幻灯片式的淡入淡出效果 1.4 切换页面的淡入淡出 1.5 页面的滑动隐藏 1.6 切换页面的滑动 1.7 图片的动画效果 1.8 停止动画效果 1.9 不可不知的Callback回调 1.10 提高效率的链式(Chaining)操作 1.11 在新窗口中打开链接 1.12 强制在弹出窗口中打开链接 1.13 平滑滚动页面到某个锚点 1.14 阻止文本 1.15 实现iframe高度自适应 1.16 实现左右div自适应相同高度 1.17 获取鼠标在屏幕中的坐标 1.18 获取鼠标在窗口客户区中的坐标 1.19 获取鼠标在窗口页面中的坐标 1.20 设置Flash对象的WMode窗口模式 1.21 实现类Twitter的字数限制效果 1.22 提示文本的隐藏与显示 1.23 实现文字闪烁效果 1.24 实现文字动画效果 1.25 实现文字跟随鼠标移动变化的动画效果 1.26 文本域中光标的定位 1.27 实现可折叠效果 1.28 文本框内容自动缩进 1.29 禁止页面滚动的方法 1.30 页面加载后消息框居中显示 1.31 创建页面固定浮动栏的方法 第2章 jQuery操作DOM元素 2.1 如何验证某个元素是否为空 2.2 检查特定的HTML元素是否存在 2.3 判断HTML元素是否嵌套 2.4 获取当前元素的索引 2.5 插入节点元素 2.6 复制节点元素 2.7 替换节点元素 2.8 删除节点元素 2.9 为元素绑定事件 2.10 如何从元素中除去HTML标签 2.11 如何限制文本域中字符的个数 2.12 如何选中页面上的所有复选框 2.13 禁用表单的回车键提交 2.14 禁用右键单击上下文菜单 2.15 IE下禁用文本选择功能 2.16 输入框获取焦点时文本高亮提示 2.17 实现多个输入框同步操作 2.18 在新窗口中打开外部链接 2.19 jQuery实现outerHTML属性 2.20 实现带固定表头的表格 2.21 为表单内控件设定缺省数和文本 2.22 防止单个页面重复提交按钮 2.23 取得列表控件选中的option对象 2.24 限制输入框仅接受特殊字符的输入 2.25 禁止页面内全部超链接 2.26 实现动态组合列表框 2.27 如何使用属性过滤器 2.28 如何测试某个元素是否可见 第3章 jQuery操作HTML事件 3.1 禁止或启用输入框 3.2 实时监听输入框字符的变化 3.3 实时监听输入框的变化 3.4 绑定鼠标右键单击事件 3.5 双击不选中文本 3.6 通过单击事件添加或解除绑定 3.7 激活整个div层的单击事件 3.8 鼠标单击实现div的选取 3.9 模拟鼠标单击事件 3.10 设定时间间隔的方法 3.11 设定时间延迟的方法 3.12 延时显示子菜单的方法 3.13 通过事件获取页面加载时间 3.14 如何为动态添加的元素绑定事件处理函数 3.15 为表格增加单击事件 3.16 用回车键模拟Tab键 第4章 jQuery操作CSS样式 4.1 使用addClass()函数动态添加样式类 4.2 使用removeClass()函数动态移除样式类 4.3 使用toggleClass()函数切换页面元素的样式类 4.4 为body增加class类支持 4.5 操作div的显示与隐藏 4.6 如何设定div始终居中显示 4.7 测试浏览器是否支持某些CSS 3属性 4.8 如何添加hover类到指定元素 4.9 基于URL地址为导航链接添加class样式 4.10 如何延迟添加class类 4.11 如何延迟清除class类 4.12 动态调整页面的字体大小 第5章 jQuery实现用户输入自动完成功能 5.1 最简单的用户输入自动完成 5.2 使用远程数据源的自动完成 5.3 带缓存的自动完成 5.4 带滚动条的自动完成 5.5 Combobox风格的自动完成 5.6 读取XML数据的自动完成 5.7 多维数据的自动完成 第6章 jQuery实现拖放功能 6.1 基本拖放功能 6.2 基于事件的拖放 6.3 限制移动范围的拖放 6.4 延迟进的拖放 6.5 具有对齐功能的拖放 6.6 自动滚动的拖放 6.7 反转位置的拖放 6.8 使用事件监控拖曳次数 6.9 拖动时动态更改鼠标的光标类型和位置 6.10 拖曳并放置到目标容器 6.11 限制可放置的元素 6.12 实现可拖放的购物车 6.13 可排序的拖放 6.14 在多个列表之间进拖放 6.15 使用拖动方式选择多个元素 6.16 在两个Tab标签之间进元素拖动 6.17 拖动表格选择多数据 6.18 拖动表格时自动选中复选框 6.19 拖动表格并放置到目标位置 6.20 表格的拖动排序 6.21 拖动调整控件的大小 6.22 调整控件大小时设置调整约束 6.23 使用拖动的方式调整表格的宽度 6.24 设计可改变单元格宽度并可以多选的表格 第7章 jQuery操作图形图像 7.1 如何更好地处理图片法显示问题 7.2 如何显示图片直到页面加载完成 7.3 预加载显示图片的方法 7.4 Facebook风格的图片预加载 7.5 检查图片src是否有效 7.6 上下滑动的图片 7.7 淡入淡出一幅图片,进入另一幅图片 7.8 获取图片原生尺寸的方法 7.9 检查图像是否已经被完全加载 7.10 单击改变背景图案 7.11 如何显示Flickr网站的图片 7.12 如何显示Google Picasaweb的图片 7.13 按比例调整图片的大小 7.14 滑动效果的背景图片 7.15 动态表单生成图片预览 7.16 平滑滚动的导航菜单 7.17 图片的放大预览 7.18 实现平滑的图片动态缩放效果 7.19 自动适应的窗口背景 7.20 如何判断加载多张图片的完成状态 7.21 鼠标悬停时的图片放大 7.22 淡出图片,淡入另一幅图片 7.23 页面加载时随机显示图片 7.24 按顺序淡入图片显示 7.25 检测图片的URL是否有效 7.26 强制显示图片的方法 7.27 实现可拖动显示的图片 第8章 jQuery实现AJAX 8.1 动态加载外部文件 8.2 动态加载外部网页 8.3 加载网页文件内容并传递服务器端参数 8.4 使用AJAX刷新删除网页记录 8.5 使用AJAX异步验证用户名和密码 8.6 页面滚动时加载新的网页内容 8.7 打造自己的站内搜索引擎 8.8 异步加载并解析XML文件 8.9 动态加载HTML内容到标签页中 8.10 使用AJAX刷新异步提交表单 8.11 使用AJAX刷新上传图片 8.12 使用AJAX刷新验证PHP会话是否有效 8.13 在AJAX异步调用时显示加载指示器 8.14 在AJAX异步调用时处理JSON数据 8.15 解析XML数据并加载到HTML表格 8.16 jQuery AJAX错误的处理方法 8.17 在页面级创建全局的AJAX监听器以及状态指示器 8.18 级联AJAX数据异步加载 8.19 取消AJAX异步请求 第9章 jQuery常用算法 9.1 jQuery遍历算法 9.2 jQuery祖先算法 9.3 jQuery后代算法 9.4 jQuery同胞算法 9.5 jQuery过滤算法 9.6 对一个列表进排序 9.7 实现JSN对象数组的排序 9.8 将12343778转成12.343.778的形式 9.9 模拟抽奖程序 9.10 实现冒泡算法 9.11 查询数组中特定数 9.12 从数组中移除特定数 9.13 根据指定正则表达式识别超链接 9.14 验证Email地址的正确性 9.15 动态统计字符个数 9.16 使用jQuery验证用户年龄 9.17 按照首字母进元素排序 9.18 获取URL地址的Hash参数 9.19 避免多文本溢出的算法 9.20 随机选择一个元素 9.21 替换&bnsp;空字符的方法 9.22 序列化表单到JSON数据 9.23 获取页面加载时间 9.24 将单个句子打断显示 9.25 限制只能输入中文、英文或数字 9.26 日期类型与时间戳的转换 9.27 使用数组模拟打字效果 9.28 获取数组中特定索引的最高 9.29 清除所有的表单内容 9.30 用jQuery删除空白标签和具有非中断空格的标签 第10章 jQuery Mobile移动开发技巧 10.1 让页面自适应屏幕宽度 10.2 在移动设备页面中创建多个显示视图 10.3 创建对话框显示效果 10.4 从外部文件中加载页面内容 10.5 为页面添加转场效果 10.6 设置全局默认的转场效果 10.7 定制显示回退按钮 10.8 在标题栏中添加导航栏 10.9 在页脚区域添加导航栏 10.10 添加可折叠的导航按钮 10.11 实现可折叠的输入表单 10.12 实现手风琴样式的折叠面板 10.13 使用网格打造简单的九宫格界面 10.14 可动态隐藏的页眉和页脚 10.15 最简单的手机相册 10.16 在列表框上添加气泡提示 10.17 在列表框上添加自定义按钮 10.18 为列表添加自定义的缩略图图标 10.19 创建列表日历的效果 10.20 动态创建listview列表项 10.21 动态加载和切换页面 10.22 在页面切换时显示加载进度框 10.23 在屏幕旋转时更改显示样式 10.24 在列表框中实现加载更多效果 10.25 自定义选择菜单 10.26 使用多个选择菜单进组合选择 10.27 使用多选菜单选择多个 10.28 创建双重范围的滑块 10.29 实现开关效果的选择功能 10.30 创建主题化的表单效果 第11章 其他常用代码段 11.1 判断jQuery库是否被加载 11.2 解决jQuery库冲突的方法 11.3 jQuery版本检查方法 11.4 解决jQuery版本冲突问题 11.5 如何设置IE特有的功能 11.6 判断浏览器类型并设置HTML元素内容 11.7 加载Google CDN的jQuery库 11.8 Cookies应用方法 11.9 使用cookie.js管理Cookies 11.10 让Cookies在N分钟后过期 11.11 如何删除Cookies 11.12 获取当前页面的URL并添加样式 11.13 向表格追加一数据 11.14 获取客户端IP 11.15 向Firebug的控制面板发送消息 11.16 根据不同的屏幕大小显示不同的网页 11.17 jQuery遍历对象的属性 11.18 最优化的循环语句写法 11.19 如何构建最优化的字符串 11.20 使用jQuery产生GUID 11.21 使用jQuery实现聚合函数 11.22 用jQuery打印网页的特定区域 11.23 禁止表单被提交 11.24 使用delay()延迟执动画 11.25 在网页上运本地程序的方法 11.26 动态过滤HTML表格中的内容 11.27 使用递归函数创建文字闪烁特效 11.28 使用ID选择器加快选择的速度 11.29 在类选择器前用标签选择器加快速度 11.30 缓存jQuery对象以提升性能 11.31 使用find()函数提升子查询的性能 11.32 使用jQuery操作DOM的限制

1,183

社区成员

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

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