Enumerating resource data in executable files
HMODULE hModule_DLL;
hModule_DLL = hModule;
break;
The following steps are to add four BMP files to MyBlog_Created_2024_11_17 project.
#pragma once
#ifdef MYCPPRESOURCE_EXPORTS
#define MYCPPRESOURCE_API __declspec(dllexport)
#else
#define MYCPPRESOURCE_API __declspec(dllimport)
#endif
extern "C" MYCPPRESOURCE_API BOOL FindResourceManifest(
LPCWSTR pFileName, LPCWSTR keyword2);
extern "C" MYCPPRESOURCE_API BOOL MyEnumResource(
LPCWSTR pFileName);
extern "C" MYCPPRESOURCE_API void MyDialog(HWND hWnd);
- #include "pch.h"
- #include "My_Cpp_Resource.h"
- #include "resource.h"
- #include <tchar.h>
- #include "shellapi.h"
- #include "Shlwapi.h"
- #include "pathcch.h"
- #include "excpt.h"
- unsigned char BOM_UNICODE[2] = { 0XFF,0XFE };
- WCHAR RT_Names[25][50] = {
- L"(0)",
- L"RT_CURSOR(1)",
- L"RT_BITMAP(2)",
- L"RT_ICON(3)",
- L"RT_MENU(4)",
- L"RT_DIALOG(5)",
- L"RT_STRING(6)",
- L"RT_FONTDIR(7)",
- L"RT_FONT(8)",
- L"RT_ACCELERATOR(9)",
- L"RT_RCDATA(10)",
- L"RT_MESSAGETABLE(11)",
- L"RT_GROUP_CURSOR(12)",
- L"(13)",
- L"RT_GROUP_ICON(14)",
- L"(15)",
- L"RT_VERSION(16)",
- L"RT_DLGINCLUDE(17)",
- L"(18)",
- L"RT_PLUGPLAY(19)",
- L"RT_VXD(20)",
- L"RT_ANICURSOR(21)",
- L"RT_ANIICON(22)",
- L"RT_HTML(23)",
- L"RT_MANIFEST(24)"
- };
- struct PNG_Image {
- DWORD SizeOfPngResource;
- LPVOID lpvoid_PNG;
- };
- PNG_Image MyPng_Image[20];
- int CountOf_PngImage;
- HFONT hFont;
- HDC hDC_memo;
- LPVOID lpLockManifest;
- DWORD SizeOfManifest;
- HWND hWnd;
- bool Found_Manifest_With_Keywords;
- const int size_filename = MAX_PATH;
- const int MaxSizeOfManifest = 8 << 20;
- char manifest[MaxSizeOfManifest];
- const size_t MaxSizeOfKeywords = 567;
- char keywords[MaxSizeOfKeywords];
- TCHAR BufferForEnumRes[3 << 20];
- TCHAR* pBuf_Start;
- DWORD cbWritten;
- BOOL CALLBACK EnumLangsFunc_Manifest(HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLang,
- LONG extra_parameter) {
- HRSRC hResInfo = FindResourceEx(hModule, lpType, lpName, wLang);
- if (hResInfo) {
- HGLOBAL hGlobal = LoadResource(hModule, hResInfo);
- if (hGlobal) {
- lpLockManifest = LockResource(hGlobal);
- SizeOfManifest = SizeofResource(hModule, hResInfo);
- if (SizeOfManifest >= MaxSizeOfManifest) {
- WCHAR TMP[500];
- wsprintf(TMP, L"Size = %i (%i)", SizeOfManifest, MaxSizeOfManifest);
- MessageBoxW(nullptr, L"manifest too large", TMP, 0);
- return TRUE;
- }
- manifest[SizeOfManifest] = '\0';
- char* pSource;
- pSource = (char*)lpLockManifest;
- for (unsigned i = 0; i < SizeOfManifest; i++) {
- manifest[i] = toupper(*pSource++);
- }
- pSource = keywords;
- for (; *pSource; pSource++)*pSource = toupper(*pSource);
- if (strstr(manifest, keywords)) Found_Manifest_With_Keywords = true;
- return TRUE;
- }
- }
- return FALSE;
- }
- BOOL CALLBACK EnumNamesFunc_Manifest(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName,
- LONG extra_parameter)
- {
- return EnumResourceLanguagesW(hModule, lpType, lpName,
- (ENUMRESLANGPROC)EnumLangsFunc_Manifest, extra_parameter);
- }
- BOOL CALLBACK EnumTypesFunc_Manifest(HMODULE hModule, LPTSTR lpType, LONG extra_parameter)
- {
- if (IS_INTRESOURCE(lpType) && lpType == RT_MANIFEST) {
- return EnumResourceNames(hModule, lpType, (ENUMRESNAMEPROC)EnumNamesFunc_Manifest, 0);
- }
- return TRUE;
- }
- int FileFilter(LPCWSTR pFileName) {
- if (PathFileExistsW(pFileName)) {
- LPCWSTR pExt = PathFindExtensionW(pFileName);
- if (StrCmpIW(pExt, L".DLL") ||
- StrCmpIW(pExt, L".EXE")) return 0;
- return -1;
- }
- return -2;
- }
- BOOL FindResourceManifest(LPCWSTR pFileName, LPCWSTR keywords2) {
- HANDLE g_hFile;
- HMODULE hModule;
- BOOL Result = FALSE;
- if (FileFilter(pFileName)) return FALSE;
- hModule = LoadLibraryExW(pFileName, nullptr, LOAD_LIBRARY_AS_DATAFILE);
- if (!hModule) return FALSE;
- __try {
- size_t size = 0;
- wcsrtombs_s(&size, keywords, &keywords2, MaxSizeOfKeywords, nullptr);
- Found_Manifest_With_Keywords = false;
- EnumResourceTypesW(hModule, (ENUMRESTYPEPROC)EnumTypesFunc_Manifest, 0);
- if (Found_Manifest_With_Keywords) {
- WCHAR filename_manifest[size_filename];
- GetTempPathW(size_filename, filename_manifest);
- GetTempFileNameW(filename_manifest, L"man", 0, filename_manifest);
- PathCchRenameExtension(filename_manifest, size_filename, L"txt");
- g_hFile = CreateFileW(filename_manifest,
- GENERIC_WRITE, 0, (LPSECURITY_ATTRIBUTES)NULL,
- CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE)NULL);
- if (g_hFile == INVALID_HANDLE_VALUE) __leave;
- __try {
- LPCSTR seperator = "\r\n================= Manifest ====================\r\n";
- char Title[size_filename];
- size_t size;
- ZeroMemory(Title, size_filename);
- wcstombs_s(&size, Title, pFileName, size_filename);
- WriteFile(g_hFile, Title, (DWORD)size, &cbWritten, NULL);
- WriteFile(g_hFile, seperator, (DWORD)strlen(seperator), &cbWritten, NULL);
- WriteFile(g_hFile, lpLockManifest, SizeOfManifest, &cbWritten, NULL);
- }
- __finally {
- CloseHandle(g_hFile);
- ShellExecuteW(NULL, L"Open", filename_manifest, NULL, NULL, SW_NORMAL);
- }
- Result = TRUE;
- }
- }
- __finally {
- FreeLibrary(hModule);
- return Result;
- }
- }
- BOOL CALLBACK EnumLangsFunc(HMODULE hModule, LPCTSTR lpType, LPCTSTR lpName, WORD wLang,
- LONG extra_parameter)
- {
- HRSRC hResInfo;
- hResInfo = FindResourceEx(hModule, lpType, lpName, wLang);
- if (!hResInfo) {
- MessageBox(0, L"hResInfo", NULL, 0);
- return FALSE;
- }
- const wchar_t TypeFormat[] = L"%-30s";
- if (!IS_INTRESOURCE(lpType))
- {
- wsprintfW(pBuf_Start, TypeFormat, lpType);
- }
- else {
- wsprintfW(pBuf_Start, TypeFormat,
- RT_Names[reinterpret_cast<USHORT>(lpType)]);
- }
- pBuf_Start += wcslen(pBuf_Start);
- // const wchar_t NameFormat[] = L" %-30s ";
- wchar_t Temp[111];
- if (!IS_INTRESOURCE(lpName))
- {
- wsprintfW(pBuf_Start, L"(%-30s)", lpName);
- }
- else {
- _itow_s(reinterpret_cast<USHORT>(lpName), Temp, 11);
- wsprintfW(pBuf_Start, L" %-30s ", Temp);
- }
- pBuf_Start += wcslen(pBuf_Start);
- wchar_t LocaleName[300];
- LCIDToLocaleName(wLang, LocaleName, 300, 0);
- wsprintfW(pBuf_Start, L" %s(%X) %p %X\r\n",
- LocaleName, (LCID)wLang, (void*)hResInfo, SizeofResource(hModule, hResInfo));
- pBuf_Start += wcslen(pBuf_Start);
- if (!IS_INTRESOURCE(lpType)) {
- if (!wcscmp(lpType, L"PNG") && hResInfo) {
- HGLOBAL hGlobal = LoadResource(hModule, hResInfo);
- if (hGlobal) {
- MyPng_Image[CountOf_PngImage].lpvoid_PNG = LockResource(hGlobal);
- MyPng_Image[CountOf_PngImage].SizeOfPngResource = SizeofResource(hModule, hResInfo);
- CountOf_PngImage += 1;
- }
- }
- }
- return TRUE;
- }
- BOOL CALLBACK EnumNamesFunc(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName,
- LONG extra_parameter)
- {
- return EnumResourceLanguages(hModule, lpType, lpName, (ENUMRESLANGPROC)EnumLangsFunc, 0);
- }
- BOOL CALLBACK EnumTypesFunc(HMODULE hModule, LPTSTR lpType, LONG extra_parameter)
- {
- *pBuf_Start++ = L'\r';
- *pBuf_Start++ = L'\n';
- return EnumResourceNames(hModule, lpType, (ENUMRESNAMEPROC)EnumNamesFunc, 0);
- }
- BOOL MyEnumResource(LPCWSTR pFileName) {
- HMODULE hModule;
- BOOL Result = FALSE;
- if (FileFilter(pFileName)) return FALSE;
- hModule = LoadLibraryExW(pFileName, nullptr, LOAD_LIBRARY_AS_DATAFILE);
- if (!hModule) return FALSE;
- __try {
- CountOf_PngImage = 0;
- pBuf_Start = BufferForEnumRes;
- wsprintfW(pBuf_Start,
- L"%s\r\n=============== Enumerate resource ================\r\n"
- L" Tyep Name "
- L"LCID Resource ptr size",
- pFileName);
- pBuf_Start += wcslen(pBuf_Start);
- if (!EnumResourceTypes(hModule, (ENUMRESTYPEPROC)EnumTypesFunc, 0)) {
- __leave;
- }
- WCHAR Filename_resinfo[size_filename];
- GetTempPathW(size_filename, Filename_resinfo);
- GetTempFileNameW(Filename_resinfo, L"Res", 0, Filename_resinfo);
- PathCchRenameExtension(Filename_resinfo, size_filename, L"txt");
- HANDLE g_hFile;
- g_hFile = CreateFileW(Filename_resinfo,
- GENERIC_WRITE, 0, // share mode
- (LPSECURITY_ATTRIBUTES)NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
- (HANDLE)NULL); // no template
- if (g_hFile == INVALID_HANDLE_VALUE)__leave;
- __try {
- WriteFile(g_hFile, BOM_UNICODE, (DWORD)sizeof(BOM_UNICODE), &cbWritten, nullptr);
- WriteFile(g_hFile, BufferForEnumRes,
- DWORD(sizeof(BufferForEnumRes[0]) * (pBuf_Start - BufferForEnumRes)), &cbWritten, NULL);
- }
- __finally {
- CloseHandle(g_hFile);
- ShellExecuteW(nullptr, L"Open", Filename_resinfo, nullptr, nullptr, SW_NORMAL);
- Result = TRUE;
- }
- if (CountOf_PngImage) {
- for (int i = 0; i < CountOf_PngImage; i++) {
- WCHAR filename_png[size_filename];
- GetTempPathW(300, filename_png);
- GetTempFileNameW(filename_png, L"png", 0, filename_png);
- PathCchRenameExtension(filename_png, size_filename, L"png");
- HANDLE g_hFile;
- g_hFile = CreateFileW(filename_png, GENERIC_WRITE, 0,
- (LPSECURITY_ATTRIBUTES)NULL, CREATE_ALWAYS,
- FILE_ATTRIBUTE_NORMAL, (HANDLE)NULL); // no template
- if (g_hFile == INVALID_HANDLE_VALUE) __leave;
- WriteFile(g_hFile, MyPng_Image[i].lpvoid_PNG,
- MyPng_Image[i].SizeOfPngResource, &cbWritten, NULL);
- CloseHandle(g_hFile);
- ShellExecute(NULL, L"Edit", filename_png, NULL, NULL, SW_NORMAL);
- }
- }
- }
- __finally {
- FreeLibrary(hModule);
- }
- return Result;
- }
- extern HMODULE hModule_DLL;
- const CHAR Hi[] = "Hi, I am Mr. Chen.";
- INT_PTR CALLBACK About1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- UNREFERENCED_PARAMETER(lParam);
- switch (message)
- {
- case WM_INITDIALOG:
- return (INT_PTR)TRUE;
- case WM_PAINT:
- {
- HDC hdc;
- PAINTSTRUCT ps;
- HANDLE hImage_Bitmap;
- BITMAP bmp{};
- RECT client_rect{};
- hdc = BeginPaint(hDlg, &ps);
- HDC hDC_memory;
- hDC_memory = CreateCompatibleDC(hdc);
- GetClientRect(hDlg, &client_rect);
- hImage_Bitmap = LoadBitmapW(hModule_DLL, MAKEINTRESOURCE(IDB_BITMAP1));
- if (hImage_Bitmap) {
- SelectObject(hDC_memory, hImage_Bitmap);
- GetObjectW(hImage_Bitmap, sizeof(bmp), &bmp);
- }
- RECT IDOK_Rect;
- GetClientRect(GetDlgItem(hDlg, IDOK), &IDOK_Rect);
- if (hFont)DeleteObject(hFont);
- hFont = CreateFontW(IDOK_Rect.bottom, IDOK_Rect.right / 6, 0, 0,
- FW_NORMAL, 0, 0, 0, CHINESEBIG5_CHARSET, OUT_RASTER_PRECIS,
- CLEARTYPE_QUALITY, DEFAULT_QUALITY, FF_ROMAN | VARIABLE_PITCH, L"Dubai");
- if (hFont) SelectObject(hdc, hFont);
- SetTextColor(hdc, RGB(234, 5, 6));
- POINT points[2];
- points[0] = { 0,0 };
- MapWindowPoints(GetDlgItem(hDlg, IDOK), hDlg, points, 1);
- TextOutA(hdc, points[0].x + IDOK_Rect.right, points[0].y, Hi, strlen(Hi));
- StretchBlt(hdc, 0, 0, client_rect.right, points[0].y,
- hDC_memory, 0, 0, bmp.bmWidth, bmp.bmHeight,
- SRCCOPY);
- DeleteDC(hDC_memory);
- EndPaint(hDlg, &ps);
- break;
- }
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
- {
- EndDialog(hDlg, LOWORD(wParam));
- return (INT_PTR)TRUE;
- }
- break;
- }
- return (INT_PTR)FALSE;
- }
- void MyDialog(HWND hWnd) {
- MessageBeep(0);
- DPI_AWARENESS_CONTEXT hDPI =
- SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
- DialogBoxW(hModule_DLL, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, About1);
- SetThreadDpiAwarenessContext(hDPI);
- }
#pragma once
#include "resource.h"
#include "shlwapi.h"
#include "strsafe.h"
#include "shellapi.h"
#include "My_Cpp_Resource.h"
void MainWin_WM_PAINT(HWND, HDC);
void DoubleClick(HWND);
- #include "MyBlog_Created_2024_11_17.h"
- void Test_SetDIbits(HDC, HBITMAP);
- void Store_BmpImage_To_File(BITMAPINFO* bmif, LPCWSTR pfilename);
- extern HINSTANCE hInst;
- HDC hDC_memo;
- BITMAP bmp;
- WCHAR Char_Buffer1[500] = L"Hi, I am Mr. Chen.";
- INT32 CX_Screen, CY_Screen;
- UINT32 Dpi;
- HBITMAP hImage_Bitmap[4];
- RECT client_rect;
- unsigned int loop2 = 0;
- COLORREF rgb[4] = { RGB(234,5,3),RGB(3,234,5),RGB(34,23,123),RGB(111,111,111) };
- void debug(LPCSTR str) {
- MessageBeep(MB_ICONERROR);
- MessageBoxA(NULL, str, "MyDebug", 0);
- }
- void DoubleClick(HWND hWnd) {
- if (++loop2 >= 4)loop2 = 0;
- GetObjectW(hImage_Bitmap[loop2], sizeof(bmp), &bmp);
- SelectObject(hDC_memo, hImage_Bitmap[loop2]);
- InvalidateRect(hWnd, NULL, FALSE);
- }
- void MainWin_WM_PAINT(HWND hWnd, HDC hdc) {
- static boolean FirstTime = true;
- static HFONT hFont;
- GetClientRect(hWnd, &client_rect);
- if (FirstTime) {
- FirstTime = false;
- //Dpi = GetSystemDpiForProcess((HANDLE)NULL);
- // CX_Screen = GetSystemMetricsForDpi(SM_CXSCREEN, Dpi);
- // CY_Screen = GetSystemMetricsForDpi(SM_CYSCREEN, Dpi);
- hImage_Bitmap[3] = LoadBitmapW(hInst, MAKEINTRESOURCE(IDB_BITMAP3));
- hImage_Bitmap[2] = LoadBitmapW(hInst, MAKEINTRESOURCE(IDB_BITMAP2));
- hImage_Bitmap[1] = LoadBitmapW(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
- hImage_Bitmap[0] = LoadBitmapW(hInst, MAKEINTRESOURCE(IDB_BITMAP4));
- Test_SetDIbits(hdc, hImage_Bitmap[3]);
- hDC_memo = CreateCompatibleDC(hdc);
- SetStretchBltMode(hDC_memo, HALFTONE);
- for (int i = 0; i < 4; i++) {
- GetObjectW(hImage_Bitmap[i], sizeof(bmp), &bmp);
- SelectObject(hDC_memo, hImage_Bitmap[i]);
- if (!StretchBlt(hdc, 0, 0, client_rect.right, client_rect.bottom,
- hDC_memo, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY)) debug("StretchBlt");
- Sleep(300);
- }
- }
- SetStretchBltMode(hdc, HALFTONE);
- if (!StretchBlt(hdc, 0, 0, client_rect.right, client_rect.bottom,
- hDC_memo, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY)) debug("StretchBlt");
- if (hFont)DeleteObject(hFont);
- hFont = CreateFontW(client_rect.bottom / 20, client_rect.right / 70, 0, 0,
- 500, 0, 0, 0, CHINESEBIG5_CHARSET, OUT_RASTER_PRECIS, CLEARTYPE_QUALITY,
- 0, FF_ROMAN | VARIABLE_PITCH, L"Dubai");
- if (hFont) SelectObject(hdc, hFont);
- SetTextColor(hdc, rgb[loop2]);
- DrawTextW(hdc, Char_Buffer1, (int)wcslen(Char_Buffer1), &client_rect, 0);
- }
- void Test_SetDIbits(HDC hdc, HBITMAP hBitmap_memo) {
- HDC hDC_memo;
- hDC_memo = CreateCompatibleDC(hdc);
- int saveDC = SaveDC(hDC_memo);
- HGLOBAL hDIB = GlobalAlloc(GHND, 50 << 20);
- if (hDIB) {
- int nline; BITMAP bmp;
- GetObjectW(hBitmap_memo, sizeof(bmp), &bmp);
- SelectObject(hDC_memo, hBitmap_memo);
- SetTextColor(hDC_memo, RGB(234, 56, 67));
- SetBkColor(hDC_memo, RGB(23, 156, 167));
- TextOutA(hDC_memo, bmp.bmWidth - 200, bmp.bmHeight - 30,
- "Hello world", 11);
- UINT usage_rgb = DIB_RGB_COLORS;
- UINT usage_pal = DIB_PAL_COLORS;
- UINT Usage = usage_rgb;
- BITMAPINFO* bmif = (BITMAPINFO*)GlobalLock(hDIB);
- bmif->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- nline = GetDIBits(hDC_memo, hBitmap_memo, 0, bmp.bmHeight,
- nullptr, bmif, Usage);
- if (!nline) debug("GetDIBits error 1");
- nline = GetDIBits(hDC_memo, hBitmap_memo, 0, bmp.bmHeight,
- bmif->bmiColors, bmif, Usage);
- Store_BmpImage_To_File(bmif, L"MyDIBImage.bmp");
- if (!nline)
- wsprintf(Char_Buffer1,
- L" Width=%i (Height=%i nline=%i) (%i,%i) size=%iMB (%i %i) (%i %i)",
- bmif->bmiHeader.biWidth,
- bmif->bmiHeader.biHeight, nline,
- bmif->bmiHeader.biCompression, BI_BITFIELDS,
- (bmif->bmiHeader.biSizeImage >> 20),
- bmif->bmiHeader.biXPelsPerMeter, bmif->bmiHeader.biYPelsPerMeter,
- bmif->bmiHeader.biClrUsed, bmif->bmiHeader.biClrImportant
- );
- RECT r2{ client_rect.right / 4 , client_rect.bottom / 4,
- client_rect.right / 2, client_rect.bottom / 2 };
- Rectangle(hDC_memo, r2.left, r2.top, r2.right, r2.bottom);
- DrawTextW(hDC_memo, L"ABCDEFG", 7, &r2, DT_CENTER);
- r2.top = r2.bottom - 30;
- DrawTextW(hDC_memo, L"1234567", 7, &r2, DT_RIGHT);
- if (!SetDIBits(hDC_memo, hBitmap_memo, 0, nline,
- bmif->bmiColors, bmif, Usage)) debug("SetDIBits");
- if (GlobalUnlock(hDIB))debug("GlobalUnlock");
- GlobalFree(hDIB);
- }
- if (!RestoreDC(hDC_memo, -1)) debug("RestoreDC error");
- DeleteObject(hDC_memo);
- }
- void Store_BmpImage_To_File(BITMAPINFO* bmif, LPCWSTR pfilename) {
- BITMAPFILEHEADER Bitmap_File_Header;
- Bitmap_File_Header.bfType = 0x4d42;
- Bitmap_File_Header.bfOffBits = sizeof(BITMAPINFO) + sizeof(BITMAPFILEHEADER);
- Bitmap_File_Header.bfSize = Bitmap_File_Header.bfOffBits + bmif->bmiHeader.biSizeImage;
- WCHAR Filename_bmp[MAX_PATH];
- GetTempPathW(MAX_PATH, Filename_bmp);
- PathCombineW(Filename_bmp, Filename_bmp, pfilename);
- HANDLE g_hFile;
- g_hFile = CreateFileW(Filename_bmp,
- GENERIC_WRITE, 0, // share mode
- (LPSECURITY_ATTRIBUTES)NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
- (HANDLE)NULL);
- if (g_hFile == INVALID_HANDLE_VALUE)return;
- __try {
- DWORD cbWritten;
- WriteFile(g_hFile, &Bitmap_File_Header, sizeof(BITMAPFILEHEADER)
- , &cbWritten, NULL);
- WriteFile(g_hFile, bmif, sizeof(BITMAPINFOHEADER)
- , &cbWritten, NULL);
- WriteFile(g_hFile, bmif->bmiColors, bmif->bmiHeader.biSizeImage + (4 << 10)
- , &cbWritten, NULL);
- }
- __finally {
- CloseHandle(g_hFile);
- ShellExecuteW(nullptr, L"Open", Filename_bmp, nullptr, nullptr, SW_NORMAL);
- }
- }
- // MyBlog_Created_2024_11_17.cpp : 定義應用程式的進入點。
- //
- #include "framework.h"
- #include "MyBlog_Created_2024_11_17.h"
- #define MAX_LOADSTRING 100
- // 全域變數:
- HINSTANCE hInst; // 目前執行個體
- WCHAR szTitle[MAX_LOADSTRING]; // 標題列文字
- WCHAR szWindowClass[MAX_LOADSTRING]; // 主視窗類別名稱
- // 這個程式碼模組所包含之函式的向前宣告:
- ATOM MyRegisterClass(HINSTANCE hInstance);
- BOOL InitInstance(HINSTANCE, int);
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
- int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
- _In_opt_ HINSTANCE hPrevInstance,
- _In_ LPWSTR lpCmdLine,
- _In_ int nCmdShow)
- {
- UNREFERENCED_PARAMETER(hPrevInstance);
- UNREFERENCED_PARAMETER(lpCmdLine);
- // TODO: 在此放置程式碼。
- // 將全域字串初始化
- LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- LoadStringW(hInstance, IDC_MYBLOGCREATED20241117, szWindowClass, MAX_LOADSTRING);
- MyRegisterClass(hInstance);
- // 執行應用程式初始化:
- if (!InitInstance(hInstance, nCmdShow))
- {
- return FALSE;
- }
- HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MYBLOGCREATED20241117));
- MSG msg;
- // 主訊息迴圈:
- while (GetMessage(&msg, nullptr, 0, 0))
- {
- if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return (int)msg.wParam;
- }
- //
- // 函式: MyRegisterClass()
- //
- // 用途: 註冊視窗類別。
- //
- ATOM MyRegisterClass(HINSTANCE hInstance)
- {
- WNDCLASSEXW wcex;
- wcex.cbSize = sizeof(WNDCLASSEX);
- wcex.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYBLOGCREATED20241117));
- wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_MYBLOGCREATED20241117);
- wcex.lpszClassName = szWindowClass;
- wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
- return RegisterClassExW(&wcex);
- }
- //
- // 函式: InitInstance(HINSTANCE, int)
- //
- // 用途: 儲存執行個體控制代碼並且建立主視窗
- //
- // 註解:
- //
- // 在這個函式中,我們將執行個體控制代碼儲存在全域變數中,
- // 並建立及顯示主程式視窗。
- //
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
- {
- hInst = hInstance; // 將執行個體控制代碼儲存在全域變數中
- HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
- if (!hWnd)
- {
- return FALSE;
- }
- ShowWindow(hWnd, nCmdShow);
- UpdateWindow(hWnd);
- return TRUE;
- }
- //
- // 函式: WndProc(HWND, UINT, WPARAM, LPARAM)
- //
- // 用途: 處理主視窗的訊息。
- //
- // WM_COMMAND - 處理應用程式功能表
- // WM_PAINT - 繪製主視窗
- // WM_DESTROY - 張貼結束訊息然後傳回
- //
- //
- const wchar_t Dll_NAME1[] = L"C:\\Program Files\\IIS Express\\nativrd2.dll";
- const wchar_t Dll_NAME2[] = L"C:\\Program Files (x86)\\IIS Express\\asp.dll";
- const wchar_t Notepad[] = L"C:\\Windows\\system32\\notepad.exe";
- WCHAR Main_ModuleFileName[MAX_PATH];
- LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch (message)
- {
- case WM_CREATE:
- GetModuleFileNameW(NULL, Main_ModuleFileName, MAX_PATH);
- break;
- case WM_RBUTTONDBLCLK:
- MyDialog(hWnd);
- break;
- case WM_LBUTTONDBLCLK:
- DoubleClick(hWnd);
- break;
- case WM_COMMAND:
- {
- int wmId = LOWORD(wParam);
- // 剖析功能表選取項目:
- switch (wmId)
- {
- case IDM_FindResourceManifest:
- FindResourceManifest(Notepad, L"</Assembly>");
- FindResourceManifest(Dll_NAME1, L"</Assembly>");
- FindResourceManifest(Dll_NAME2, L"</Assembly>");
- FindResourceManifest(Main_ModuleFileName, L"</Assembly>");
- break;
- case IDM_EnumResource:
- MyEnumResource(Notepad);
- MyEnumResource(Dll_NAME1);
- MyEnumResource(Dll_NAME2);
- MyEnumResource(Main_ModuleFileName);
- break;
- case IDM_ABOUT:
- DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
- break;
- case IDM_EXIT:
- DestroyWindow(hWnd);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- }
- break;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hWnd, &ps);
- // TODO: 在此新增任何使用 hdc 的繪圖程式碼...
- MainWin_WM_PAINT(hWnd, hdc);
- EndPaint(hWnd, &ps);
- }
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- // [關於] 方塊的訊息處理常式。
- INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
- {
- UNREFERENCED_PARAMETER(lParam);
- switch (message)
- {
- case WM_INITDIALOG:
- return (INT_PTR)TRUE;
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
- {
- EndDialog(hDlg, LOWORD(wParam));
- return (INT_PTR)TRUE;
- }
- break;
- }
- return (INT_PTR)FALSE;
- }
留言
張貼留言