零基础逆向工程31_Win32_05_提取图标_修改标题

在程序中使用图标

1.加载图标

HICON hIcon;

hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON));

hAppInstance
        应用程序句柄

IDI_ICON
        图标编号
    
MAKEINTRESOURCE
        用这个宏的主要原因是有的资源是用序号定义的,而不是字符串.所以要把数字转换成字符串指针

2.设置图标

case WM_INITDIALOG :
        hIcon = LoadIcon (hAppInstance, MAKEINTRESOURCE (IDI_ICON));
        //设置图标
        SendMessage(hDlg,WM_SETICON,ICON_BIG,(DWORD)hIcon);
        SendMessage(hDlg,WM_SETICON,ICON_SMALL,(DWORD)hIcon);
        //注:WM_SETICON 是事件的类型
        return TRUE;

图标在哪里? ==> PE结构资源表

资源目录

typedef struct _IMAGE_RESOURCE_DIRECTORY {
    DWORD   Characteristics;                //资源属性  保留 0
    DWORD   TimeDateStamp;                  //资源创建的时间
    WORD    MajorVersion;                   //资源版本号 未使用 0
    WORD    MinorVersion;                   //资源版本号 未使用 0
    WORD    NumberOfNamedEntries;           //以名称命名的资源数量
    WORD    NumberOfIdEntries;              //以ID命名的资源数量
//  IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
} IMAGE_RESOURCE_DIRECTORY, *PIMAGE_RESOURCE_DIRECTORY;

资源目录项

typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
    union {                     //目录项的名称、或者ID
        struct {
            DWORD NameOffset:31;
            DWORD NameIsString:1;
        };
        DWORD   Name;
        WORD    Id;
    };
    union {
        DWORD   OffsetToData;       //目录项指针
        struct {
            DWORD   OffsetToDirectory:31;
            DWORD   DataIsDirectory:1;
        };
    };
} IMAGE_RESOURCE_DIRECTORY_ENTRY, *PIMAGE_RESOURCE_DIRECTORY_ENTRY;

数据项

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

可参考1:http://blog.sina.com.cn/s/blog_99fde17c0101717f.html
可参考2:http://blog.csdn.net/obuyiseng/article/details/50260671

你可能感兴趣的:(零基础逆向工程31_Win32_05_提取图标_修改标题)