Newsgroup: it.comp.programmare.win32
Titolo: Messaggi Sconosciuti di Windows

Salve a tutti,
c'è speranza in qualche modo di capire a cosa servono quei messaggi che
Spy++ classifica come sconosciuti?
Innanzitutto ho un problema: c'è modo di spiare i messaggi destinati alla
finestra di un menu con Spy++? non credo, o meglio, bisogna spiare tutti i
msg del processo.... come si fa infatti a selezionare la finestra del menu
quando non esiste ancora?.... vabbè la soluzione x me è spiare tutti i msg
del Processo e quando vedo che sono inviati ad una finestra che ancora non
conosco deduco che sia la finestra del menu.......
Quando apro un menu ho notato che tra gli altri innumerevoli messaggi viene
inviato un msg: 0x01E2 con wParam=1 e lParam=0.... capire a cosa serve
rimarrà un mistero o qualcuno conosce una documentazione riguardo questi
msg?......
Altra domanda: il msg WM_INITMENU ha come parametro l'handle del menu.....
ho notato però che questo handle è diverso rispetto a quello che viene
passato con il msg WM_INITPOPUPMENU che viene dopo.... qualcuno mi sa
spiegare la differenza? a cosa si riferiscono questi due handles?
Bye
Johnny
--
Visitate il mio Sito:
http://digiland.iol.it/Superpork

 spiegare la differenza?
Nel primo caso viene passato l'handle del menu "intero" (tutta la barra),
nel secondo viene passato l'handle del menu "popup" (ossia quello a comparsa
che contiene i comandi veri e propri). Guarda l'API GetSubMenu() per avere
un'idea piu` precisa.
--
Bye! Lorenzo Lutti
http://antani.virtualave.net/

 Cosa intendi con "la finestra di un menu"? Una dialog? Devi spiegare
meglio.
la "finestra di menu" per me è la tendina che appare quando si clicca su una
barra e che contiene i comandi veri e propri.... sarà anch'essa una finestra
con una sua classe no?
il problema è che è impossibile averla aperta per potervi puntare sopra con
il "Finder Tool" di Spy++
come si fa?
e un'altra domanda: questa "finestra di menu" viene creata ogni volta che
occorre far apparire un menu a tendina o il sistema la crea una volta per
tutte ed ogni volta la cambia secondo le necessità?
bye
Johnny

> sarà anch'essa una finestra con una sua classe no?
Decisamente no!
Non possiede un suo HWND, per cui non e' una window intesa come un'entita'
registrata con una propria classe ed una sua WindowProc.
Il sistema
associa ad ogni menu un HMENU che serve in seguito per manipolare il menu
stesso associando e modificando i suoi items, e naturalmente per veicolare
i vari CommandLoop nella maniera corretta...
In pratica, con i menu si
parla di MenuLoop piu' che di ciclo o coda di messaggi come avviene per le
Window, dovrebbe essere l'applicazione stessa a gestire questo ciclo di
comandi.
Ciao, Davide.
--------------------------------
Inviato via 
http://usenet.iol.it
 

 i vari CommandLoop nella maniera corretta...
ma scusa allora i vari msg che vengono inviati per i menu (entermenuloop,
initmenu...ecc) a chi li invia al sistema? all'HMENU???

 initmenu...ecc) a chi li invia al sistema? all'HMENU???
no. alla finestra alla quale il menu appartiene (owner).
ciao :: xaero

 ha scritto nel messaggio
news:9miir0$2dnvt$2...@ID-51253.news.dfncis.de...

questo non č vero!
dopo WM_INITPOPUPMENU (che effettivamente viene mandato all'owner) io vedo
messaggi come WINDOWPOSCHANGING , NCCALCSIZE, WINDOWPOSCHANGED che vengono
inviati ad una finestra che non č né l'owner né l'Edit... presumo sia la
finestra del menu! ma qui mi si dice che non esiste una fienstra dei
menu.....
qualcuno sa spiegarmi come funziona?
Bye
Johnny

un'entita' registrata con una propria classe ed una sua WindowProc.
non solo hanno un HWND, hanno anche una loro classe ("#32768")

 riferiscono questi due handles?
WM_INITMENUPOPUP viene inviato per inizializzare i sotto-menu di un menu 
principale, WM_INITMENU solo per il menu principale. Hanno handle 
diversi perchè sono menu diversi

 inviati ad una finestra che non è né l'owner né l'Edit...
Evidentemente il programma che stai monitorando fa qualcosa di strano, ho
appena provato a farlo col Notepad e non succede niente di simile.


 appena provato a farlo col Notepad e non succede niente di simile.
prova a farlo con WordPad....
comunque l'ho trovato da solo la classe del menu
č una classe di finestra di sistema
#32768 WindowPopuMenu
ed č a questa classe che vengonon inviati quei messaggi che dicevo...
solo che con Spy non ci si riesce a spiarli.... dice che la finestra č di
sistema e non si puň!
Bye
Johnny
PS: leggo solo ora i suggerimenti di Hyperion che č d'accordo con me nel
sostenere che esiste una classe di finestra e che č proprio la #32768

 diversi perchč sono menu diversi
Thanks
Bye
Johnny

> non solo hanno un HWND, hanno anche una loro classe ("#32768")
volevo ben dire io..... ;-)

 sistema e non si puň!
