CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

c++ 转 vb 150分求助

楼主hebhd(汉德)2004-05-04 15:50:04 在 VB / API 提问

将下面的C++代码转成vb的。小弟不胜感激  
   
  如果能提供可用的示例+100分  
  读取其他应用程序中ListView中的内容  
   
   
  文档标题:读取其他应用程序中ListView中的内容    
  关   键   字:读取ListView,ListView_GetItem,WriteProcessMemory,VirtualAllocEx    
  本文章自   2003-11-14   添加到   C++   Builder   研究   网站以来,已被阅读   1920   次。    
     
  读取其他应用程序中ListView中的内容  
  作者:   ccrun   ,如转载请保证本文档的完整性,并注明出处。  
  欢迎光临   C++   Builder   研究,http://www.ccrun.com/doc/go.asp?id=583  
  //   读取ListView中的Item  
  //   hWindow为目标ListView的句柄  
  //   strlist用来存放ListView的Item字符串  
  //   来自http://www.ccrun.com  
  //   by   ccrun(老妖)  
  void   MyGetListViewItem(HWND   hWindow,TStrings   *strlist)  
  {  
          const   nMaxLen=1023;  
          char   szBuf[nMaxLen+1];  
   
          int                     nLVItemCount;  
          DWORD                 dwProcessID;  
          HANDLE               hProcess;  
          LVITEM               lvItemLocal;  
          DWORD                 dwBytesRead,   dwBytesWrite;  
          bool                   bSuccess,bWriteOK;  
   
          //注意:本文来自www.ccrun.com,by   ccrun(老妖),转载请注明出处。  
          //为防止某些不负责任的转载者,故出此下策,在代码中加入声明,请大家原谅。  
   
          GetWindowThreadProcessId(hWindow,&dwProcessID);  
          hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);  
          if(!hProcess)     //得不到指定进程的句柄  
                  return;  
          //在指定进程内分配存储空间  
          LPVOID   lpTextRemote=VirtualAllocEx(hProcess,NULL,nMaxLen+1,MEM_COMMIT,PAGE_READWRITE);  
          LPVOID   lpListItemRemote=VirtualAllocEx(hProcess,NULL,sizeof(LVITEM),MEM_COMMIT,PAGE_READWRITE);  
          if((!lpTextRemote)   ||   (!lpListItemRemote))   //不能在指定进程内分配存储空间  
                  return;  
   
          nLVItemCount=ListView_GetItemCount(hWindow);  
          strlist->Add("Welcome   to   www.ccrun.com");          
          strlist->Add("ListView的Item总数:   "   +   String(nLVItemCount));  
          strlist->Add("---------------------------");  
   
          for(int   i=0;i<nLVItemCount;i++)  
          {  
                  ZeroMemory(szBuf,nMaxLen+1);  
                  bWriteOK=   WriteProcessMemory(hProcess,lpTextRemote,(LPVOID)szBuf,nMaxLen+1,(LPDWORD)&dwBytesWrite);  
                  if(!bWriteOK)   //写内存错误  
                          return;  
                  lvItemLocal.iItem=i;  
                  lvItemLocal.iSubItem=0;  
                  lvItemLocal.mask=LVIF_TEXT;  
                  lvItemLocal.cchTextMax=nMaxLen;  
                  lvItemLocal.pszText=(LPTSTR)lpTextRemote;  
                  dwBytesWrite=0;  
                  bWriteOK=WriteProcessMemory(hProcess,lpListItemRemote,(LPVOID)&lvItemLocal,sizeof(LVITEM),(LPDWORD)&dwBytesWrite);  
                  if(!bWriteOK)   //写内存错误  
                          return;  
   
                  SendMessage(hWindow,LVM_GETITEMTEXT,(WPARAM)i,(LPARAM)lpListItemRemote);  
                  bSuccess=ReadProcessMemory(hProcess,lpTextRemote,szBuf,nMaxLen+1,&dwBytesRead);  
                  //从指定进程存储空间读取文本  
                  if(!bSuccess)   //不能在指定进程内读取文本  
                          return;  
                  strlist->Add(AnsiString(szBuf));  
          }//end   of   for(i)  
          //在指定进程内释放存储空间  
          VirtualFreeEx(hProcess,lpListItemRemote,0,MEM_RELEASE);  
          VirtualFreeEx(hProcess,lpTextRemote,0,MEM_RELEASE);  
          //关闭指定进程句柄  
          CloseHandle(hProcess);  
  }  
   
  调用的时候这样:  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
          MyGetListViewItem((void   *)0x000100DC,Memo1->Lines);  
  }  
   
  上面的((void   *)0x000100DC是我用MiniSpy取得的桌面的名柄(win2000下的桌面是个ListView),在实际调用时换成你取得的ListView的句柄即可。并且在上面的这段代码只是获取ListView的Item的Caption的。  
  如  
          HWND   hListView;  
          //....获取ListView的句柄  
          MyGetListViewItem(hListView,Memo1->Lines);          
   
  如果其ViewStyle为vsReport,就要考虑读取ListView的HeadItem了。呵呵。GoodLuck.    
  问题点数:100、回复次数:4Top

1 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2004-05-04 19:40:19 得分 90

http://expert.csdn.net/Expert/topic/2893/2893113.xml?temp=.7926905Top

2 楼daisy8675(莫依 沉迷)回复于 2004-05-04 19:42:05 得分 5

c++挺好的,轉vb幹嘛。Top

3 楼87721054(虹娃儿〓学习学习再学习)回复于 2004-05-04 21:22:47 得分 5

这么长?短的海口眼帮你转一下,自己弄吧Top

4 楼87721054(虹娃儿〓学习学习再学习)回复于 2004-05-04 21:23:12 得分 0

这么长?短的还可以帮你转一下,自己弄吧  
  Top

相关问题

  • VB转C#问题
  • C+VB?
  • vb to c#
  • 一句vb语句转C#
  • C#代码转化成vb
  • vb转c#的问题
  • 将下列vb转换为c#
  • vb是否能转化成c#那
  • 还是vb转c#的问题~~~唉~~~
  • VB朋友们向C转换的最佳良机!---C#简介

关键词

  • c++
  • c++ builder
  • 应用程序
  • 代码
  • 内容
  • listview
  • ccrun
  • 句柄
  • strlist
  • hprocess

得分解答快速导航

  • 帖主:hebhd
  • supergreenbean
  • daisy8675
  • 87721054

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo