mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-23 03:06:56 -04:00
[misc] more DLL handling improvements
* also set rufus-next to 1.4.8
This commit is contained in:
parent
266599e6fd
commit
7a3fb515ea
10 changed files with 111 additions and 173 deletions
24
src/stdlg.c
24
src/stdlg.c
|
@ -41,21 +41,13 @@
|
|||
#include "license.h"
|
||||
#include "localization.h"
|
||||
|
||||
/* The following is only available on Vista and later */
|
||||
#if (_WIN32_WINNT >= 0x0600)
|
||||
static HRESULT (WINAPI *pSHCreateItemFromParsingName)(PCWSTR, IBindCtx*, REFIID, void **) = NULL;
|
||||
PF_TYPE_DECL(WINAPI, HRESULT, SHCreateItemFromParsingName, (PCWSTR, IBindCtx*, REFIID, void **));
|
||||
#endif
|
||||
#define INIT_VISTA_SHELL32 if (pSHCreateItemFromParsingName == NULL) { \
|
||||
pSHCreateItemFromParsingName = (HRESULT (WINAPI *)(PCWSTR, IBindCtx*, REFIID, void **)) \
|
||||
GetProcAddress(GetDLLHandle("SHELL32"), "SHCreateItemFromParsingName"); \
|
||||
}
|
||||
#define IS_VISTA_SHELL32_AVAILABLE (pSHCreateItemFromParsingName != NULL)
|
||||
// And this one is simply not available in MinGW32
|
||||
static LPITEMIDLIST (WINAPI *pSHSimpleIDListFromPath)(PCWSTR pszPath) = NULL;
|
||||
#define INIT_XP_SHELL32 if (pSHSimpleIDListFromPath == NULL) { \
|
||||
pSHSimpleIDListFromPath = (LPITEMIDLIST (WINAPI *)(PCWSTR)) \
|
||||
GetProcAddress(GetDLLHandle("SHELL32"), "SHSimpleIDListFromPath"); \
|
||||
}
|
||||
PF_TYPE_DECL(WINAPI, LPITEMIDLIST, SHSimpleIDListFromPath, (PCWSTR pszPath));
|
||||
#define INIT_VISTA_SHELL32 PF_INIT(SHCreateItemFromParsingName, Shell32)
|
||||
#define INIT_XP_SHELL32 PF_INIT(SHSimpleIDListFromPath, Shell32)
|
||||
#define IS_VISTA_SHELL32_AVAILABLE (pfSHCreateItemFromParsingName != NULL)
|
||||
|
||||
/* Globals */
|
||||
static HICON hMessageIcon = (HICON)INVALID_HANDLE_VALUE;
|
||||
|
@ -108,7 +100,7 @@ INT CALLBACK BrowseInfoCallback(HWND hDlg, UINT message, LPARAM lParam, LPARAM p
|
|||
} else {
|
||||
// On Windows 7, MinGW only properly selects the specified folder when using a pidl
|
||||
wpath = utf8_to_wchar(szFolderPath);
|
||||
pidl = (*pSHSimpleIDListFromPath)(wpath);
|
||||
pidl = (*pfSHSimpleIDListFromPath)(wpath);
|
||||
safe_free(wpath);
|
||||
// NB: see http://connect.microsoft.com/VisualStudio/feedback/details/518103/bffm-setselection-does-not-work-with-shbrowseforfolder-on-windows-7
|
||||
// for details as to why we send BFFM_SETSELECTION twice.
|
||||
|
@ -178,7 +170,7 @@ void BrowseForFolder(void) {
|
|||
}
|
||||
}
|
||||
|
||||
hr = (*pSHCreateItemFromParsingName)(wpath, NULL, &IID_IShellItem, (LPVOID)&si_path);
|
||||
hr = (*pfSHCreateItemFromParsingName)(wpath, NULL, &IID_IShellItem, (LPVOID)&si_path);
|
||||
if (SUCCEEDED(hr)) {
|
||||
if (wpath != NULL) {
|
||||
hr = pfod->lpVtbl->SetFolder(pfod, si_path);
|
||||
|
@ -294,7 +286,7 @@ char* FileDialog(BOOL save, char* path, char* filename, char* ext, char* ext_des
|
|||
|
||||
// Set the default directory
|
||||
wpath = utf8_to_wchar(path);
|
||||
hr = (*pSHCreateItemFromParsingName)(wpath, NULL, &IID_IShellItem, (LPVOID) &si_path);
|
||||
hr = (*pfSHCreateItemFromParsingName)(wpath, NULL, &IID_IShellItem, (LPVOID) &si_path);
|
||||
if (SUCCEEDED(hr)) {
|
||||
pfd->lpVtbl->SetFolder(pfd, si_path);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue