Accedere alle voci di menu dei programmi da un progetto visual basic e...

martedì 23 settembre 2008 - 14.41

Osiride80 Profilo | Newbie

Chiedo in aiuto a chi potrà darmelo, dato che avrei bisogno di sviluppare un'applicazione in VB.NET che acceda alla lista delle voci contenute nei menu dei prorgammi aperti da windows e alle voci di menu di windows stesso.

Per quanto riguarda windows vorrei poter pilotare da codice le stesse scelte che vengono effettuate tramite il mouse. Aprire Start (e questo è facile anche mediante invio della relativa combinazione di tasti), ma poi riuscire a scegliere una qualsiasi voce contenuta nel menu start da codice.

Credo che esista un modo x accedere alla lista dei nomi visualizzati nel menu start ma non so esattamente come fare.

Per quanto riguarda gli altri programmi, vorrei poter accedere alla loro barra di menu, via codice, allo stesso modo in cui accedo al menu start e alle sue voci di menu.

Per esempio, una volta aperto wordpad, inviare il comando file - salva, non mediante l'invio della combinazioni dei tasti discelta rapida, ma scrivendo il nome dell'azione relativa al comando, che se confrontata con la voce di menu, e verificato che corrisponde a tale parola, esegua poi l'azione desiderata - la stessa cosa, col medesimo controllo, vorrei effettuarla per scegliere qualsiasi voce di menu del menu start.

Ringrazio in anticipo chi può consigliarmi come effettuare questa operazione.

Brainkiller Profilo | Guru

>Chiedo in aiuto a chi potrà darmelo, dato che avrei bisogno di
>sviluppare un'applicazione in VB.NET che acceda alla lista delle
>voci contenute nei menu dei prorgammi aperti da windows e alle
>voci di menu di windows stesso.

Ciao,
puoi descrivere brevemente cosa intendi realizzare con la funzionalità da te richiesta. Questo solo per indirizzarti meglio nella risposta. Grazie Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Osiride80 Profilo | Newbie

Per dare una speigazione semplice senza entrare nel merito del programma vro e proprio ti posso dire...

In un form inserisco una textbox e un tasto di conferma

Nella textbox inserisco il nome della della voce di menu che voglio venga eseguita e una volta permuto il tasto di conferma il programma effettuerà x me, la scelta che avrei dovuto fare tramite il mouse.

Ora ti faccio un esempio con con quello che vorrei riuscire a fare con il menu start di windows. Possiedo windows vista e programmo con vb.net 2005.

inesrisco nella listbox la parola emule, parola che è contenuta tra le voci di menu del menu start, confermo, e vorrei che una volta confermata la parola, la mia applicazione avvii il proramma scelto.

Grazie in anticipo

Brainkiller Profilo | Guru

>inesrisco nella listbox la parola emule, parola che è contenuta
>tra le voci di menu del menu start, confermo, e vorrei che una
>volta confermata la parola, la mia applicazione avvii il proramma
>scelto.

Nel caso specifico è semplice, potresti scorrere l'elenco delle voci del menù Start->Programmi alla ricerca di emule e farlo partire. Ma immagino tu voglia replicare proprio il movimento con il mouse, ecc.ecc.
In questo caso devi costruire/ri-costruire il funzionamento di un macro-recorder ed andare a enumerare tutte le voci, simulare movimenti del mouse, clicks, ecc.

Il tutto si può fare utilizzando i messaggi di Windows e le API di sistema. Penso tu sappia come funziona la gestione dei messaggi in una applicazione Windows ? Non è banale.

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Osiride80 Profilo | Newbie

Grazie x le tue risposte.

Espongo meglio il problema.

Nel caso specifico del menu start, il programma dovrebbe inviare tra i tanti, il comando "Tutti i programmi" e, confrontata la stringa digitata nel form, dovrebbe aprire la lista dei programmi nel menu start, come accade solitamente. Poi inviato il comando "Accessori" espandere la cartella del menu, e in un secondo monento, inviando il comando "Blocco note", aprire il programma.

Per fare questo bisogna sicuramente intercettare ciò che si trova nel Form start di windows ed interagire con esso. Cosa che non so come fare.

Per i vari menu dei programmi di windows dovrei ugualmente riuscire a ad accedere alla lista di comandi disponibile nel menu scelto per poi confermare il comando digitato nella textbox del mio form.

Come potrai ben capire ti ho voluto fare un esempio semplice dello scopo del mio programma, che naturalmente non è fermo all'idea del form con la textbox.

Mi serve sapere come ottenere la lista delle voci di menu interessate nel momento dell'apertura dei menu in questione, o sapere dove reperire fonti che mi spieghino come fare.

Ancora grazie x l'aiuto

Brainkiller Profilo | Guru

>Nel caso specifico del menu start, il programma dovrebbe inviare
>tra i tanti, il comando "Tutti i programmi" e, confrontata la
>stringa digitata nel form, dovrebbe aprire la lista dei programmi
>nel menu start, come accade solitamente. Poi inviato il comando
>"Accessori" espandere la cartella del menu, e in un secondo monento,
>inviando il comando "Blocco note", aprire il programma.

Ma tu hai già visto in circolazione un programma che fa queste cose ?

>Per fare questo bisogna sicuramente intercettare ciò che si trova
>nel Form start di windows ed interagire con esso. Cosa che non
>so come fare.

Eh appunto bisogna chiamare una serie di API di sistema di Windows che trovi qui documentate:
http://msdn.microsoft.com/en-us/library/ms632583.aspx
Apri il ramo della Treeview chiamato "Menu". Io naturalmente non l'ho mai fatto ma partirei da qui.

Ripeto che se non hai una vasta esperienza e conoscenza di Windows, C++, e API difficilmente tiri fuori qualcosa.

Tra l'altro da questo thread:
http://groups.google.com/group/microsoft.public.vc.mfc/browse_thread/thread/486551d03fe165ce/2cdaf86e5ac33a76?lnk=raot
si desume se leggi la risposta di Jeffrey Tan di Microsoft che forse non è neanche possibile.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5