Italian Avviare programma Windows secondario, ridimensionare/riposizionare finestra

amorosik

Expert
Licensed User
Sto tentando, da codice B4J, di avviare Anydesk indicando un certo Id dispositivo sul quale collegarsi
Una roba del tipo
c:\programmi\anydesk.exe 123456789
E parte tutto correttamente, come atteso
Ma parte dove vuole lui e grande quanto vuole lui
Ravanando nel sito del produttore trovo che i comandi per dimensionare la finestra appena avviata e posizionarla dove si desidera , sarebbero anche previsti, ma solo come opzioni per il 'client custom'

https://support.anydesk.com/Custom_Client_Advanced_Options#Position_and_size_of_the_window

Io vorrei invece fare tutto da codice B4J, quindi lanciare il collegamento col client, dimensionare come pare a me, posizionare dove pare a me
Obiettivo del tutto e' aprire contemporaneamente il collegamento su 6-8 postazioni remote e tenerle sotto controllo tutte insieme
Da parametro su riga comando avvio, pare non si possa (se si potesse ditemelo pero')
Allora ho pensato, "e io ti sparo il comando da esterno"
Avendo l'handle della finestra apena aperta, credo sia possibile dargli posizione e dimensione
Bon, fin qua' ho lavorato io
Adesso pero' datemi una mano voi
Come l'e' che si fa?
 

picenainformatica

Active Member
Licensed User
Longtime User
Chiamalo tipo:

c:\programmi\anydesk.exe 123456789;800;600;center

Poi fai la split del command e usi tutti i parametri come ti servono
 

amorosik

Expert
Licensed User
Chiamalo tipo:

c:\programmi\anydesk.exe 123456789;800;600;center

Poi fai la split del command e usi tutti i parametri come ti servono

???
Il problema non e' come passare il comando
Ma come 'comandare' una qualsiasi finestra di Windows di dimensionarsi/posizionarsi come voglio io
 

amorosik

Expert
Licensed User
Usa le proprietà windowtop windowleft ecc.

Le proprieta' di cosa?
Guarda che sto parlando di un eseguibile secondario che sto avviando col mio programma principale
Non ho nessun controllo su dimensioni prima finestra e posizione dell'eseguibile avviato
Posso solo intervenire 'da fuori', inviando un messaggio ad una form di Windows
Una roba tipo

SetWindowPos(hWndMioProgSecondario, HWND_TOPMOST, 0, 0, 500, 800, SWP_SHOWWINDOW)

Che e' un'api standard di Windows
Solo che trovare hWndMioProgSecondario non ci sono ancora riuscito
 

amorosik

Expert
Licensed User
Se il programma secondario è tuo puoi passargli tutti i parametri di cui hai bisogno.

Se il programma secondario non è tuo allora puoi provare:

FindWindow in Java
SetWindowPos in java

un esempio per la chiamata alle funzioni User32 lo puoi vedere qui:
Chiamata ad api di windows

Il programma secondario non e' mio
"...Sto tentando, da codice B4J, di avviare Anydesk.."

La funziona da usare e'
SetWindowPos(hWndMioProgSecondario, HWND_TOPMOST, 0, 0, 500, 800, SWP_SHOWWINDOW)

Come trovare il Windows Handle (della finestra principale programma secondario appena avviato) da fornire alla funzione SetWindowPos?
 

picenainformatica

Active Member
Licensed User
Longtime User
con findwindow passando come parametro il titolo della finestra ("AnyDesk").
 

picenainformatica

Active Member
Licensed User
Longtime User
Il titolo della finestra di AnyDesk o di quello che vuoi. La ricerca viene effettuata anche su quella scritta.
Se il titolo cambia allora devi elencare TUTTE le finestre e selezionare quella che ti interessa.
Devi usare la API GetWindow con parametro GW_HWNDFIRST per trovare la prima dell'elenco,
la API GetWindowText per leggere l'intestazione (Titolo, scritta) della finestra e, se non è quella giusta
devi testare la prossima con GetWindow ed il parametro GW_HWNDNEXT
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Il titolo della finestra di AnyDesk o di quello che vuoi. La ricerca viene effettuata anche su quella scritta.
Se il titolo cambia allora devi elencare TUTTE le finestre e selezionare quella che ti interessa.
Devi usare la API GetWindow con parametro GW_HWNDFIRST per trovare la prima dell'elenco,
la API GetWindowText per leggere l'intestazione (Titolo, scritta) della finestra e, se non è quella giusta
devi testare la prossima con GetWindow ed il parametro GW_HWNDNEXT

Esatto,
confermo che si fa proprio così,
però non conosco B4J per cui non saprei come fare, io programmo principalmente in VB.NET
 
Last edited:
Top