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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器