2013-08-02 12 views
5

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?

+0

È sicuramente possibile. – chris

+2

Dipende se il sistema operativo e il gestore di finestre ti consentono (come in, fornisce le funzioni necessarie). –

+0

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

risposta

4

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.

1

Su Windows è possibile utilizzare la funzione SendMessage per finestre o processi attivi.

1

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.

Problemi correlati