From ed7c892ac24a2a752082506b28a2d6c56ca69d71 Mon Sep 17 00:00:00 2001 From: freedom Date: Wed, 26 Jul 2023 23:38:18 -0600 Subject: [PATCH] big commit here, desktop stuff mostly, not 100% working yet but progress is progress and i gotta use git --- .gitignore | 2 + misc/superman.ico | Bin 0 -> 766 bytes progmgr/desktop.c | 129 ++++++++++++++++++++++++++++++- progmgr/lang/res_en-US.rc | Bin 6042 -> 6836 bytes progmgr/progmgr.c | 27 ++++--- progmgr/progmgr.h | 6 +- progmgr/progmgr.vcxproj | 2 +- progmgr/progmgr.vcxproj.filters | 2 +- progmgr/registry.c | 10 +-- progmgr/resource.h | Bin 3558 -> 4044 bytes progmgr/{shellint.c => sysint.c} | 30 ++++++- progmgr/wndproc.c | 2 + 12 files changed, 187 insertions(+), 23 deletions(-) create mode 100644 misc/superman.ico rename progmgr/{shellint.c => sysint.c} (72%) diff --git a/.gitignore b/.gitignore index 2728a7d..bd051b0 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,5 @@ dkms.conf /progmgr/RCa10968 /progmgr/icons/Thumbs.db /bin/ +/misc/supermiumman.png +/bin.7z diff --git a/misc/superman.ico b/misc/superman.ico new file mode 100644 index 0000000000000000000000000000000000000000..8b324239acf4cc6f3cf858a0b3e64d0d9f2bd19a GIT binary patch literal 766 zcmZvZu};G<5QcvvqzDNq&4Sd4jJyRIGV(Cl!WM7whIpe49s3ZKSQyQgq3ZG9*-2Bx zrN5o;{`1*!0mrAVchLC01D-g)P&L(14)+`ZPw)TmH0gMsCXRfiJf>-)A@+lazEONM zrObFd9NHy}-xg|H<@m>s$F-nQUvOL+JQy>PI^Z*LN;KH-GwU(nsw(>^i#`PJs^rJu z(Z9>=U1pgB`VX1A#HBD%+^__%Tv>nmEEqOClLL8Ye#9UW7@by%*hm}`MoSX6HtRcV z%E@+vtj+b~!ctClz$vFX;(&_AK zjhA)?tF5hV!(`Lc72>ld&RTJ%XvhzB%2IEu6CAnV+JdDjekV1Vp82kNW!`iF29>rx JbLpl0l3&(El79dI literal 0 HcmV?d00001 diff --git a/progmgr/desktop.c b/progmgr/desktop.c index 28b46c9..41e4a1b 100644 --- a/progmgr/desktop.c +++ b/progmgr/desktop.c @@ -6,4 +6,131 @@ Only visible as the default shell. LICENSE INFORMATION - MIT License, see LICENSE.txt in the root folder -\* * * * * * * */ \ No newline at end of file +\* * * * * * * */ + +/* Headers */ +#include "progmgr.h" +#include "resource.h" +// #define WIN32_LEAN_AND_MEAN +#include + +/* Variables */ +HWND hWndDesktop; +RECT rcRoot; + +/* Functions */ + +/* * * *\ + CreateDesktopWindow - + Creates the invisible desktop window. + RETURNS - + True if successful, false if unsuccessful. +\* * * */ +BOOL CreateDesktopWindow() +{ + MSG msg = { 0 }; + WNDCLASSEX wc = { 0 }; + WCHAR szBuffer[MAX_PATH]; + WCHAR szClass[16]; + + // If we fail, we shouldn't be here anyways. + //if (GetShellWindow()) + // return FALSE; + + // Get size of the root HWND + GetWindowRect(GetDesktopWindow(), &rcRoot); + + // Load the window class string + LoadString(hAppInstance, IDS_DTCLASS, szClass, ARRAYSIZE(szClass)); + + // Refresh the wallpaper... + SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, szBuffer, 0); + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, szBuffer, SPIF_SENDCHANGE); + + // Reset the work area (removes dead-space after switching from another shell) + // May have unintended consequences. Doesn't work with multiple monitors. + SystemParametersInfo(SPI_SETWORKAREA, 0, &rcRoot, SPIF_SENDCHANGE); + + // Register the desktop window + wc.cbSize = sizeof(WNDCLASSEX); + wc.lpfnWndProc = DeskWndProc; + wc.hInstance = hAppInstance; + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(30); + wc.style = CS_NOCLOSE; + wc.lpszClassName = szClass; + if (!RegisterClassEx(&wc)) + return FALSE; + + if (!CreateWindowEx(WS_EX_TOOLWINDOW, wc.lpszClassName, NULL, WS_VISIBLE, + rcRoot.left, rcRoot.top, rcRoot.right - rcRoot.left, rcRoot.bottom - rcRoot.top, + NULL, NULL, hAppInstance, NULL)); + return 2; + + while (GetMessage(&msg, NULL, 0, 0) > 0) + { + DispatchMessage(&msg); + } + + return TRUE; +} + +/* * * *\ + DeskWndProc - + Program Manager's desktop window procedure. + RETURNS - + Zero if nothing, otherwise returns the good stuff. +\* * * */ +LRESULT CALLBACK DeskWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + + case WM_CREATE: + // Populate hWndDesktop + hWndDesktop = hWnd; + + // Set the window position to shell + SetShellWindow(hWndDesktop); + ShowWindow(hWndDesktop, SW_MAXIMIZE); + + // Strip the border from the desktop window + SetWindowLongPtr(hWndDesktop, GWL_STYLE, WS_POPUP); + + // Size the window to take up the primary monitor's desktop + SetWindowPos(hWndDesktop, HWND_BOTTOM, + rcRoot.left, rcRoot.top, rcRoot.right - rcRoot.left, rcRoot.bottom - rcRoot.top, + SWP_FRAMECHANGED | SWP_NOACTIVATE); + + // Finally, bring Program Manager to the foreground. + SetWindowPos(hWndProgMgr, HWND_TOP, + 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + + break; + + case WM_ACTIVATE: + case WM_DPICHANGED: + case WM_DISPLAYCHANGE: + case WM_DEVICECHANGE: + // Get size of the root HWND + GetWindowRect(GetDesktopWindow(), &rcRoot); + SetWindowPos(hWndDesktop, HWND_BOTTOM, + rcRoot.left, rcRoot.top, rcRoot.right - rcRoot.left, rcRoot.bottom - rcRoot.top, + SWP_NOACTIVATE); + break; + + case WM_WINDOWPOSCHANGING: + case WM_SYSCOMMAND: + case WM_COMMAND: + break; + + case WM_DESTROY: + case WM_CLOSE: + break; + + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; + +} \ No newline at end of file diff --git a/progmgr/lang/res_en-US.rc b/progmgr/lang/res_en-US.rc index e5f759ebca6d949b53170a9ec9a746adc49670e3..d4df2989145ca54e1297ea88397dc7c38e3742f8 100644 GIT binary patch delta 450 zcmY+BO-lk%6o%i*uNjGpi_ub~sl}{7fi)R?U@!0~eQQGxcBdBbb(C#FjxQAftFPwGM+d@u?!C zedxBMIniR#!3n1|SeoUsUvPet>^@yP++BlaObD|sS?2SsJ->U}zfd8;AyHG>ytpPQ zH{AQB%(_fT6*63Ul}XB=#90T(%Xus{RDqEih8DX7>X&Hg*N}TFoyehzETj5&JYUe@ Ki0)Xd@ca*uon8q5 delta 90 zcmdmDI!k}UFLqWv1|XcQ&n`VVO+aC?44dBM0*+0SfAMoop2sOL*@`m;%1(ldNpRho iJcV0nvJiL6WF1ki&GWcZm^a@O>| 0) diff --git a/progmgr/progmgr.h b/progmgr/progmgr.h index 2c2a0e6..b778786 100644 --- a/progmgr/progmgr.h +++ b/progmgr/progmgr.h @@ -40,9 +40,13 @@ extern WCHAR szProgMgr[]; extern WCHAR szWebsite[64]; /* Function Prototypes */ -// SHELLINT.C +// DESKTOP.C +BOOL CreateDesktopWindow(); +LRESULT CALLBACK DeskWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); +// SYSINT.C BOOL RunFileDlg(HWND hWndOwner, HICON hIcon, LPWSTR lpszDir, LPWSTR lpszTitle, LPWSTR lpszDesc, DWORD dwFlags); BOOL ExitWindowsDialog(HWND hWndOwner); +BOOL SetShellWindow(HWND hWndShell); // WNDPROC.C LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK CmdProc(HWND hWnd, WPARAM wParam, LPARAM lParam); diff --git a/progmgr/progmgr.vcxproj b/progmgr/progmgr.vcxproj index ed5bcd1..6c7888d 100644 --- a/progmgr/progmgr.vcxproj +++ b/progmgr/progmgr.vcxproj @@ -167,7 +167,7 @@ - + diff --git a/progmgr/progmgr.vcxproj.filters b/progmgr/progmgr.vcxproj.filters index 59b4f0b..29e22ec 100644 --- a/progmgr/progmgr.vcxproj.filters +++ b/progmgr/progmgr.vcxproj.filters @@ -38,7 +38,7 @@ Source Files - + Source Files diff --git a/progmgr/registry.c b/progmgr/registry.c index a923e1f..0bb31ba 100644 --- a/progmgr/registry.c +++ b/progmgr/registry.c @@ -78,7 +78,7 @@ BOOL IsProgMgrDefaultShell() HKEY hKeyWinlogon; WCHAR szShell[HKEYMAXLEN] = L""; DWORD dwType; - DWORD dwBufferSize = 0; + DWORD dwBufferSize = sizeof(szShell); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WINLOGON_KEY, 0, KEY_READ, &hKeyWinlogon) == ERROR_SUCCESS) @@ -134,7 +134,7 @@ BOOL SaveConfig() (bSaveSettings && PMS_SAVESETTINGS) * PMS_SAVESETTINGS; if (!RegSetValueEx(hKeySettings, pszSettingsMask, 0, REG_DWORD, - &dwSettingsMask, sizeof(dwSettingsMask)) == ERROR_SUCCESS) + (const BYTE*)&dwSettingsMask, sizeof(dwSettingsMask)) == ERROR_SUCCESS) bConfigStatus = FALSE; // Get and save window position @@ -143,7 +143,7 @@ BOOL SaveConfig() CopyRect(&rcWindow, &wpProgMgr.rcNormalPosition); if (!RegSetValueEx(hKeySettings, pszSettingsWindow, 0, REG_BINARY, - &rcWindow, sizeof(rcWindow)) == ERROR_SUCCESS) + (const BYTE*)&rcWindow, sizeof(rcWindow)) == ERROR_SUCCESS) bConfigStatus = FALSE; return bConfigStatus; @@ -165,7 +165,7 @@ BOOL LoadConfig() // Load settings bitmask if (!RegQueryValueEx(hKeySettings, pszSettingsMask, 0, &dwType, - &dwSettingsMask, &dwBufferSize) == ERROR_SUCCESS) + (LPBYTE)&dwSettingsMask, &dwBufferSize) == ERROR_SUCCESS) bConfigStatus = FALSE; // Apply bitmask to booleans @@ -177,7 +177,7 @@ BOOL LoadConfig() // Load window position... and apply it! if (!RegQueryValueEx(hKeySettings, pszSettingsWindow, 0, &dwType, - &rcMainWindow, &dwRectBufferSize) == ERROR_SUCCESS) + (LPBYTE)&rcMainWindow, &dwRectBufferSize) == ERROR_SUCCESS) bConfigStatus = FALSE; return bConfigStatus; diff --git a/progmgr/resource.h b/progmgr/resource.h index 583b77302706abe28506a7c824db3c1be8c111c6..67060251065f9fbe54392b6279d86f6293f3d7c8 100644 GIT binary patch delta 377 zcmaDReMWvm6py7ogFb@-g9}3{Loq`(LkUAZLjjQQ3*_f9lmf+cfILG6129xz(1r4h z7z`#~WR?|mVQ^ߺyJQk--P(k|>}E z$h8nZnM@Al*$DJS2+&L)po(B1g!%<&lJsOIUMW=*23`g(U?_pY2^KC2K=t_yxj>i* t45t)^;>nFXvXiZN1tzh`O-|vJnrs53XYh(l&H~cMc%`^N))|8h0stw+JrMu^ delta 72 zcmX>j|4e#A6wl-vylW=!;1ioXi%)K{0KWjE$>fX7l9L