⒈ 目的:替换exe资源里的一个位图
⒉ 已知:位图文件在exe中的偏移地址:002c098,长度:0180,资源名称:1003
⒊ 提供:待替换的位图 cn.bmp 且路径为“szFilePath”诚心求解:如何利用 CreateFile 和 ReadFile,将cn.bmp读到字符数组中?例如这样的数组:
BYTE cmp[20] = {0x32, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x31, 0x00,
                0x20, 0x00, 0x42, 0x00, 0x65, 0x00, 0x74, 0x00,
                0x61, 0x00, 0x32, 0x00};如果图片太大了,又如何判断超过了数组容量?或者:有其他办法,读取本地的一个bmp文件,来替换掉exe里的相应资源?早晨起床到现在,忙了很久了,一直没有解决。因本人业余自学编程,只能达到照猫画虎的水平,请高人授以源代码,不胜感激!!
================================
请帮助,解决后请到这里送60分:http://community.csdn.net/Expert/TopicView1.asp?id=4887135

解决方案 »

  1.   

    直接读到你申请的char*里就好了
    看你怎么用了
    你要不显示跟十六进制没关系
      

  2.   

    不知道exe里面存的位图是什么格式呢,是只有像素数据还是和bmp文件一样包含文件头 信息头,调色板和像素信息,如果是一样就好办,直接fopen()打开文件,把信息直写入就可以。bmp文件的信息头里包含有图片的分辨率信息的,可以得到图像的总像素数,再通过颜色数,可以得到像素数据量的大小,就可以确定这个数组的大小
      

  3.   

    如果这个EXE是标准PE格式,直接用工具就可以替换了.使用:UpdateResource,可以满足要求,替换资源.
      

  4.   

    问题是,我现在完成的软件,本身就要求类似exescope,可以替换掉一确定exe文件中的图片资源。但,不能借助其他软件(如exeScope),而是要编程完成。
    试了试,还是不行。
    查了很久的MSDN,似乎这方面的资料非常少。究竟要如何才能通过编程来实现替换掉exe文件中的图片呢?
      

  5.   

    用UpdateResource这个API就可以了.
      

  6.   

    借各位指点,自己搞定代码:
        DWORD dwWrite = 0;
        unsigned char DataCN[8000];
        FILE *fin;
        int i = 0;
        fin = fopen(szTemp, "rb"); // szTemp为cn.bmp文件路径
        if (fin != NULL)
        {
            while (!feof(fin))
            {
                DataCN[i] = getc(fin);
                i++;
            } 
            fclose(fin);
        }
        SetFilePointer(g_hFile, 0x2C218, NULL, FILE_BEGIN); // g_hFile为wbjju.ime的句柄  
        WriteFile(g_hFile, DataCN, 7000, &dwWrite, NULL); // 此处暂用7000