CRY6666 2017-08-03 02:58 采纳率: 0%
浏览 909

在获取桌面图标时,,为啥取不到句柄???别人电脑可以我的不可以???

void C***::OnSetDeskIcon()

{

HWND hDestTop;

hDestTop = ::FindWindow("progman", NULL);

    //????????????????????????????????????????????????????????????
hDestTop = ::FindWindowEx(hDestTop, 0, "shelldll_defview", NULL);   

hDestTop = ::FindWindowEx(hDestTop, 0, "syslistview32", NULL);   
int count=(int)::SendMessage( hDestTop, LVM_GETITEMCOUNT, 0, 0);  
LVITEM lvi, *_lvi;  
char item[512], subitem[512];  
char *_item, *_subitem;  
unsigned long pid;  
HANDLE process;  
GetWindowThreadProcessId( hDestTop, &pid);  
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);  
_lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);  
_item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);  
_subitem=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE);  
RECT  rc;  
rc.left = LVIR_ICON;  //这个一定要设定 可以去看MSDN关于LVM_GETITEMRECT的说明  
RECT* _rc =(RECT*)VirtualAllocEx( process, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);   
lvi.cchTextMax=512;  
for( int i=0; i< 10; i++) {  
    lvi.iSubItem=0;  
    lvi.pszText=_item;  
    WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);  
    ::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);  
    lvi.iSubItem=1;  
    lvi.pszText=_subitem;  
    WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);  
    ::SendMessage( hDestTop, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);  
    ::WriteProcessMemory( process, _rc, &rc, sizeof(rc), NULL);  
    ::SendMessage( hDestTop, LVM_GETITEMRECT, (WPARAM)i, (LPARAM)_rc);  
    ReadProcessMemory(process, _item, item, 512, NULL);  
    ReadProcessMemory(process, _subitem, subitem, 512, NULL);  
    ReadProcessMemory(process, _rc, &rc, sizeof(rc), NULL);  
    CString str;  
    str.Format("LF:%d TP:%d RT:%d BT:%d", rc.left,rc.top,rc.right,rc.bottom);  
    AfxMessageBox(str);  
    str.Format("%s - %s/n", item, subitem);  
    AfxMessageBox( str );  
}  
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);  

VirtualFreeEx(process, _item, 0, MEM_RELEASE);

VirtualFreeEx(process, _subitem, 0, MEM_RELEASE);

VirtualFreeEx(process, _rc, 0, MEM_RELEASE);

CloseHandle( process );

}



  • 写回答

2条回答 默认 最新

  • shen_wei 2017-08-03 09:29
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?