Module: wine Branch: master Commit: 9e6a7661d80ebebf005b55dd5177da5f24ef5c05 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9e6a7661d80ebebf005b55dd51...
Author: Owen Rudge owen@owenrudge.net Date: Wed Jul 2 18:08:42 2008 +0100
shell32: Check registry entry for cpl files (in standard control panel).
---
dlls/shell32/control.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/dlls/shell32/control.c b/dlls/shell32/control.c index 7afe8e9..2a58f67 100644 --- a/dlls/shell32/control.c +++ b/dlls/shell32/control.c @@ -27,6 +27,7 @@ #include "winbase.h" #include "wingdi.h" #include "winuser.h" +#include "winreg.h" #include "wine/winbase16.h" #include "wownt32.h" #include "wine/debug.h" @@ -319,14 +320,42 @@ static void Control_DoInterface(CPanel* panel, HWND hWnd, HINSTANCE hInst) } }
+static void Control_RegisterRegistryApplets(HWND hWnd, CPanel *panel, HKEY hkey_root, LPCWSTR szRepPath) +{ + WCHAR name[MAX_PATH]; + WCHAR value[MAX_PATH]; + HKEY hkey; + + if (RegOpenKeyW(hkey_root, szRepPath, &hkey) == ERROR_SUCCESS) + { + int idx = 0; + + for(;; ++idx) + { + DWORD nameLen = MAX_PATH; + DWORD valueLen = MAX_PATH; + + if (RegEnumValueW(hkey, idx, name, &nameLen, NULL, NULL, (LPBYTE)&value, &valueLen) != ERROR_SUCCESS) + break; + + Control_LoadApplet(hWnd, value, panel); + } + RegCloseKey(hkey); + } +} + static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst) { HANDLE h; WIN32_FIND_DATAW fd; WCHAR buffer[MAX_PATH]; static const WCHAR wszAllCpl[] = {'*','.','c','p','l',0}; + static const WCHAR wszRegPath[] = {'S','O','F','T','W','A','R','E','\','M','i','c','r','o','s','o','f','t', + '\','W','i','n','d','o','w','s','\','C','u','r','r','e','n','t','V','e','r','s','i','o','n', + '\','C','o','n','t','r','o','l',' ','P','a','n','e','l','\','C','p','l','s',0}; WCHAR *p;
+ /* first add .cpl files in the system directory */ GetSystemDirectoryW( buffer, MAX_PATH ); p = buffer + strlenW(buffer); *p++ = '\'; @@ -340,6 +369,10 @@ static void Control_DoWindow(CPanel* panel, HWND hWnd, HINSTANCE hInst) FindClose(h); }
+ /* now check for cpls in the registry */ + Control_RegisterRegistryApplets(hWnd, panel, HKEY_LOCAL_MACHINE, wszRegPath); + Control_RegisterRegistryApplets(hWnd, panel, HKEY_CURRENT_USER, wszRegPath); + Control_DoInterface(panel, hWnd, hInst); }