mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-25 11:46:07 +00:00
Support File Path longer than 260 (tweak needed: https://www.tenforums.com/tutorials/51704-enable-disable-win32-long-paths-windows-10-a.html)
This commit is contained in:
@@ -103,7 +103,7 @@ void DOpus::ParseXmlBuffer(PWCHAR buffer)
|
||||
auto b = new WCHAR[size];
|
||||
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, b, size);
|
||||
|
||||
wcscpy_s(buffer, MAX_PATH, b);
|
||||
wcscpy_s(buffer, MAX_PATH_EX, b); // DOpus supports Long Path
|
||||
|
||||
delete[] b;
|
||||
return; // we now cares only the first result
|
||||
|
@@ -58,9 +58,9 @@ void DialogHook::GetSelected(PWCHAR buffer)
|
||||
if (!IsWow64Process(GetCurrentProcess(), &isSelfWoW64))
|
||||
return;
|
||||
|
||||
// if QuickLook is 64bit and target is 32bit, obtain result from the helper
|
||||
if (isTargetWoW64 && !isSelfWoW64)
|
||||
{
|
||||
// if self is 64bit and target is 32bit, do this
|
||||
GetSelectedFromWoW64HookHelper(buffer);
|
||||
}
|
||||
else
|
||||
@@ -72,7 +72,8 @@ void DialogHook::GetSelected(PWCHAR buffer)
|
||||
return;
|
||||
|
||||
SendMessage(hwndfg, WM_HOOK_NOTIFY, 0, 0);
|
||||
wcscpy_s(buffer, MAX_PATH, filePathBuffer);
|
||||
|
||||
GetLongPathName(filePathBuffer, buffer, MAX_PATH_EX);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +115,7 @@ void DialogHook::GetSelectedFromWoW64HookHelper(PWCHAR buffer)
|
||||
SendMessage(hHelperWnd, WM_HOOK_NOTIFY, 0, 0);
|
||||
|
||||
// the sharedBuffer should now ready
|
||||
wcscpy_s(buffer, MAX_PATH, sharedBuffer);
|
||||
GetLongPathName(sharedBuffer, buffer, MAX_PATH_EX);
|
||||
|
||||
UnmapViewOfFile(sharedBuffer);
|
||||
CloseHandle(hMapFile);
|
||||
|
@@ -43,7 +43,7 @@ void Everything::GetSelected(PWCHAR buffer)
|
||||
|
||||
auto p = wcsstr(pText, L"\r\n");
|
||||
auto l = p == nullptr ? wcslen(pText) : p - pText;
|
||||
wcsncpy_s(buffer, MAX_PATH, pText, l);
|
||||
wcsncpy_s(buffer, MAX_PATH_EX, pText, l); // Everything supports Long Path
|
||||
|
||||
GlobalUnlock(hData);
|
||||
|
||||
|
@@ -60,7 +60,10 @@ void HelperMethods::ObtainFirstItem(CComPtr<IDataObject> dao, PWCHAR buffer)
|
||||
if (n < 1)
|
||||
return;
|
||||
|
||||
DragQueryFile(HDROP(medium.hGlobal), 0, buffer, MAX_PATH - 1);
|
||||
WCHAR localBuffer[MAX_PATH] = { '\0' };
|
||||
DragQueryFile(HDROP(medium.hGlobal), 0, localBuffer, MAX_PATH);
|
||||
|
||||
GetLongPathName(localBuffer, buffer, MAX_PATH_EX);
|
||||
}
|
||||
|
||||
bool HelperMethods::IsListaryToolbarVisible()
|
||||
|
@@ -33,3 +33,5 @@
|
||||
#include<Shellapi.h>
|
||||
#include<Psapi.h>
|
||||
#include<AppModel.h>
|
||||
|
||||
#define MAX_PATH_EX 32767
|
||||
|
@@ -81,7 +81,9 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
void GetCurrentSelection()
|
||||
{
|
||||
WCHAR dllBuffer[MAX_PATH] = {'\0'};
|
||||
// This function runs inside the target process. Some of them may already support Long Path.
|
||||
// Therefore, we must assume all of them support Long Path to avoid buffer overflow.
|
||||
WCHAR dllBuffer[MAX_PATH_EX] = {'\0'};
|
||||
pGCS(dllBuffer);
|
||||
|
||||
auto hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, SHARED_MEM_NAME);
|
||||
@@ -95,7 +97,7 @@ void GetCurrentSelection()
|
||||
return;
|
||||
}
|
||||
|
||||
wcscpy_s(buffer, MAX_PATH, dllBuffer);
|
||||
wcscpy_s(buffer, MAX_PATH_EX, dllBuffer);
|
||||
|
||||
UnmapViewOfFile(buffer);
|
||||
CloseHandle(hMapFile);
|
||||
|
@@ -31,3 +31,4 @@
|
||||
|
||||
|
||||
// TODO: reference additional headers your program requires here
|
||||
#define MAX_PATH_EX 32767
|
||||
|
Reference in New Issue
Block a user