diff --git a/progmgr/lang/res_en-US.rc b/progmgr/lang/res_en-US.rc index 7b689ca..472b373 100644 Binary files a/progmgr/lang/res_en-US.rc and b/progmgr/lang/res_en-US.rc differ diff --git a/progmgr/progmgr.c b/progmgr/progmgr.c index 6c16cf8..ae399c0 100644 --- a/progmgr/progmgr.c +++ b/progmgr/progmgr.c @@ -40,7 +40,10 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi { MSG msg = { 0 }; HANDLE hAccel; + HMENU hMenu; + HMENU hSystemMenu; WNDCLASS wc = { 0 }; + WCHAR szBuffer[256]; WCHAR szClass[16]; WCHAR szUsername[UNLEN + 1] = L""; DWORD dwUsernameLen = UNLEN; @@ -49,13 +52,12 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi hAppInstance = hInstance; // Create Important Strings - LoadString(hAppInstance, IDS_APPTITLE, szAppTitle, CharSizeOf(szAppTitle)); - LoadString(hAppInstance, IDS_PMCLASS, szClass, CharSizeOf(szClass)); - LoadString(hAppInstance, IDS_WEBSITE, szWebsite, CharSizeOf(szWebsite)); + LoadString(hAppInstance, IDS_APPTITLE, szAppTitle, ARRAYSIZE(szAppTitle)); + LoadString(hAppInstance, IDS_PMCLASS, szClass, ARRAYSIZE(szClass)); + LoadString(hAppInstance, IDS_WEBSITE, szWebsite, ARRAYSIZE(szWebsite)); // And add Task Manager... - // LoadString(hAppInstance, IDS_TASKMGR, szBuffer, CharSizeOf(szBuffer)); - // InsertMenu(hSystemMenu, 6, MF_BYPOSITION | MF_STRING, IDM_TASKMGR, szBuffer); + // // Register the Frame Window wc.lpfnWndProc = WndProc; @@ -78,7 +80,7 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi return FALSE; bIsDefaultShell = IsProgMgrDefaultShell(); - + GetUserNameEx(NameSamCompatible, szUsername, &dwUsernameLen); // OutputDebugString(szUsername); @@ -92,7 +94,24 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi 160, 80, 640, 480, 0, 0, hAppInstance, NULL)) return 2; - //hSystemMenu = GetSystemMenu(hwndProgman, FALSE); + // Load the menus... + hMenu = GetMenu(hWndProgMgr); + hSystemMenu = GetSystemMenu(hWndProgMgr, FALSE); + + if (bIsDefaultShell) { + // Do all the fun stuff since we're the default shell + DeleteMenu(hSystemMenu, SC_CLOSE, MF_BYCOMMAND); + + LoadString(hAppInstance, IDS_SHUTDOWN, szBuffer, ARRAYSIZE(szBuffer)); + InsertMenu(hSystemMenu, 6, MF_BYPOSITION | MF_STRING, IDM_SHUTDOWN, szBuffer); + ModifyMenu(hMenu, IDM_FILE_EXIT, MF_BYCOMMAND | MF_STRING, IDM_SHUTDOWN, szBuffer); + + LoadString(hAppInstance, IDS_RUN, szBuffer, ARRAYSIZE(szBuffer)); + InsertMenu(hSystemMenu, 6, MF_BYPOSITION | MF_STRING, IDM_FILE_RUN, szBuffer); + + LoadString(hAppInstance, IDS_TASKMGR, szBuffer, ARRAYSIZE(szBuffer)); + InsertMenu(hSystemMenu, 6, MF_BYPOSITION | MF_STRING, IDM_TASKMGR, szBuffer); + } while (GetMessage(&msg, NULL, 0, 0) > 0) { diff --git a/progmgr/progmgr.h b/progmgr/progmgr.h index 63f7e66..ce8ecf9 100644 --- a/progmgr/progmgr.h +++ b/progmgr/progmgr.h @@ -20,7 +20,6 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") /* Macros and Defines */ #define GET_WM_COMMAND_ID(wParam, lParam) LOWORD(wParam) -#define CharSizeOf(x) (sizeof(x) / sizeof(*x)) // RunFileDlg flags #define RFF_NOBROWSE 0x0001 // Removes the browse button #define RFF_NODEFAULT 0x0002 // No default item selected @@ -46,7 +45,7 @@ extern WCHAR szWebsite[64]; /* Function Prototypes */ // SHELLINT.C BOOL RunFile(HWND hWndOwner, HICON hIcon, LPWSTR lpszDir, LPWSTR lpszTitle, LPWSTR lpszDesc, DWORD dwFlags); -BOOL ShutdownDlg(HWND hWndOwner); +BOOL ExitWindowsDialog(HWND hWndOwner); // WNDPROC.C LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam); \ No newline at end of file diff --git a/progmgr/resource.h b/progmgr/resource.h index 55ff830..0d45de3 100644 Binary files a/progmgr/resource.h and b/progmgr/resource.h differ diff --git a/progmgr/shellint.c b/progmgr/shellint.c index 575377a..46af869 100644 --- a/progmgr/shellint.c +++ b/progmgr/shellint.c @@ -35,25 +35,25 @@ BOOL RunFile(HWND hWndOwner, return TRUE; } - return 0; + return FALSE; } /* * * *\ - ShutdownDlg - + ExitWindowsDialog - Produces a Shutdown dialog window. RETURNS - True if successful, false if unsuccessful. \* * * */ -BOOL ShutdownDlg(HWND hWndOwner) +BOOL ExitWindowsDialog(HWND hWndOwner) { HMODULE hLib = LoadLibrary(L"shell32.dll"); if (hLib) { - FARPROC fLib = GetProcAddress(hLib, MAKEINTRESOURCEA(60)); + FARPROC fLib = GetProcAddress(hLib, (LPCSTR)60); if (fLib(hWndOwner)) FreeLibrary(hLib); return TRUE; } - return 0; + return FALSE; } diff --git a/progmgr/wndproc.c b/progmgr/wndproc.c index 5bd3d47..24594ee 100644 --- a/progmgr/wndproc.c +++ b/progmgr/wndproc.c @@ -53,12 +53,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) case WM_SYSCOMMAND: { - // if (wParam == IDM_TASKMGR) { - //ShellExecute(hwndProgMgr, &TEXT("OPEN\0"), &TEXT("TASKMGR.EXE\0"), NULL, NULL, SW_NORMAL); - // break; - // } - //break; - if (wParam == IDM_FILE_SHUTDOWN) { + if (wParam == IDM_SHUTDOWN) { + CmdProc(hWnd, wParam, lParam); + break; + } + if (wParam == IDM_TASKMGR) { + ShellExecute(hWndProgMgr, L"open", L"TASKMGR.EXE", NULL, NULL, SW_NORMAL); + break; + } + if (wParam == IDM_FILE_EXIT) { CmdProc(hWnd, wParam, lParam); break; } @@ -98,12 +101,16 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam) { switch (GET_WM_COMMAND_ID(wParam, lParam)) { + case IDM_SHUTDOWN: + ExitWindowsDialog(hWnd); + break; + case IDM_FILE_RUN: RunFile(hWnd, NULL, NULL, NULL, NULL, RFF_CALCDIRECTORY); break; - case IDM_FILE_SHUTDOWN: - ShutdownDlg(hWnd); + case IDM_FILE_EXIT: + PostQuitMessage(0); break; case IDM_HELP_INDEX: @@ -113,9 +120,8 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam) case IDM_HELP_ABOUT: { WCHAR szTitle[40]; - // OutputDebugString(L"ABOUT BALLS!"); - LoadString(hAppInstance, IDS_APPTITLE, szTitle, CharSizeOf(szTitle)); + LoadString(hAppInstance, IDS_APPTITLE, szTitle, ARRAYSIZE(szTitle)); ShellAbout(hWndProgMgr, szTitle, NULL, hProgMgrIcon); break; }