Author: cmihail
Date: Wed Sep  7 19:00:26 2011
New Revision: 53628

URL: http://svn.reactos.org/svn/reactos?rev=53628&view=rev
Log:
[shell32.dll]
- Attempt at fixing bug 6315 (it doesn't completely work yet). Original patch 
by Edijs Kolesnikovics.

Modified:
    branches/shell32_new-bringup/dll/win32/shell32/fprop.cpp

Modified: branches/shell32_new-bringup/dll/win32/shell32/fprop.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell32_new-bringup/dll/win32/shell32/fprop.cpp?rev=53628&r1=53627&r2=53628&view=diff
==============================================================================
--- branches/shell32_new-bringup/dll/win32/shell32/fprop.cpp [iso-8859-1] 
(original)
+++ branches/shell32_new-bringup/dll/win32/shell32/fprop.cpp [iso-8859-1] Wed 
Sep  7 19:00:26 2011
@@ -31,6 +31,62 @@
 } LANGANDCODEPAGE, *LPLANGANDCODEPAGE;
 
 EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR 
pszSubKey, UINT max_iface, IDataObject *pDataObj);
+
+static LONG SH_GetAssociatedApplication(WCHAR *fileext, WCHAR *wAssocApp)
+{
+    WCHAR wDataType[MAX_PATH] = {0};
+    HKEY hkey;
+    LONG result;
+    DWORD dwLen = MAX_PATH * sizeof(WCHAR);
+
+    wAssocApp[0] = '\0';
+    RegCreateKeyExW(HKEY_CLASSES_ROOT, fileext, 0, NULL, 0, KEY_READ, NULL, 
&hkey, NULL);
+    result = RegQueryValueExW(hkey, L"", NULL, NULL, (LPBYTE)wDataType, 
&dwLen);
+    RegCloseKey(hkey);
+    
+    if (result == ERROR_SUCCESS)
+    {
+        wcscat(wDataType, L"\\shell\\open\\command");
+        dwLen = MAX_PATH * sizeof(WCHAR);
+        RegCreateKeyExW(HKEY_CLASSES_ROOT, wDataType, 0, NULL, 0, KEY_READ, 
NULL, &hkey, NULL);
+        result = (RegQueryValueExW(hkey, NULL, NULL, NULL, (LPBYTE)wAssocApp, 
&dwLen));
+        RegCloseKey(hkey);
+        
+        if (result != ERROR_SUCCESS)
+        {
+            /* FIXME: Make it return full path instead of
+               notepad.exe "%1"
+               %systemroot%\notepad.exe "%1"
+               etc
+               Maybe there is code to do that somewhere? 
+               dll\win32\shell32\shlexec.c for example?
+            */
+            wAssocApp[0] = '\0';
+        }
+    }
+
+    return result;
+}
+
+static LONG SH_FileGeneralOpensWith(HWND hwndDlg, WCHAR *fileext)
+{
+    HWND hDlgCtrl;
+    LONG result;
+    WCHAR wAppName[MAX_PATH] = {0};
+    WCHAR wAssocApp[MAX_PATH] = {0};
+    
+    hDlgCtrl = GetDlgItem(hwndDlg, 14007);
+    result = SH_GetAssociatedApplication(fileext, wAssocApp);
+    
+    if (result == ERROR_SUCCESS)
+    {
+        _wsplitpath(wAssocApp, NULL, NULL, wAppName, NULL);
+    
+        SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wAppName);
+    }
+
+    return result;
+}
 
 /*************************************************************************
  *
@@ -669,6 +725,9 @@
             /* enumerate file extension from registry and application which 
opens it */
             SH_FileGeneralSetFileType(hwndDlg, wcsrchr(lpstr, '.'));
 
+            /* set opens with */
+            SH_FileGeneralOpensWith(hwndDlg, wcsrchr(lpstr, '.'));
+
             /* set file time create/modfied/accessed */
             SH_FileGeneralSetFileSizeTime(hwndDlg, lpstr, NULL);
 


Reply via email to