diff --git a/src/corelib/io/qlockfile_win.cpp b/src/corelib/io/qlockfile_win.cpp
index a20a274870..30ef0625db 100644
--- a/src/corelib/io/qlockfile_win.cpp
+++ b/src/corelib/io/qlockfile_win.cpp
@@ -48,6 +48,8 @@
 #include "QtCore/qdebug.h"
 #include "QtCore/qthread.h"
 
+#include "private/qsystemlibrary_p.h"
+
 QT_BEGIN_NAMESPACE
 
 static inline bool fileExists(const wchar_t *fileName)
@@ -150,7 +152,7 @@ QString QLockFilePrivate::processNameByPid(qint64 pid)
 #if !defined(Q_OS_WINRT)
     typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD);
 
-    HMODULE hPsapi = LoadLibraryA("psapi");
+    HMODULE hPsapi = QSystemLibrary::load(L"psapi");
     if (!hPsapi)
         return QString();
     GetModuleFileNameExFunc qGetModuleFileNameEx = reinterpret_cast<GetModuleFileNameExFunc>(
diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index 4e84c0954b..a2f1133bc0 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -50,6 +50,7 @@
 #include <qstring.h>
 #include <qdatetime.h>
 #include <qrandom.h>
+#include "private/qsystemlibrary_p.h"
 
 #ifdef Q_OS_WIN
 #include <qmutex.h>
@@ -1563,7 +1564,7 @@ static bool q_SSPI_library_load()
 
     // Initialize security interface
     if (pSecurityFunctionTable == nullptr) {
-        securityDLLHandle = LoadLibrary(L"secur32.dll");
+        securityDLLHandle = QSystemLibrary::load(L"secur32");
         if (securityDLLHandle != nullptr) {
             INIT_SECURITY_INTERFACE pInitSecurityInterface =
                 reinterpret_cast<INIT_SECURITY_INTERFACE>(
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp
index 65b3e7f430..ff04fbbf98 100644
--- a/src/plugins/platforms/windows/qwindowsglcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp
@@ -48,6 +48,7 @@
 #include <qpa/qplatformnativeinterface.h>
 #include <QtPlatformHeaders/qwglnativecontext.h>
 
+#include <private/qsystemlibrary_p.h>
 #include <algorithm>
 
 #include <wingdi.h>
@@ -162,19 +163,25 @@ QFunctionPointer QWindowsOpengl32DLL::resolve(const char *name)
 
 bool QWindowsOpengl32DLL::init(bool softwareRendering)
 {
-    const QByteArray opengl32 = QByteArrayLiteral("opengl32.dll");
-    const QByteArray swopengl = QByteArrayLiteral("opengl32sw.dll");
+    const QByteArray opengl32 = QByteArrayLiteral("opengl32");
+    const QByteArray swopengl = QByteArrayLiteral("opengl32sw");
+    bool useSystemLib = false;
 
     QByteArray openglDll = qgetenv("QT_OPENGL_DLL");
-    if (openglDll.isEmpty())
+    if (openglDll.isEmpty()) {
         openglDll = softwareRendering ? swopengl : opengl32;
+        useSystemLib = !softwareRendering;
+    }
 
     openglDll = openglDll.toLower();
     m_nonOpengl32 = openglDll != opengl32;
 
     qCDebug(lcQpaGl) << "Qt: Using WGL and OpenGL from" << openglDll;
 
-    m_lib = ::LoadLibraryA(openglDll.constData());
+    if (useSystemLib)
+        m_lib = QSystemLibrary::load((wchar_t*)(QString::fromLatin1(openglDll).utf16()));
+    else
+        m_lib = LoadLibraryA(openglDll.constData());
     if (!m_lib) {
         qErrnoWarning(::GetLastError(), "Failed to load %s", openglDll.constData());
         return false;
@@ -184,7 +191,7 @@ bool QWindowsOpengl32DLL::init(bool softwareRendering)
         // Load opengl32.dll always. GDI functions like ChoosePixelFormat do
         // GetModuleHandle for opengl32.dll and behave differently (and call back into
         // opengl32) when the module is present. This is fine for dummy contexts and windows.
-        ::LoadLibraryA("opengl32.dll");
+        QSystemLibrary::load(L"opengl32");
     }
 
     wglCreateContext = reinterpret_cast<HGLRC (WINAPI *)(HDC)>(resolve("wglCreateContext"));
diff --git a/src/plugins/platforms/windows/qwindowsopengltester.cpp b/src/plugins/platforms/windows/qwindowsopengltester.cpp
index 49da6ee3e3..d78a18b35d 100644
--- a/src/plugins/platforms/windows/qwindowsopengltester.cpp
+++ b/src/plugins/platforms/windows/qwindowsopengltester.cpp
@@ -49,6 +49,7 @@
 #include <QtCore/qstandardpaths.h>
 #include <QtCore/qlibraryinfo.h>
 #include <QtCore/qhash.h>
+#include <private/qsystemlibrary_p.h>
 
 #ifndef QT_NO_OPENGL
 #include <private/qopengl_p.h>
@@ -396,7 +397,7 @@ bool QWindowsOpenGLTester::testDesktopGL()
 
     // Test #1: Load opengl32.dll and try to resolve an OpenGL 2 function.
     // This will typically fail on systems that do not have a real OpenGL driver.
-    lib = LoadLibraryA("opengl32.dll");
+    lib = QSystemLibrary::load(L"opengl32");
     if (lib) {
         CreateContext = reinterpret_cast<CreateContextType>(
             reinterpret_cast<QFunctionPointer>(::GetProcAddress(lib, "wglCreateContext")));
