读书人

VC++怎么实现文件图标变更

发布时间: 2012-09-24 13:49:42 作者: rapoo

VC++如何实现文件图标变更?
下面是网上抄的代码,不管用。请高人指点,能实现类似的功能。

C/C++ code
#include "stdafx.h"#define _AFXDLL#include <afxwin.h>int _tmain(int argc, _TCHAR* argv[]){    HGLOBAL hResLoad(NULL);    HANDLE hExe(NULL);    HRSRC hRes(NULL);    HANDLE hUpdateRes(NULL);    char * lpResLock;    BOOL result;    hExe = LoadLibrary(_TEXT("D:\\Src.exe"));    if (hExe == NULL)    {        AfxMessageBox(_T("加载Src.exe失败."),0,0);    }    hRes = FindResource((HMODULE)hExe, (LPCTSTR)1, RT_ICON);    if (hRes == NULL)    {        AfxMessageBox(_T("不能定位Src.exe中的第一个图标"));    }    hResLoad = LoadResource((HMODULE)hExe, hRes);    if (hResLoad == NULL)    {        AfxMessageBox(_T("不能加载该图标资源"));    }    lpResLock =(char *)LockResource(hResLoad);    if (lpResLock == NULL)    {        AfxMessageBox(_T("不能锁定该资源."));    }    hUpdateRes = BeginUpdateResource(_T("D:\\Target.exe"), FALSE);    if (hUpdateRes == NULL)    {        AfxMessageBox(_T("不能打开Target.exe准备写."));    }    result =UpdateResource((HMODULE)hUpdateRes , RT_ICON,        (LPCTSTR)1, 0, lpResLock, SizeofResource((HMODULE)hExe, hRes));    if (result == FALSE)    {        AfxMessageBox(_T("添加资源失败."));    }    if (!EndUpdateResource(hUpdateRes, FALSE))    {        AfxMessageBox(_T("不能向目标EXE中写入改动结束资源更新"));    }    if (!FreeLibrary((HMODULE)hExe))    {        AfxMessageBox(_T("不能释放Src的句柄."));    }    return 0;}


[解决办法]
这里(http://www.cnblogs.com/weiqubo/archive/2011/03/15/1984865.html)有详细的解说和参考代码,看过会很有收获的。
[解决办法]
探讨
谢谢,他的方法1比我的多了EnableDebugPrivilge函数,说是提升本进程的权限为DEBUG级别。不知道有什么作用?代码在哪儿找?

引用:
这里(http://www.cnblogs.com/weiqubo/archive/2011/03/15/1984865.html)有详细的解说和参考代码,看过会很有收获的。

读书人网 >C++

热点推荐