Ho fatto alcuni "esperimenti", ed č saltato fuori qualcosa di strano :
Lancio wordpad e nel momento stesso in cui uso il menu, faccio uno
"snapshot" del sistema (processi>threads>finestre)
Cosě salta fuori questa finestra #32768 ... la "trasporto" sul desktop e
la rendo visibile: ha la stessa forma e dimensione dell'ultimo menů
selezionato in wordpad...
Chiudo wordpad ma la finestrella rimane attiva... il suo creatore č il
thread di MSGSRV32.EXE ... la chiudo (postmessage : wm_close)... crasha
il sistema in una maniera MAI vista: I menů di *qualsiasi* applicazione
non vengono piů disegnati (le "finestrelle")... questo dura molto
poco... dopo 4 o 5 tentativi compaiono dialogs di windows in bianco :
"unhandled exception #(codice)"... un bel riavvione ;(
I don't know what's going on ... (non ho mai lavorato "a basso livello"
con i menů! ;P)
--
Ciao !  Davide DG.

 Ciao !  Davide DG.
bye
Johnny
PS: sono sempre il "Johnny" che ha fatto cominciato questo thread.... solo
che sto scrivendo dall'universita' con un altro account! =)

 Muhaahaa! =).... adoro fare sti pasticci!
Seee... oggi č successo di nuovo... mai visto un errore cosě
devastante!!!
Cmq forse mi ricordavo male: non era MSGSRV32.. almeno, oggi ho
semplicemente "ucciso" la finestra #32768, ma quando apparteneva
all'applicazione.
Ad ogni modo.... ma lo scopo di tutto questo, per te, cos'era? Cosa stai
cercando di fare?


 che dicevo...
Per curiosita`, perche` ti serve monitorare i messaggi inviati a quella
finestra?


 cercando di fare?
sto cercando di ricostruire l'esatta sequenza dei messaggi che vengono
inviati quando si interagisce con i menu per poterla ricostruire.... non ho
infatti la possibilità di utilizzare la SendInput (o Mouse_event) perchè
l'applicazione gira in una Window Station nascosta che non ha associato un
desktop attivo.... quindi niente sendinput.... ma con i messaggi qualcosa
funziona.... non con i menu in particolare però.... per questo cercavo
maggiori info sulla classe menu.... e se potessi spiare tutti i msg che
riceve sta finestra avrei qualche elemento in più.....
bye
Johnny
PS:giusto per chiarire... l'applicazione la vedo anche se è in una
WindowStation nascosta grazie ad un server VNC che faccio girare insieme
all'applicazione....

 finestra?
per capire come funzionano i menu!

modificata ad uso dell'applicazione che la richiede?
MSGSRV32 č il tuttofare di Windows 9x. Avvia il kernel, fa il controllo 
delle dll all'avvio, e crea il desktop (window class #32769). E smista i 
messaggi delle vxd. E' uno dei processi che non č bene terminare. Ora so 
che si occupa anche dei menu :) I crash, probabilmente, sono dovuti al 
fatto che le risorse allocate per i menu, dopo il messaggio di chiusura 
ricevuto, sono state liberate, magari qualche puntatore annullato, e 
track! un'eccezione laddove mai mortale avrebbe dovuto osare porre piede

 come fai a dirlo?
Basta avere un paio di quei programmi lievemente buggati che installano
un'icona nella traybar e che mostrano il relativo popup menu in modo
"persistente" (perche` il programmatore non ha chiamato
SetForegroundWindow() prima e dopo di TrackPopupMenu()). In quel caso hai
tutto il tempo necessario per far passare il focus a Spy++ e scegliere la
finestra del menu (anche se poi, come giustamente dicevi, Spy++ si rifiuta
di tracciare i messaggi).
