获取外部list表格数据-发送消息获取外部ListView数据的问题

问题描述

发送消息获取外部ListView数据的问题

下面这段代码放在按钮点击事件里可以获取 外部listview的数据,但是创建一个线程却获取不到数据,不知道是什么原因,那位高手给解决一下,谢谢了!!!

::GetWindowThreadProcessId(hwd, &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
    {

int n;
for(;;)
{
DoEvents();
::Sleep(10);

if(stop==0){break;}

n=::SendMessage(hwd, LVM_GETITEMCOUNT, 0, 0);
s.Format("%d",n);
for(int hi=0;hi<n;hi++)
{
iItem=hi;//5在这里是第六个(从零开始)
for(int i=0;i<=2;i++)
{

                lvitem.iSubItem=coum[i];//同上
                lvitem.pszText=p_MyItemText;

                WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
               ::SendMessage(hwd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
                ReadProcessMemory(hProcess, p_MyItemText,str_MyItemText, 12, NULL);
                s=str_MyItemText;
                Ah_d[hi][i]=s;
                   if(mlist->GetItemText(hi,i)!=s)
                    {
                     mlist->SetItemText(hi,i,s);
                    }

              }

        }

}

解决方案

http://blog.csdn.net/chenhui530/article/details/1810261
http://bbs.csdn.net/topics/320064149

解决方案二:

建议你单步调试一下线程中的版本,看看哪一步异常了导致功能无法实现?
知道具体的代码,再分析原因就不困难了。

解决方案三:

开线程不在主线程中处理,没有消息循环,所以SendMessage等返回不能成功。这是使用mfc对象需要注意的地方。

时间: 2024-09-04 11:14:00

获取外部list表格数据-发送消息获取外部ListView数据的问题的相关文章

急!Android,环信3.0发送接收发送消息时候,顺序错乱,时间戳的值不正确。

问题描述 用A先发送一条数据,在用B瞬间跟着发一条数据,应该是先显示A发送的数据,但是遇到问题,B发送的内条数据会显示在A发送的数据之前.我去打log查看了两条数据的时间戳,发现B的时间戳先于A的时间戳,所以显示顺序就有问题了.我两台设备都是用的网络时间.请问有什么解决办法吗?请尽快看一下,很着急. 解决方案 你确定两台设备都是网络时间吗?发送消息获取的是本地的时间,接收消息是获取的网络时间解决方案二:那我要用环信必须要把手机系统时间设为网络时间?! 那不同时区又怎么办?! 环信为什么要用这种方

spy-给窗口发送消息,不能获得控件句柄

问题描述 给窗口发送消息,不能获得控件句柄 很多软件使用spy进行识别时,只能显示为一个整体,如果我想给这类窗口进行发送消息,实现给文本框输入值等操作时该怎么办? 解决方案 如果你只能看到窗体的句柄,那么说明这种程序中的控件其实根本不存在,是画出来的.这种程序叫做directui程序. 你只能模仿鼠标键盘操作. 解决方案二: 不是说所有的窗口都支持SPY++来抓取窗口,它一般是windows标准窗口才能获取控件,以及发送消息等. 而还有很多其他界面库等,根本不会处理消息机制.所以你也不能直接发送

Delphi获取句柄并发送消息!

Delphi获取句柄并发送消息 查找另外一个窗口的句柄: handle := FindWindow(nil,PChar('窗口的标题'));//查到窗体句柄查找子窗体:childHandle := FindWindowEx(handle,0,'子窗体类','子窗体标题'); 另外有个枚举子窗体的API,EnumChildWindows(主创体句柄,@回调函数,用户参数);用这个函数需要自己写一个回调的函数,比如:function EnumChildProc(ahWND:HWND; param:L

java web cgi 返回值-Java web 调用cgi发送form表达数据,如何获取返回值?

问题描述 Java web 调用cgi发送form表达数据,如何获取返回值? 各位,大家好,有个问题想请教一下,目前一套java web开发的网站,需要调用外公司 提供的一个cgi接口,用于实现发送一个字符串(包含了几个字段的数据)给他们的cgi 脚本,我们发送不论成功或者失败,他们都会返回一个具体的int值给我们,我该如何发 送并获取返回值?网上看到的资料不是特别多,自己大概的思路如下: //jsp要调用的程序为AgentRetMaintainerAct.cgi URL u = new URL

Delphi实现获取句柄并发送消息的方法_Delphi

本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil,PChar('窗口的标题'));//查到窗体句柄 查找子窗体: childHandle := FindWindowEx(handle,0,'子窗体类','子窗体标题'); 另外有个枚举子窗体的API, EnumChildWindows(主创体句柄,@回调函数,用户参数); 用这个函数需要自己写一个回调的函数,比如: function Enu

怎么获取SysTreeView32控件下所有节点句柄并发送消息选中单击

问题描述 如图左边是一个SysTreeView32控件,我想获取该控件下所有节点的句柄,并能发送消息选中单击某个指定名称节点求指点...小菜鸟刚接触API不久在线等.....求源码#regionAPI/*API的定义*////<summary>///本质是FindWindow,查找目标句柄///</summary>[DllImport("user32.dll",EntryPoint="FindWindow",SetLastError=true

push消息,使用第三方提取数据,怎么获取用户设备状态

问题描述 push消息,使用第三方提取数据,怎么获取用户设备状态 push消息,使用第三方提取数据,怎么获取用户设备状态是联网还是杀掉了app进程 解决方案 这种的只能去找第三方了,不然还能怎么办 解决方案二: 看第三方服务的API文档

获取表格数据-求解,怎么获取ligerui中表格中的全部数据?

问题描述 求解,怎么获取ligerui中表格中的全部数据? 从后台获取了ligerui表格中数据,在前台想要获取全部ligerui表格中的数据,该怎么做,跪求解答!

请求-数据库如何获取数据发送地址

问题描述 数据库如何获取数据发送地址 目前我获取数据的路径是:客户端请求--中间层转化为数据库请求--数据库发送数据到中间层--中间层转发数据给客户端 这样会消耗大量资源,能不能改变成: 客户端请求--中间层转化为数据库请求--数据库发送数据到客户端? 那位大虾讲一下数据库是如何确定数据发送目的地? 解决方案 之所以提出这个问题,就是既想得到3层结构的好处,又能避免数据必须通过中间层转发的弊端.但现在看来,客户端与数据库服务器要建立连接才能实现数据发送,的确不利于服务器扩展负载, 捡了芝麻丢了西