首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC怎么获取桌面图标完整文件名路径

2013-10-21 
VC如何获取桌面图标完整文件名路径?一下代码可以获取桌面图标的名称,桌面图标的名称实际就是C:\Documents

VC如何获取桌面图标完整文件名路径?
一下代码可以获取桌面图标的名称,桌面图标的名称实际就是C:\Documents and Settings\Administrator\桌面  下面的图标对应的文件的文件名。
可是怎么获取文件的扩展名呢?
或者,有哪个api可以获取桌面图标的完整文件(包括扩展名)路径呢?

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 );



}

[解决办法]
同问.....

热点排行