|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#81 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
un attimo di pazienza, devo approfondire ancora alcuni aspetti
Cionci, hai presente in IE la nutrita serie di pulsanti posti in alto? stampa/pagina iniziale/avanti/indietro etc.... sai se sono posti su una ToolBar? |
|
|
|
|
|
#82 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì sono una toolbar all'interno di una ReBar (si vede con Spy++)...
|
|
|
|
|
|
#83 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
lo supponevo; il problema è che non si riesce a ritornare l'handle di ogni singolo pulsante presente su essa
nemmeno spy++ ritorna l'handle del singolo pulsante un problema: HWND hPointWnd = FindWindow(0,"Calcolatrice"); SetCapture( hPointWnd ); ::SetCursorPos(0,0); questo codice dovrebbe ricavare l'handle della calcolatrice di windows e posizionare il cursore del mouse alle coordinate (0,0) relative alla finestra della calcolatrice ma al contrario, posiziona il cursore rispetto allo schermo di windows sai se esiste un'altra funzione in modo che prenda come riferimento la windows della calcolatrice in luogo dello schermo? |
|
|
|
|
|
#84 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
per informare window di usare un riferimento diverso dallo screen non trovo nulla; sto usando questo
RECT r; ::GetWindowRect(hPointWnd, &r ); ::SetCursorPos( r.left + x_desiderata , r.top + y_desiderata ); |
|
|
|
|
|
#85 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Direi che va bene così...
Riguardo ai child della ToolBar purtroppo non credo che si possano ottenere... e non so nemmeno se sono window... |
|
|
|
|
|
#86 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
però ho lavorato per nulla in quanto non serve al mio scopo
se provi a giocare con il seguente codice ti accorgerai che cliccando su di una toolbar, viene nascosta completamente; occhio che ha il potere di nascondere ogni cosa: in pratica ti ritrovi il desktop completamente vuoto se noti, anche se clicchi su un pulsante della toolbar, viene preso come riferimeto non l'handle del pulsante ma di tutta la toolbar; difatti, muovendosi col cursore sui vari pulsanti l'handle non cambia mai // qui ti ricavi l'handle dell'oggetto desiderato HWND hPointWnd ; while(quello che vuoi) { GetCursorPos (&pt); hPointWnd = WindowFromPoint(pt); } // e qui lo nascondi ShowWindow(hPointWnd,SW_HIDE); il medesimo metodo ti permette di ritornare gli handle, di qualsiasi oggetto che si trova sotto al cursore del mouse, praticamente in stile spy++ in pratica, ho scoperto dopo un pò di esperimenti che la funzione: WindowFromPoint(pt) tratta tutti i controlli come fossero delle finestre e quindi ti ritorna l'handle corretto di qualsiasi cosa lo puoi constatare usando la ShowWindow(hPointWnd,SW_HIDE); spero di non averti annoiato troppo |
|
|
|
|
|
#87 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
leggi qua
In Windows tutta l'interfaccia utente e' composta da finestre. Sono finestre quelle contenenti i menu, le finestre di dialogo, i pulsanti, i menu a tendina ecc. Le finestre ricevono l'input dall'utente sottoforma di messaggi, e comunicano tra loro sempre nello stesso modo. Ad esempio quando l'utente ridimensiona una fiestra, Windows invia un messaggio al programma descrivente l'azione in corso, e permette al programma di reagire di conseguenza. L'invio di un messaggio corrisponde ad una chiamata di funzione, cioe' quando Windows deve inviare un certo messaggio ad un programma non fa altro che chiamare una certa funzione di quel programma. La funzione in oggetto e' detta window procedure, ed il messaggio e' stabilito dal suo argomento. In Windows tutta l'interfaccia utente e' composta da finestre ed io aggiungo, o trattate come tali |
|
|
|
|
|
#88 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Sì sono tutte Windows...ma le toolbar sono un componente monolitico...purtroppo... Mi spieghi qual era lo scopo iniziale della tua investigazione ? |
|
|
|
|
|
|
#89 | |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
Quote:
il programma per il quale genero la documentazione è costituito da numerosissime videate; in alcune di queste videate sono presenti molti campi che l'utente deve compilare per ottenere determinati risultati il mio programma quindi, funzionerà da client; il programma che riceverà i miei messaggi da server la comunicazione tra client->server avviene attraverso link presenti nella mia documentazione; detti link, invieranno attraverso il client dei messaggi al server che a sua volta mi mostrerà la videata interessata insomma, è come se devi spiegare il funzionamento di IE con una pagina HTML e nella spiegazione, quando ti serve mostrare una particolare videata, anzichè mettere una banale bitmap metti un link che ti fa apparire la finestra: Strumenti->Opzioni cmq, sono riuscito a catturare l'ID di un pulsante presente su di una toolbar facendo uso di SendMessage |
|
|
|
|
|
|
#90 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
ho notato anche una cosa ma non so se è un caso; se catturi l'indirizzo di una finestra e ne prendi nota; poi catturi l'indirizzo di un pulsante sempre prendendone nota
chiudi il programma per il quale hai catturato gli indirizzi lo rilanci ed ovviamente l'indirizzo base cambia poi, ricatturi i due indirizzi come sopra, se fai la differenza la distanza non cambia è un caso? prima prova --------------- window = &H344 (dec = 836) pulsante = &H3B0 (dec = 944) seconda prova ------------------ window = &H558 (dec = 1368) pulsante = &H5C4 (dec = 1476) 1368-836 = 532 ytes 1476-944 = 532 bytes in entrambi i casi la distanza è uguale |
|
|
|
|
|
#91 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' abbastanza normale... Credo dipenda dall'ordine in cui vengono creati gli handle... Se non ci sono "interferenze" l'ordine è lo stesso...
|
|
|
|
|
|
#92 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
mi è venuto il dubbio pensando alla deframmentazione della memoria
se il tutto si ripete, basta tracciare il primo handle (indirizzo) ed i gioco è fatto ehi, non avrai mica iniziato a pensare che stessi diventando un hackers anche se ho imparato numerose cosette su windows che non intendo certo postare in questo luogo, per ovvi motivi |
|
|
|
|
|
#93 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E' interessante quella cosa che vuoi fare...
Riguardo agli ID... Magari gli hHandle vengono dichiarati in base all'handle della finestra princpale più l'ID che li rappresenta (come sai ogni window ha il suo ID)... Può benissimo essere....anche se questo implica che il processo di creazione di una finestra (almeno fino al punto in cui vengono riservati gli handle) sia un processo atomico (che non interrompibile dallo scheduler)... Può anche essere... E' una implementazione molto veloce soprattutto per il dispatching dei messaggi... |
|
|
|
|
|
#94 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
|
|
|
|
|
|
#95 |
|
Senior Member
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:54.



















