Sto cercando di scherzare con C++ e creare una sorta di applicazione desktop in grado di interagire con altre finestre. Qualcosa come un gestore di piastrellatura della finestra (ad esempio riducendo al minimo le finestre correnti, inserendo finestre in una griglia, ecc.). È possibile farlo in C++? Ho sempre lavorato solo con la linea di comando, quindi c'è un buon framework per questo tipo di lavoro? Qualsiasi cosa nella giusta direzione o come posso realizzare qualcosa di simile sarebbe fantastico.È possibile utilizzare C++ per interagire con le applicazioni in esecuzione?
risposta
In Windows
È possibile utilizzare EnumWindows
per scorrere ciascuna delle finestre. Inizia dalla finestra più in alto e si avvia verso il basso. Il seguente codice scorre ciclicamente ciascuna finestra visibile e stampa il testo del messaggio.
#include <windows.h>
#include <stdio.h>
BOOL CALLBACK EnumWindowsProc(HWND hWnd, long lParam) {
char buff[255];
if (IsWindowVisible(hWnd)) {
GetWindowText(hWnd, (LPSTR) buff, 254);
printf("%s\n", buff);
}
return TRUE;
}
int main() {
EnumWindows(EnumWindowsProc, 0);
return 0;
}
Dato che si ha il manico di ciascuna finestra, è possibile eseguire ulteriori manipolazioni inviando loro messaggi.
ho creato uno strumento per giocare con le finestre e le forme chiamati Desktop Playground che utilizza questo metodo molto.
Espongo un thread e memorizzo ciascuna finestra in una tabella hash con le relative coordinate e dimensioni. Quindi eseguo un'iterazione e confronta la posizione e le dimensioni attuali con quella precedente ed eseguo le richiamate per consentire al thread principale di sapere se una finestra è stata Created
, Moved
, Reiszed
o Destroyed
.
Su Windows è possibile utilizzare la funzione SendMessage per finestre o processi attivi.
Questa domanda è altamente correlata su quale sistema operativo o framework GUI viene utilizzato per tale applicazione che si desidera creare.
Se il sistema operativo supporta le interfacce per tale interazione, può certamente essere utilizzato con C++ se esiste un determinato linguaggio vincolante per l'API di controllo della GUI (C/C++) fornita. Di solito non è una buona idea usare queste API in modo nativo dal codice, ma attraverso una libreria C++ che astrae i bit di basso livello e le operazioni fuori.
A un livello successivo sono disponibili librerie, che supportano anche le astrazioni per diverse GUI specifiche del sistema operativo e API di controllo del sistema. Se stai cercando il codice portatile OS, controlla ad esempio il Qt framework.
- 1. Interagire con le pagine Web in C#
- 2. Interagire con altre applicazioni desktop in Windows utilizzando C# winforms
- 3. È possibile utilizzare il framework Spring per le applicazioni batch?
- 4. È possibile interagire con UIWebView senza toccare?
- 5. Usa C# per interagire con Windows Update
- 6. È possibile utilizzare librerie con licenza GPLv2 in applicazioni proprietarie?
- 7. È possibile interagire con un'applicazione locale in un'estensione Google Chrome?
- 8. È possibile utilizzare Lua per lo sviluppo di applicazioni?
- 9. Interagire con codice java da C#
- 10. è possibile utilizzare Eigen con c?
- 11. È possibile utilizzare le pipe in OCaml?
- 12. È possibile utilizzare Scala per scrivere applicazioni GWT?
- 13. È possibile utilizzare le enumerazioni in RealmSwift?
- 14. È possibile utilizzare EJB 3.1 in applicazioni desktop?
- 15. È possibile utilizzare Flash o Silverlight per le applicazioni kiosk? Come?
- 16. È possibile recuperare le applicazioni attualmente in esecuzione su iPhone e iPad
- 17. Applescript - elenca tutte le applicazioni in esecuzione
- 18. Come utilizzare l'analisi per le applicazioni desktop?
- 19. È possibile utilizzare Google App Engine come database di back-end per le applicazioni Android?
- 20. È possibile utilizzare C# .NET in tempo reale?
- 21. È possibile utilizzare MacRuby per sviluppare applicazioni per il Mac App Store?
- 22. È possibile/si dovrebbe utilizzare SQL Server Service Broker con applicazioni .NET?
- 23. È possibile utilizzare Jetty come server applicazioni Java EE leggero?
- 24. Interagire con classi C++ da Swift
- 25. È possibile utilizzare Win32 Hooks nelle applicazioni Qt
- 26. Interagire con un'immagine .svg
- 27. applicazioni scala in esecuzione con java-jar
- 28. È possibile utilizzare C# 4.0 con Visual Studio 2008?
- 29. È possibile leggere la memoria di un'applicazione java in esecuzione?
- 30. C# Windows Form Le applicazioni in Mac
È sicuramente possibile. – chris
Dipende se il sistema operativo e il gestore di finestre ti consentono (come in, fornisce le funzioni necessarie). –
In genere, sì. Ma come ha detto Drew, dipende dal sistema operativo e dal gestore di finestre, quindi faccelo sapere e potremmo essere in grado di aiutarvi ulteriormente. Alcuni hanno API che ti permetteranno di farlo facilmente, mentre alcuni potrebbero essere un po 'più difficili. – danielunderwood