94 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
This file is part of Telegram Desktop,
 | 
						|
the official desktop application for the Telegram messaging service.
 | 
						|
 | 
						|
For license and copyright information please follow this link:
 | 
						|
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 | 
						|
*/
 | 
						|
#include "platform/win/windows_dlls.h"
 | 
						|
 | 
						|
#include "base/platform/win/base_windows_safe_library.h"
 | 
						|
 | 
						|
#include <VersionHelpers.h>
 | 
						|
#include <QtCore/QSysInfo>
 | 
						|
 | 
						|
#define LOAD_SYMBOL(lib, name) ::base::Platform::LoadMethod(lib, #name, name)
 | 
						|
 | 
						|
bool DirectXResolveCompiler();
 | 
						|
 | 
						|
namespace Platform {
 | 
						|
namespace Dlls {
 | 
						|
namespace {
 | 
						|
 | 
						|
struct SafeIniter {
 | 
						|
	SafeIniter();
 | 
						|
};
 | 
						|
 | 
						|
SafeIniter::SafeIniter() {
 | 
						|
	base::Platform::InitDynamicLibraries();
 | 
						|
 | 
						|
	const auto LibShell32 = LoadLibrary(L"shell32.dll");
 | 
						|
	LOAD_SYMBOL(LibShell32, SHAssocEnumHandlers);
 | 
						|
	LOAD_SYMBOL(LibShell32, SHCreateItemFromParsingName);
 | 
						|
	LOAD_SYMBOL(LibShell32, SHOpenWithDialog);
 | 
						|
	LOAD_SYMBOL(LibShell32, OpenAs_RunDLL);
 | 
						|
	LOAD_SYMBOL(LibShell32, SHQueryUserNotificationState);
 | 
						|
	LOAD_SYMBOL(LibShell32, SHChangeNotify);
 | 
						|
 | 
						|
	//if (IsWindows10OrGreater()) {
 | 
						|
	//	static const auto kSystemVersion = QOperatingSystemVersion::current();
 | 
						|
	//	static const auto kMinor = kSystemVersion.minorVersion();
 | 
						|
	//	static const auto kBuild = kSystemVersion.microVersion();
 | 
						|
	//	if (kMinor > 0 || (kMinor == 0 && kBuild >= 17763)) {
 | 
						|
	//		const auto LibUxTheme = LoadLibrary(L"uxtheme.dll");
 | 
						|
	//		if (kBuild < 18362) {
 | 
						|
	//			LOAD_SYMBOL(LibUxTheme, AllowDarkModeForApp, 135);
 | 
						|
	//		} else {
 | 
						|
	//			LOAD_SYMBOL(LibUxTheme, SetPreferredAppMode, 135);
 | 
						|
	//		}
 | 
						|
	//		LOAD_SYMBOL(LibUxTheme, AllowDarkModeForWindow, 133);
 | 
						|
	//		LOAD_SYMBOL(LibUxTheme, RefreshImmersiveColorPolicyState, 104);
 | 
						|
	//		LOAD_SYMBOL(LibUxTheme, FlushMenuThemes, 136);
 | 
						|
	//	}
 | 
						|
	//}
 | 
						|
 | 
						|
	const auto LibPropSys = LoadLibrary(L"propsys.dll");
 | 
						|
	LOAD_SYMBOL(LibPropSys, PSStringFromPropertyKey);
 | 
						|
 | 
						|
	const auto LibPsApi = LoadLibrary(L"psapi.dll");
 | 
						|
	LOAD_SYMBOL(LibPsApi, GetProcessMemoryInfo);
 | 
						|
 | 
						|
	const auto LibUser32 = LoadLibrary(L"user32.dll");
 | 
						|
	LOAD_SYMBOL(LibUser32, SetWindowCompositionAttribute);
 | 
						|
}
 | 
						|
 | 
						|
SafeIniter kSafeIniter;
 | 
						|
 | 
						|
} // namespace
 | 
						|
 | 
						|
void CheckLoadedModules() {
 | 
						|
	if (DirectXResolveCompiler()) {
 | 
						|
		auto LibD3DCompiler = HMODULE();
 | 
						|
		if (GetModuleHandleEx(0, L"d3dcompiler_47.dll", &LibD3DCompiler)) {
 | 
						|
			constexpr auto kMaxPathLong = 32767;
 | 
						|
			auto path = std::array<WCHAR, kMaxPathLong + 1>{ 0 };
 | 
						|
			const auto length = GetModuleFileName(
 | 
						|
				LibD3DCompiler,
 | 
						|
				path.data(),
 | 
						|
				kMaxPathLong);
 | 
						|
			if (length > 0 && length < kMaxPathLong) {
 | 
						|
				LOG(("Using DirectX compiler '%1'."
 | 
						|
					).arg(QString::fromWCharArray(path.data())));
 | 
						|
			} else {
 | 
						|
				LOG(("Error: Could not resolve DirectX compiler path."));
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			LOG(("Error: Could not resolve DirectX compiler module."));
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		LOG(("Error: Could not resolve DirectX compiler library."));
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Dlls
 | 
						|
} // namespace Platform
 |