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 };
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)
{

View File

@@ -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);

Binary file not shown.

View File

@@ -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;
}

View File

@@ -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;
}