diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index fd57d9e..40e1616 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
 QWindowsScreenData::QWindowsScreenData() :
     dpi(96, 96), depth(32), format(QImage::Format_ARGB32_Premultiplied),
     flags(VirtualDesktop), orientation(Qt::LandscapeOrientation),
-    refreshRateHz(60)
+    refreshRateHz(60), handle(0)
 {
 }
 
@@ -101,6 +101,7 @@ static bool monitorData(HMONITOR hMonitor, QWindowsScreenData *data)
     if (GetMonitorInfo(hMonitor, &info) == FALSE)
         return false;
 
+    data->handle = reinterpret_cast<quintptr>(hMonitor);
     data->geometry = QRect(QPoint(info.rcMonitor.left, info.rcMonitor.top), QPoint(info.rcMonitor.right - 1, info.rcMonitor.bottom - 1));
     data->availableGeometry = QRect(QPoint(info.rcWork.left, info.rcWork.top), QPoint(info.rcWork.right - 1, info.rcWork.bottom - 1));
     data->name = QString::fromWCharArray(info.szDevice);
@@ -179,7 +180,8 @@ static QDebug operator<<(QDebug dbg, const QWindowsScreenData &d)
             << d.availableGeometry.width() << 'x' << d.availableGeometry.height() << '+' << d.availableGeometry.x() << '+' << d.availableGeometry.y()
             << " physical: " << d.physicalSizeMM.width() <<  'x' << d.physicalSizeMM.height()
             << " DPI: " << d.dpi.first << 'x' << d.dpi.second << " Depth: " << d.depth
-            << " Format: " << d.format;
+            << " Format: " << d.format
+            << " Handle: " << hex << showbase << d.handle << dec << noshowbase;
     if (d.flags & QWindowsScreenData::PrimaryScreen)
         nospace << " primary";
     if (d.flags & QWindowsScreenData::VirtualDesktop)
@@ -400,19 +402,19 @@ bool QWindowsScreenManager::handleDisplayChange(WPARAM wParam, LPARAM lParam)
 }
 
 static inline int indexOfMonitor(const QList<QWindowsScreen *> &screens,
-                                 const QString &monitorName)
+                                 quintptr handle)
 {
     for (int i= 0; i < screens.size(); ++i)
-        if (screens.at(i)->data().name == monitorName)
+        if (screens.at(i)->data().handle == handle)
             return i;
     return -1;
 }
 
 static inline int indexOfMonitor(const QList<QWindowsScreenData> &screenData,
-                                 const QString &monitorName)
+                                 quintptr handle)
 {
     for (int i = 0; i < screenData.size(); ++i)
-        if (screenData.at(i).name == monitorName)
+        if (screenData.at(i).handle == handle)
             return i;
     return -1;
 }
@@ -476,7 +478,7 @@ bool QWindowsScreenManager::handleScreenChanges()
     WindowsScreenDataList newDataList = monitorData();
     const bool lockScreen = newDataList.size() == 1 && (newDataList.front().flags & QWindowsScreenData::LockScreen);
     foreach (const QWindowsScreenData &newData, newDataList) {
-        const int existingIndex = indexOfMonitor(m_screens, newData.name);
+        const int existingIndex = indexOfMonitor(m_screens, newData.handle);
         if (existingIndex != -1) {
             m_screens.at(existingIndex)->handleChanges(newData);
         } else {
@@ -490,7 +492,7 @@ bool QWindowsScreenManager::handleScreenChanges()
     // temporary lock screen to avoid window recreation (QTBUG-33062).
     if (!lockScreen) {
         for (int i = m_screens.size() - 1; i >= 0; --i) {
-            if (indexOfMonitor(newDataList, m_screens.at(i)->data().name) == -1)
+            if (indexOfMonitor(newDataList, m_screens.at(i)->data().handle) == -1)
                 removeScreen(i);
         }     // for existing screens
     }     // not lock screen
diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h
index aa14083..a87c2e5 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.h
+++ b/src/plugins/platforms/windows/qwindowsscreen.h
@@ -69,6 +69,9 @@ struct QWindowsScreenData
     QString name;
     Qt::ScreenOrientation orientation;
     qreal refreshRateHz;
+    // Always use the display HMONITOR as monitor identifier, since on Wine
+    // name can be duplicated (QTBUG-43439, Wine bug #37709)
+    quintptr handle;
 };
 
 class QWindowsScreen : public QPlatformScreen
