DlgResToDlgTemplate 的代码,提取EXE中的资源,然后转化成C的字符串数组
代码来源:https://www.codeproject.com/Articles/13330/Using-Dialog-Templates-to-create-an-InputBox-in-C
#include <windows.h>#include<stdio.h> int main(int argc, char *argv[])
{
printf("DlgResToDlgTemplate v1.0 (c) <lallousx86@yahoo.com>\n\n");if (argc < 4)
{
printf("usage: %s MODULE_FILE DLG_ID FILE.H\n", argv[0]);return -1;
}int dlgID = atoi(argv[2]);
HMODULE hModule;
hModule= ::LoadLibraryEx(argv[1], 0, LOAD_LIBRARY_AS_DATAFILE);if (hModule ==NULL)
{
printf("Could not load module '%s'\n", argv[1]);return -1;
}
HRSRC hrsrc=::FindResource(hModule, (LPCTSTR) dlgID, RT_DIALOG);if (hrsrc ==NULL)
{
printf("Cannot find dialog resource with id '%d'\n", dlgID);return -2;
}
HGLOBAL hglobalRsrc=::LoadResource(hModule, hrsrc);if (hglobalRsrc ==NULL)
{
printf("Cannot load resource!\n");return -3;
}char *buf = (char *)::LockResource(hglobalRsrc);if (buf ==NULL)
{
printf("Cannot lock resource!\n");return -4;
}
DWORD sz=::SizeofResource(hModule, hrsrc);
FILE*fp = fopen(argv[3], "wb");if (fp ==NULL)
{
printf("Could not open '%s' for writing\n", argv[3]);return -5;
}char temp[100];
sprintf(temp,"static unsigned char dlg_%d[] = \n{\n\t", dlgID);
fwrite(temp,1, strlen(temp), fp);
sz--;for (DWORD i=0;i<=sz;i++)
{
sprintf(temp,"0x%02x", (unsigned char)(buf[i] & 0xFF));
fwrite(temp,1, strlen(temp), fp);//don't append a comma if it was last byte if (i !=sz)
{
fwrite(",", 1, 1, fp);
}if (i && (i % 16 == 0))
fwrite("\n\t", 1, 2, fp);
}
strcpy(temp,"\n};\n");
fwrite(temp,1, strlen(temp), fp);
fclose(fp);
::FreeLibrary(hModule);
printf("generated %s (%d bytes) successfully!\n", argv[3], sz);return 0;
}