dialogs shuffle around when progmgr is the default shell, shutdown dialog refuses to work (boo!)

This commit is contained in:
freedom
2023-07-20 04:15:21 -06:00
parent 7db4efca96
commit 292b58be46
6 changed files with 48 additions and 24 deletions

Binary file not shown.

View File

@@ -40,7 +40,10 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
{ {
MSG msg = { 0 }; MSG msg = { 0 };
HANDLE hAccel; HANDLE hAccel;
HMENU hMenu;
HMENU hSystemMenu;
WNDCLASS wc = { 0 }; WNDCLASS wc = { 0 };
WCHAR szBuffer[256];
WCHAR szClass[16]; WCHAR szClass[16];
WCHAR szUsername[UNLEN + 1] = L""; WCHAR szUsername[UNLEN + 1] = L"";
DWORD dwUsernameLen = UNLEN; DWORD dwUsernameLen = UNLEN;
@@ -49,13 +52,12 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
hAppInstance = hInstance; hAppInstance = hInstance;
// Create Important Strings // Create Important Strings
LoadString(hAppInstance, IDS_APPTITLE, szAppTitle, CharSizeOf(szAppTitle)); LoadString(hAppInstance, IDS_APPTITLE, szAppTitle, ARRAYSIZE(szAppTitle));
LoadString(hAppInstance, IDS_PMCLASS, szClass, CharSizeOf(szClass)); LoadString(hAppInstance, IDS_PMCLASS, szClass, ARRAYSIZE(szClass));
LoadString(hAppInstance, IDS_WEBSITE, szWebsite, CharSizeOf(szWebsite)); LoadString(hAppInstance, IDS_WEBSITE, szWebsite, ARRAYSIZE(szWebsite));
// And add Task Manager... // 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 // Register the Frame Window
wc.lpfnWndProc = WndProc; wc.lpfnWndProc = WndProc;
@@ -92,7 +94,24 @@ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLi
160, 80, 640, 480, 0, 0, hAppInstance, NULL)) 160, 80, 640, 480, 0, 0, hAppInstance, NULL))
return 2; 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) while (GetMessage(&msg, NULL, 0, 0) > 0)
{ {

View File

@@ -20,7 +20,6 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
/* Macros and Defines */ /* Macros and Defines */
#define GET_WM_COMMAND_ID(wParam, lParam) LOWORD(wParam) #define GET_WM_COMMAND_ID(wParam, lParam) LOWORD(wParam)
#define CharSizeOf(x) (sizeof(x) / sizeof(*x))
// RunFileDlg flags // RunFileDlg flags
#define RFF_NOBROWSE 0x0001 // Removes the browse button #define RFF_NOBROWSE 0x0001 // Removes the browse button
#define RFF_NODEFAULT 0x0002 // No default item selected #define RFF_NODEFAULT 0x0002 // No default item selected
@@ -46,7 +45,7 @@ extern WCHAR szWebsite[64];
/* Function Prototypes */ /* Function Prototypes */
// SHELLINT.C // SHELLINT.C
BOOL RunFile(HWND hWndOwner, HICON hIcon, LPWSTR lpszDir, LPWSTR lpszTitle, LPWSTR lpszDesc, DWORD dwFlags); BOOL RunFile(HWND hWndOwner, HICON hIcon, LPWSTR lpszDir, LPWSTR lpszTitle, LPWSTR lpszDesc, DWORD dwFlags);
BOOL ShutdownDlg(HWND hWndOwner); BOOL ExitWindowsDialog(HWND hWndOwner);
// WNDPROC.C // WNDPROC.C
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam);

Binary file not shown.

View File

@@ -35,25 +35,25 @@ BOOL RunFile(HWND hWndOwner,
return TRUE; return TRUE;
} }
return 0; return FALSE;
} }
/* * * *\ /* * * *\
ShutdownDlg - ExitWindowsDialog -
Produces a Shutdown dialog window. Produces a Shutdown dialog window.
RETURNS - RETURNS -
True if successful, false if unsuccessful. True if successful, false if unsuccessful.
\* * * */ \* * * */
BOOL ShutdownDlg(HWND hWndOwner) BOOL ExitWindowsDialog(HWND hWndOwner)
{ {
HMODULE hLib = LoadLibrary(L"shell32.dll"); HMODULE hLib = LoadLibrary(L"shell32.dll");
if (hLib) { if (hLib) {
FARPROC fLib = GetProcAddress(hLib, MAKEINTRESOURCEA(60)); FARPROC fLib = GetProcAddress(hLib, (LPCSTR)60);
if (fLib(hWndOwner)) if (fLib(hWndOwner))
FreeLibrary(hLib); FreeLibrary(hLib);
return TRUE; return TRUE;
} }
return 0; return FALSE;
} }

View File

@@ -53,12 +53,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_SYSCOMMAND: case WM_SYSCOMMAND:
{ {
// if (wParam == IDM_TASKMGR) { if (wParam == IDM_SHUTDOWN) {
//ShellExecute(hwndProgMgr, &TEXT("OPEN\0"), &TEXT("TASKMGR.EXE\0"), NULL, NULL, SW_NORMAL); CmdProc(hWnd, wParam, lParam);
// break; break;
// } }
//break; if (wParam == IDM_TASKMGR) {
if (wParam == IDM_FILE_SHUTDOWN) { ShellExecute(hWndProgMgr, L"open", L"TASKMGR.EXE", NULL, NULL, SW_NORMAL);
break;
}
if (wParam == IDM_FILE_EXIT) {
CmdProc(hWnd, wParam, lParam); CmdProc(hWnd, wParam, lParam);
break; break;
} }
@@ -98,12 +101,16 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
{ {
switch (GET_WM_COMMAND_ID(wParam, lParam)) { switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDM_SHUTDOWN:
ExitWindowsDialog(hWnd);
break;
case IDM_FILE_RUN: case IDM_FILE_RUN:
RunFile(hWnd, NULL, NULL, NULL, NULL, RFF_CALCDIRECTORY); RunFile(hWnd, NULL, NULL, NULL, NULL, RFF_CALCDIRECTORY);
break; break;
case IDM_FILE_SHUTDOWN: case IDM_FILE_EXIT:
ShutdownDlg(hWnd); PostQuitMessage(0);
break; break;
case IDM_HELP_INDEX: case IDM_HELP_INDEX:
@@ -113,9 +120,8 @@ LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam)
case IDM_HELP_ABOUT: case IDM_HELP_ABOUT:
{ {
WCHAR szTitle[40]; 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); ShellAbout(hWndProgMgr, szTitle, NULL, hProgMgrIcon);
break; break;
} }