mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-11-29 13:58:51 +03:00
Add helper for loading Windows system functions
This commit is contained in:
parent
643a209812
commit
b0e3d77975
3 changed files with 27 additions and 5 deletions
|
@ -64,7 +64,6 @@
|
||||||
|
|
||||||
#ifndef DISABLE_GUI
|
#ifndef DISABLE_GUI
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#include <windows.h>
|
|
||||||
#include <QSessionManager>
|
#include <QSessionManager>
|
||||||
#include <QSharedMemory>
|
#include <QSharedMemory>
|
||||||
#endif // Q_OS_WIN
|
#endif // Q_OS_WIN
|
||||||
|
@ -682,7 +681,7 @@ void Application::cleanup()
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR);
|
typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR);
|
||||||
PSHUTDOWNBRCREATE shutdownBRCreate = (PSHUTDOWNBRCREATE)::GetProcAddress(::GetModuleHandleW(L"User32.dll"), "ShutdownBlockReasonCreate");
|
const auto shutdownBRCreate = Utils::Misc::loadWinAPI<PSHUTDOWNBRCREATE>("User32.dll", "ShutdownBlockReasonCreate");
|
||||||
// Only available on Vista+
|
// Only available on Vista+
|
||||||
if (shutdownBRCreate)
|
if (shutdownBRCreate)
|
||||||
shutdownBRCreate((HWND)m_window->effectiveWinId(), tr("Saving torrent progress...").toStdWString().c_str());
|
shutdownBRCreate((HWND)m_window->effectiveWinId(), tr("Saving torrent progress...").toStdWString().c_str());
|
||||||
|
@ -724,7 +723,7 @@ void Application::cleanup()
|
||||||
if (m_window) {
|
if (m_window) {
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
typedef BOOL (WINAPI *PSHUTDOWNBRDESTROY)(HWND);
|
typedef BOOL (WINAPI *PSHUTDOWNBRDESTROY)(HWND);
|
||||||
PSHUTDOWNBRDESTROY shutdownBRDestroy = (PSHUTDOWNBRDESTROY)::GetProcAddress(::GetModuleHandleW(L"User32.dll"), "ShutdownBlockReasonDestroy");
|
const auto shutdownBRDestroy = Utils::Misc::loadWinAPI<PSHUTDOWNBRDESTROY>("User32.dll", "ShutdownBlockReasonDestroy");
|
||||||
// Only available on Vista+
|
// Only available on Vista+
|
||||||
if (shutdownBRDestroy)
|
if (shutdownBRDestroy)
|
||||||
shutdownBRDestroy((HWND)m_window->effectiveWinId());
|
shutdownBRDestroy((HWND)m_window->effectiveWinId());
|
||||||
|
|
|
@ -4543,11 +4543,11 @@ namespace
|
||||||
return uuid.toString().toUpper(); // Libtorrent expects the GUID in uppercase
|
return uuid.toString().toUpper(); // Libtorrent expects the GUID in uppercase
|
||||||
|
|
||||||
using PCONVERTIFACENAMETOLUID = NETIO_STATUS (WINAPI *)(const WCHAR *, PNET_LUID);
|
using PCONVERTIFACENAMETOLUID = NETIO_STATUS (WINAPI *)(const WCHAR *, PNET_LUID);
|
||||||
PCONVERTIFACENAMETOLUID ConvertIfaceNameToLuid = reinterpret_cast<PCONVERTIFACENAMETOLUID>(::GetProcAddress(::GetModuleHandleW(L"Iphlpapi.dll"), "ConvertInterfaceNameToLuidW"));
|
const auto ConvertIfaceNameToLuid = Utils::Misc::loadWinAPI<PCONVERTIFACENAMETOLUID>("Iphlpapi.dll", "ConvertInterfaceNameToLuidW");
|
||||||
if (!ConvertIfaceNameToLuid) return QString();
|
if (!ConvertIfaceNameToLuid) return QString();
|
||||||
|
|
||||||
using PCONVERTIFACELUIDTOGUID = NETIO_STATUS (WINAPI *)(const NET_LUID *, GUID *);
|
using PCONVERTIFACELUIDTOGUID = NETIO_STATUS (WINAPI *)(const NET_LUID *, GUID *);
|
||||||
PCONVERTIFACELUIDTOGUID ConvertIfaceLuidToGuid = reinterpret_cast<PCONVERTIFACELUIDTOGUID>(::GetProcAddress(::GetModuleHandleW(L"Iphlpapi.dll"), "ConvertInterfaceLuidToGuid"));
|
const auto ConvertIfaceLuidToGuid = Utils::Misc::loadWinAPI<PCONVERTIFACELUIDTOGUID>("Iphlpapi.dll", "ConvertInterfaceLuidToGuid");
|
||||||
if (!ConvertIfaceLuidToGuid) return QString();
|
if (!ConvertIfaceLuidToGuid) return QString();
|
||||||
|
|
||||||
NET_LUID luid;
|
NET_LUID luid;
|
||||||
|
|
|
@ -34,6 +34,13 @@
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <QtGlobal>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#include <memory>
|
||||||
|
#include <Windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
#include <QPoint>
|
#include <QPoint>
|
||||||
|
@ -109,6 +116,22 @@ namespace Utils
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
QString windowsSystemPath();
|
QString windowsSystemPath();
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
T loadWinAPI(const QString &source, const char *funcName)
|
||||||
|
{
|
||||||
|
QString path = windowsSystemPath();
|
||||||
|
if (!path.endsWith('\\'))
|
||||||
|
path += '\\';
|
||||||
|
|
||||||
|
path += source;
|
||||||
|
|
||||||
|
std::unique_ptr<wchar_t[]> pathWchar(new wchar_t[path.length() + 1] {});
|
||||||
|
path.toWCharArray(pathWchar.get());
|
||||||
|
|
||||||
|
return reinterpret_cast<T>(
|
||||||
|
::GetProcAddress(::LoadLibraryW(pathWchar.get()), funcName));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue