Ich codiere in C++ mit Qt Creator. Ich kann alle Fenster auf dem Bildschirm sehen, aber ich möchte ihre Bewegung direkt erkennen. Gibt es eine Möglichkeit, die Bewegung dank eines vom Fenster ausgesandten Signals zu erkennen?Wie erkennt man die Fensterposition?
Antwort
Sie können versuchen, ein QWindow aus dem Zielfenster zu erstellen und es dann mit QWidget :: createWindowContainer() in ein QWidget einzubinden.
Sie können einen Blick auf dieses QTBUG Gewinde haben: https://bugreports.qt.io/browse/QTBUG-40320
Es braucht einige Mühe, es richtig zu arbeiten. Das erfasste Fenster behält seine ursprünglichen Abmessungen nicht bei und das Freigeben des Fensters verhält sich merkwürdig. Lesen Sie die letzten QTBUG-Kommentare, um eine Verbesserung zu finden.
Ich habe einen Ereignisfilter zu diesem Code hinzugefügt, um die Fensterposition in Echtzeit zu erfassen. Aber das könnte unbefriedigend sein.
Ich habe Teil 3 aus dem QTBUG-Snippet entfernt und den Event-Handler auf dem inneren Widget installiert. Sie können die Timer auch entfernen.
// From https://bugreports.qt.io/browse/QTBUG-40320
int main(int argc, char *argv[])
{
// Windows: Find HWND by window title
WId id = (WId)FindWindow(NULL, L"Calculator");
if (!id)
return -1;
QApplication a(argc, argv);
// Optional
QTimer t;
t.start(2500);
// Part 1
QWindow* window = QWindow::fromWinId(id);
window->show();
window->requestActivate();
// Optional
QObject::connect(&t, &QTimer::timeout, [=]
{
qDebug() << "=== Inner QWindow ===";
qDebug() << "Geometry:" << window->geometry();
qDebug() << "Active?:" << window->isActive();
qDebug() << "Flags:" << window->flags();
});
// Part 2
QWidget* widget = QWidget::createWindowContainer(window);
widget->show();
// Optional
QObject::connect(&t, &QTimer::timeout, [=]
{
qDebug() << "=== Outer QWidget ===";
qDebug() << "Geometry:" << widget->geometry();
qDebug() << "Active?" << widget->isActiveWindow();
qDebug() << "Flags:" << widget->windowFlags();
});
// Realtime position
EventFilter filter ;
widget->installEventFilter(&filter) ;
return a.exec();
}
Ausgang:
=== Inner QWindow ===
Geometry: QRect(0,0 640x480)
Active?: true
Flags: QFlags<Qt::WindowType>(ForeignWindow)
=== Outer QWidget ===
Geometry: QRect(2489,29 640x480)
Active? true
Flags: QFlags<Qt::WindowType>(Window|WindowTitleHint|WindowSystemMenuHint|WindowMinMaxButtonsHint|WindowCloseButtonHint)
QEvent::Type(Move)
position QPoint(2484,29)
QEvent::Type(Move)
position QPoint(2481,30)
QEvent::Type(Move)
position QPoint(2478,31)
QEvent::Type(Move)
position QPoint(2474,31)
Siehe auch http://blog.qt.io/blog/2013/02/19/introducing-qwidgetcreatewindowcontainer/
Funktioniert nicht über UIPI-Grenzen hinweg. Und das Erreichen eines Fensters, das einem anderen Thread gehört, erfordert, dass Sie genau wissen, was Sie tun, und den Code in beiden Threads für eine ordnungsgemäße Zusammenarbeit steuern. Sie steuern den Code in keinem der beiden Threads. Dieser ** wird ** brechen. – IInspectable
P.S .: Eine stabile Lösung verwendet [WinEvents] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd373868.aspx). – IInspectable
- 1. Wie erkennt man die Zugangskontrollmaschine?
- 2. Fensterposition in Xlib
- 3. Internet Explorer-Fensterposition erwerben
- 4. Wie erkennt man die Unendlichkeitswerte in Scala?
- 5. Wie erkennt man die Bootstrap-Version?
- 6. Wie erkennt man die Wischrichtung in Libgdx?
- 7. Wie erkennt man die Änderung des Versprechenswertes?
- 8. Wie erkennt man die Bildschirmauflösung ohne JavaScript?
- 9. Wie erkennt man die Kopfhörer-Taste?
- 10. Wie erkennt man die OSX-Admin-Passwortabfrage?
- 11. Wie erkennt man die Scrollgeschwindigkeit mit Jquery?
- 12. Wie erkennt man die Position des Klicks?
- 13. Apple Watch: Wie erkennt man die Bildschirmgröße?
- 14. Wie erkennt man die Gerätedrehung in Cordova?
- 15. Wie erkennt man die Kameraausrichtung in Android?
- 16. Wie erkennt man die Sprache der Tastatur?
- 17. Wie erkennt man die JavaScript-Methode (Funktion)
- 18. Fensterposition ändern Jquery
- 19. Wie erkennt man Anwendungsabstürze?
- 20. Fensterposition einer CHM-Datei
- 21. Einstellen der Fensterposition/jquery
- 22. Wie kann ich Fensterposition ändern Kivy
- 23. Wie erkennt man veränderbare Objekte?
- 24. Wie man Nachbarzellen richtig erkennt
- 25. Öffnungsvorgang und Ändern der Fensterposition
- 26. Tiefensuche, Wie erkennt man Diamantabhängigkeiten?
- 27. Wie man es6 Module erkennt
- 28. Wie erkennt man WindowState-Änderungen?
- 29. Wie erkennt man API Hook?
* "alle Fenster auf dem Bildschirm" * - was das soll auch bedeuten? – IInspectable
alle Fenster wie der Navigator, geöffnete Anwendungen, .... – andresouris
Ok, in diesem Fall fordere ich Sie auf * "alle Fenster auf dem Bildschirm" *. Ziemlich sicher, dass UIPI ein Schmerz sein wird, um zu überzeugen, dass Ihr Prozess mit niedriger Integrität Zugang zu Ressourcen mit hoher Integrität erhalten sollte. Sie haben jedoch ein völlig falsches Verständnis Ihrer Zielplattform. Qt gibt keine Art von Signalen für Windows aus, die Qt nicht einmal kennen. – IInspectable