Caratteristiche finestre e processi windows

di il
17 risposte

Caratteristiche finestre e processi windows

Salve,
per soddisfazione personale stavo cercando di memorizzare le caratteristiche delle finestre aperte nel mio desktop per poi, una volta riavviato il PC con Win10, riavviarle nella medesima posizione e contenuto.
Pensavo che queste informazioni fossero facilmente reperibili. Così non è.
Ho cercato ovunque ma ho solo rintracciato poche informazioni in C#.
Poco mi interessa il tipo di linguaggio di programmazione.
Mi interessa sapere se qualcuno sa dove rintracciare le caratteristiche delle finestre e dei processi che le hanno generate.
Io ho trovato queste:
User32.dll 
- FindWindow(     >>per cercare l'handle della finestra conoscendo il suo nome,
- SetWindowPos(    >>per dimensionare e posizionare la finestra di cui si conosce l'handle,
- GetWindowRect(    >>per ricevere la dimensione e posizione della finestra di cui si conosce l'handle
Mi servirebbe sapere:
1- Nome finestra: notepad
2- Handle: 328860
3- Dimensioni:  0, 0, 600, 400
4- avviata dal programma: C:\Windows\System32\notepad.exe con file: C:\TestoProva.txt
Le prime 3 informazioni nessun problema.
Per la 4 non ho trovato nulla. Qualcuno ha qualche dritta?

Grazie mille

17 Risposte

  • Re: Caratteristiche finestre e processi windows

    Si puo' fare TUTTO con le win32 api di Windows

     (e con 5/10 anni di sviluppo software di SISTEMA in ambiente Microsoft) . 

    Fonte: la documentazione ufficiale di Windows!

    https://learn.microsoft.com/en-us/windows/win32/api/

  • Re: Caratteristiche finestre e processi windows

    12/04/2023 - Gianky ha scritto:


    stavo cercando di memorizzare le caratteristiche delle finestre aperte nel mio desktop per poi, una volta riavviato il PC con Win10, riavviarle nella medesima posizione e contenuto.

    Ma come è possibile fare questo? Non sei tu ad “avviare” le finestre, ma i programmi in questione, che possono quindi indicare posizioni diverse per le suddette finestre, oltre al fatto che ci sono anche degli “stili” da prendere in considerazione per le finestre stesse, oltre alle dimensioni e alla posizione che occupano, e il tuo sistema potrebbe facilmente interferire con il controllo della finestra da parte della applicazione che la gestisce, oppure magari viene visualizzata dopo che il tuo programma è entrato in funzione.

    Ad ogni modo, hai provato a fare una banale ricerca su Google?

  • Re: Caratteristiche finestre e processi windows

    12/04/2023 - Gianky ha scritto:


    Mi servirebbe sapere:
    1- Nome finestra: notepad
    2- Handle: 328860
    […]

    P.S.: l'handle della finestra cambia ogni volta, quindi non è un dato valido come identificativo della finestra su cui vuoi agire, nel caso tu intenda memorizzarlo e riutilizzarlo in seguito, invece che al momento.

  • Re: Caratteristiche finestre e processi windows

    Se “sospendi” il sistema, puoi riattivarlo nelle condizioni in cui l'hai sospeso in quanto il contenuto della RAM er lo stato complessivo è mantenuto da windows 

    Ma se lo spegni, le cose cambiano. Potrai far ripartire i processi attivi e posizionare le relative finestre come prima ma NON manterrei lo stato di quel momento.

    Tanto peggio per i processi senza finestre di cui non saprai nulla al momento in cui le controlli.

    Insomma è una cosa che non puoi fare e che non dipende dal linguaggio.

  • Re: Caratteristiche finestre e processi windows

    Ciao

    Quello che chiedi è difficilmente fattibile.

    Parlando di C#, se vuoi esiste la classe Process che ti dice i processi attualmente aperti e, volendo, c'è anche l'handle (riferimento) della finestra principale di tale processo.

    Quello che puoi fare è quindi prendere tutti i processi, vedere se hanno una main window (se non c'è sono i processi in background) e quindi salvarti tutte le informazioni di quel processo (c'è anche il path completo dell'eseguibile).

    Fin qui sembrerebbe tutto facile. Il problema è che con queste istruzioni puoi benissimo riaprire tutti i processi attivi in precedenza e riposizionare le finestre, però lo “stato” di quei processi non riesci a ripristinarlo.

    Ad esempio, se hai aperto il programma per gestire la posta e ti sei posizionato sulla mail “Ho fatto 6 al superenalotto”, poi quando rilanci il processo, questo si posizionerà in automatico sulla prima email, così come se avessi appena aperto il programma. Quindi di fatto hai riaperto il programma ma non sei nella condizione in cui hai lasciato il tutto quando hai spento il PC

    Detto questo, che è un problema tecnico, il tuo scopo qual è?

    Perchè, se ricordo bene, puoi decidere di “ibernare” il sistema, per cui Windows in automatico salva tutto quello che serve e lo ripristina quando esci dallo stato di ibernazione. Secondo me è il massimo che puoi ottenere

  • Re: Caratteristiche finestre e processi windows

    12/04/2023 - migliorabile ha scritto:


    Si puo' fare TUTTO con le win32 api di Windows

     (e con 5/10 anni di sviluppo software di SISTEMA in ambiente Microsoft) . 

    Fonte: la documentazione ufficiale di Windows!

    https://learn.microsoft.com/en-us/windows/win32/api/

    Che si potesse fare TUTTO lo immagino.
    Quello che sicuramente mi manca è l'esperienza. Solo che dopo aver perso diversi giorni nel ricercare in internet documentazione ed esempi su cui appoggiarmi mi sono arreso e quindi chiedo consiglio specifico.

  • Re: Caratteristiche finestre e processi windows

    No, che si possa fare “tutto” non è proprio vero e l'esperienza non conta.

    Nello specifico, non puoi fare quello che chiedi, come ti è stato già detto e non c'è nulla da cercare né da consigliare.

    Forse non hai letto la mia risposta precedente (e altre).

    Puoi fare un elenco dei processi attivi con finestra e riavviarli posizionando la finestra dove stava, ma NON riprodurrai MAI lo stato che avevano in precedenza.

    Fra l'altro, se pensi che un elemento come “Handle: 328860” ti possa servire, sei proprio fuori strada.

    Nè potrai gestire processi/servizi che lavorano senza finestre e che sono gestiti dal SO o dalle altre applicazioni.

    Solo il codice del SO lo può fare, appunto, con l'ibernazione.

    E a parte questo utilizzo (già previsto dal SO), non capisco comunque a cosa possa servire questo codice.

  • Re: Caratteristiche finestre e processi windows

    12/04/2023 - Alka ha scritto:


    12/04/2023 - Gianky ha scritto:


    stavo cercando di memorizzare le caratteristiche delle finestre aperte nel mio desktop per poi, una volta riavviato il PC con Win10, riavviarle nella medesima posizione e contenuto.

    Ma come è possibile fare questo? Non sei tu ad “avviare” le finestre, ma i programmi in questione, che possono quindi indicare posizioni diverse per le suddette finestre, oltre al fatto che ci sono anche degli “stili” da prendere in considerazione per le finestre stesse, oltre alle dimensioni e alla posizione che occupano, e il tuo sistema potrebbe facilmente interferire con il controllo della finestra da parte della applicazione che la gestisce, oppure magari viene visualizzata dopo che il tuo programma è entrato in funzione.

    Ad ogni modo, hai provato a fare una banale ricerca su Google?

    12/04/2023 - Alka ha scritto:


    12/04/2023 - Gianky ha scritto:


    Mi servirebbe sapere:
    1- Nome finestra: notepad
    2- Handle: 328860
    […]

    P.S.: l'handle della finestra cambia ogni volta, quindi non è un dato valido come identificativo della finestra su cui vuoi agire, nel caso tu intenda memorizzarlo e riutilizzarlo in seguito, invece che al momento.

    Ho fatto 1000 ricerche con google. Ho trovato tante cose ma nulla che mi indirizzasse ad una vera soluzione.
    Ad esempio ho visto che la stessa finestra può avere diversi handle (maniglie) così come un processo ha un solo ID ma può avere diversi handle. Alcune finestre sono visibili altre no. Alcune non hanno nome ma solo un handle. Esistono alcune finestre che il sistema apre ma lascia invisibili ecc...
    Considera che ho fatto ricerche anche con bing per vedere se potevo essere indirizzato verso altre pagine magari risolutive...
    Vero, l'handle della finestra cambia ma a me NON serve memorizzare l'handle ma conoscere le caratteristiche della finestra in quel momento: dimensioni, posizione e programma che l'ha generata. Magari anche gli attributi del programma (ad esempio il file che il programma ha caricato).
    Poi, quando ho memorizzato queste caratteristiche posso, ad esempio dopo un riavvio del sistema, avviare il programma (magari con il medesimo attributo) e dimensionare la sua finestra e posizionarla sullo schermo.

  • Re: Caratteristiche finestre e processi windows

    12/04/2023 - oregon ha scritto:


    Se “sospendi” il sistema, puoi riattivarlo nelle condizioni in cui l'hai sospeso in quanto il contenuto della RAM er lo stato complessivo è mantenuto da windows 

    Ma se lo spegni, le cose cambiano. Potrai far ripartire i processi attivi e posizionare le relative finestre come prima ma NON manterrei lo stato di quel momento.

    Tanto peggio per i processi senza finestre di cui non saprai nulla al momento in cui le controlli.

    Insomma è una cosa che non puoi fare e che non dipende dal linguaggio.

    Esattamente. Non mi serve avere le medesime condizioni di memoria. Se fosse così userei "sospendi". 
    Vorrei solo conoscere le caratteristiche delle finestre attive per poi, ad avvio del sistema, avviare i programmi che generano le finestre ripristinandole con le medesime caratteristiche di posizione e dimensione.

  • Re: Caratteristiche finestre e processi windows

    13/04/2023 - PiGi78 ha scritto:


    Ciao

    Quello che chiedi è difficilmente fattibile.

    Parlando di C#, se vuoi esiste la classe Process che ti dice i processi attualmente aperti e, volendo, c'è anche l'handle (riferimento) della finestra principale di tale processo.

    Quello che puoi fare è quindi prendere tutti i processi, vedere se hanno una main window (se non c'è sono i processi in background) e quindi salvarti tutte le informazioni di quel processo (c'è anche il path completo dell'eseguibile).

    Fin qui sembrerebbe tutto facile. Il problema è che con queste istruzioni puoi benissimo riaprire tutti i processi attivi in precedenza e riposizionare le finestre, però lo “stato” di quei processi non riesci a ripristinarlo.

    Ad esempio, se hai aperto il programma per gestire la posta e ti sei posizionato sulla mail “Ho fatto 6 al superenalotto”, poi quando rilanci il processo, questo si posizionerà in automatico sulla prima email, così come se avessi appena aperto il programma. Quindi di fatto hai riaperto il programma ma non sei nella condizione in cui hai lasciato il tutto quando hai spento il PC

    Detto questo, che è un problema tecnico, il tuo scopo qual è?

    Perchè, se ricordo bene, puoi decidere di “ibernare” il sistema, per cui Windows in automatico salva tutto quello che serve e lo ripristina quando esci dallo stato di ibernazione. Secondo me è il massimo che puoi ottenere

    Sicuramente l'ibernazione o la sospensione è il modo più efficace di ripristino.
    Il mio obietttivo è un altro: avviare con un click tutti i programmi che uso dimensionandoli e  posizionandoli nei monitor come sono abituato a fare ogni mattina. Di fatto con le funzioni che ho trovato potrei già farlo ma mi piacerebbe estendere questa "esigenza". Per esempio facendo in modo che il programma memorizzi tutte le dimensioni, posizione e programma-di-avvio delle finestre sullo schermo in modo da non doverlo impostare manualmente. Mi piacerebbe anche trovare le caratteristiche (compreso di posizione) di tutte le icone sullo schermo in modo da memorizzarne la posizione per poi ripristinarle quando serve. Anche per le icone ho cercato ma non ho trovato nessuna indicazione utile.
    Come dici tu, sarebbe bello poter ripristinare anche la posizione all'interno di ogni programma tipo "posizionarsi sulla mail..." ma, ovviamente, ogni applicazione al suo interno agisce in modo autonomo ed è impossibile agire con metodi standard per tutte le app. Magari è possibile fare qualcosa con metodi specifici nei programmi più utilizzati tipo Chrome.

  • Re: Caratteristiche finestre e processi windows

    18/04/2023 - Gianky ha scritto:

    Ho fatto 1000 ricerche con google. Ho trovato tante cose ma nulla che mi indirizzasse ad una vera soluzione.

    E non ne troverai.

    Ad esempio ho visto che la stessa finestra può avere diversi handle (maniglie) così come un processo ha un solo ID ma può avere diversi handle. 

    Ovviamente è così ma sono tutti identificativi dinamici che sono assegnati dal sistema operativo e non identificano gli oggetti da una sessione all'altra. Quindi non ti aspettare di usarli nuovamente.

    Alcune finestre sono visibili altre no. Alcune non hanno nome ma solo un handle. Esistono alcune finestre che il sistema apre ma lascia invisibili ecc...

    Esatto, è il SO che decide cosa fare.


    Considera che ho fatto ricerche anche con bing per vedere se potevo essere indirizzato verso altre pagine magari risolutive...

    Perdi tempo

    Vero, l'handle della finestra cambia ma a me NON serve memorizzare l'handle ma conoscere le caratteristiche della finestra in quel momento: dimensioni, posizione e programma che l'ha generata. Magari anche gli attributi del programma (ad esempio il file che il programma ha caricato).
    Poi, quando ho memorizzato queste caratteristiche posso, ad esempio dopo un riavvio del sistema, avviare il programma (magari con il medesimo attributo) e dimensionare la sua finestra e posizionarla sullo schermo.

    Ed è l'unica cosa che puoi fare ma non puoi replicarne lo “stato” precedente come ti ho scritto più volte.

    Il mio obietttivo è un altro: avviare con un click tutti i programmi che uso dimensionandoli e  posizionandoli nei monitor come sono abituato a fare ogni mattina. 

    Per fare questo ti basta scrivere in un file di testo l'elenco di tutti questi programmi con le dimensioni e posizioni delle finestre (magari aggiustandoli in due o tre volte) e leggere il file all'avvio del sistema. Nulla di più semplice.

  • Re: Caratteristiche finestre e processi windows

    Il mio obietttivo è un altro: avviare con un click tutti i programmi che uso dimensionandoli e  posizionandoli nei monitor come sono abituato a fare ogni mattina. 

    Per fare questo ti basta scrivere in un file di testo l'elenco di tutti questi programmi con le dimensioni e posizioni delle finestre (magari aggiustandoli in due o tre volte) e leggere il file all'avvio del sistema. Nulla di più semplice.

    Certo che così è semplice. Diventa difficile nel momento in cui NON voglio farlo manualmente ma memorizzare tutte le dimensioni le posizione ed il nome del programma-di-avvio (con attributi) delle finestre che sono sullo schermo. Mi piacerebbe anche trovare le caratteristiche (compreso di posizione) di tutte le icone sullo schermo in modo da memorizzarne la posizione per poi ripristinarle quando serve. Anche per le icone ho cercato ma non ho trovato nessuna indicazione utile.
    E' esattamente come dici: in google e in bing non trovo nulla. 

    Ne sai il motivo? Sai dove potrei cercare? Hai qualche indicazione da darmi?

  • Re: Caratteristiche finestre e processi windows

    Te l'ho già detto il motivo, forse non sono stato chiaro.

    E' una cosa che non serve assolutamente e quindi nessuno ne parla.

    Comunque qualcosa del genere esiste … mi pare un tool DesktopOK

  • Re: Caratteristiche finestre e processi windows

    Già se esiste un tool che lo fa vuol significare che il “non serve assolutamente” non è vero.

    Sicuramente può essere utile a pochissimi e quindi, come dici tu, nessuno ne parla e di conseguenza nei motori di ricerca non si trova nulla.

    Però a me piacerebbe farmelo e non trovo le funzioni basi che me lo permettano. 

    DesktopOK non è in gnu e non posso accedere ai sorgenti e quindi non posso studiarne il funzionamento e capire che funzioni usa.

    A prescindere dalla propria opinione sull'opportunità o meno di creare un'applicazione che fa cose sicuramente poco utili, essendo in un forum di programmatori, speravo di trovare qualcuno con la competenza utile ad avere qualche dritta su che istruzioni usare o anche solo dove cercare.

Devi accedere o registrarti per scrivere nel forum
17 risposte