Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Tasto Start

Salve a tutti!
Sono mesi che non scrivo più sul NG perché ormai mi sono convertito a
C#. Ma ho bisogno di un vostro aiuto perché devo aiutare un amico a
fare un programmino in VB6.
Come si fa a cambiare il nome al tasto Start da codice? Ha una utility
che lo fa, ma lo vorrebbe far fare da codice. Mi aiutate, per favore?
Grazie!
--
DoS
email> dos0880 AT libero DOT it

 che lo fa, ma lo vorrebbe far fare da codice. Mi aiutate, per favore?
vediamo se ci azzecco:
-becchi il nome della classe del pulsante con spy++
-con la FindWindow ricavi l'hwnd del pulsantino
-con una qualche api specifica (forse SetWindowText), oppure con
SetWindowLong (per questo consulta MSDN) gli cambi caption.
ciao, assa.


wrote:

--



Mi ricordavo che piu' semplicemente c'era una chiave sul registro
almeno in Win98.
CIAnO

 almeno in Win98.
dubito che modificando il registro si ottenga il risultato in 'tempo reale'.
presumo che una volta effettuata la modifica sia necessario riavviare...
ciao, assa.

Io ricordo che per modificarlo occorreva editare una dll, e comunque
windows95 (immagino anche 98) si inchiodava se si dava una scritta diversa
da 5 caratteri (quindi potevi scrivere anziché "start" "avvia" ma non
"aprimenu")

Grazie!
Su Win 9x bastava editare EXPLORER.EXE e cercare "AVVIO" o "START"....
Per il resto non saprei ^__^;
Ciao
Aran

 SetWindowLong (per questo consulta MSDN) gli cambi caption.
SetWindowsText in effetti cambia il caption di qualunque pulsante noto
l'handle.
Il problema che la scritta "Start" o "Avvio" non è il caption del pulsante
di avvio di Windows.
Mi sembra di ricordare di aver letto che sia una bitmap.
Quindi si dovrebbe usare una istruzione del tipo:
retval=SendMessage(Pulsante.hdc, BM_SETIMAGE, IMAGE_BITMAP, byVal
Bitmap.hdc)
Questa riga però sono riuscito a farla funzionare solo per modificare
l'immagine su un ButtonControl con la nuova immagine caricata su un
controllo Image nello stesso VB projec.
Non ci riesco con pulsanti di altre applicazioni aperte.
L'altro problema è ottenere l'handle di un pulsante "esterno" in modo
dinamico (visto che cambia ad ogni riavvio del SO).
Qualche idea?
--
Giorgio
--------------------------------
Inviato via 
http://usenet.libero.it
 

 Qualche idea?
questo  problema non si pone, per trovare l'handle del pulsante e'
sufficiente ricavarne il nome della classe (che e' univoca) e poi trovarne
l'hwnd con findwindow, come avevo suggerito.
ciao, assa.

 che lo fa, ma lo vorrebbe far fare da codice. Mi aiutate, per favore?
Il tool di cui parli cambia la scritta presente in explorer.exe.
Come dice Cristiano, essendo hard-coded nell'exe non può essere cambiata con
una scritta di lunghezza diversa (in Win francese cosa c'è scritto?
"departure"? allora possono arrivare a 9 lettere! :))
Per ottenere l'handle del tasto avvio c'è questo bel post di Corrado C.
Per impostare la caption dovrebbe essere sufficente una bella
SetWindowText().
http://groups.google.it/groups?q=hWnd+del+pulsante+di+START+group:it.comp.la
ng.visual-basic&hl=it&lr=&ie=UTF-8&selm=63dm1l%24opa%40server-b.cs.interbusi
ness.it
&rnum=1
Ciao

 Su Win 9x bastava editare EXPLORER.EXE e cercare "AVVIO" o "START"....
Resource Hacker
http://rpi.net.au/~ajohnson/resourcehacker
Modifica c:\windows\explorer.exe e ci puoi mettere la
scritta che vuoi.
--
Fosco

 scritta che vuoi.
Resource Tuner - 
http://www.restuner.com
WBR,
Sashja

 Come si fa a cambiare il nome al tasto Start da codice?
Dunque...
Scrivo solo perché ho usato questo esempio per pasticciare un po' con le API
e qualcosina è venuto fuori :-)
Const GWL_STYLE = -16
Const BS_BITMAP = &H80
Const BM_GETIMAGE = &HF6
Const BM_SETIMAGE = &HF7
Const IMAGE_BITMAP = &H0
Const LR_LOADFROMFILE = &H10
' [Salto la dichiarazione delle funzioni API]
Private hNewImage As Long
Private hOldImage As Long
Private hTrayBar As Long
Private hStart As Long
Private OldStyle As Long
Private NewStyle As Long
Private Sub Command1_Click()
    Dim retval As Long
    hTrayBar = FindWindowEx(CLng(0), CLng(0), "Shell_TrayWnd", CLng(0))
    hStart = FindWindowEx(hTrayBar, CLng(0), "BUTTON", CLng(0))
    hOldImage = SendMessage(hStart, BM_GETIMAGE, IMAGE_BITMAP, ByVal CLng(0))
    hNewImage = LoadImage(CLng(0), App.Path & "\NuovoPulsanteStart.bmp",
IMAGE_BITMAP, CLng(0), CLng(0), LR_LOADFROMFILE)
    OldStyle = GetWindowLong(hStart, GWL_STYLE)
    NewStyle = OldStyle Or BS_BITMAP
    retval = SetWindowLong(hStart, GWL_STYLE, ByVal NewStyle)
    retval = SendMessage(hStart, BM_SETIMAGE, IMAGE_BITMAP, ByVal hNewImage)
End Sub
Private Sub Form_Unload(Cancel As Integer)
 
    Dim retval As Long
 
    retval = SetWindowLong(hStart, GWL_STYLE, ByVal OldStyle)
    retval = SendMessage(hStart, BM_SETIMAGE, IMAGE_BITMAP, ByVal hOldImage)
End Sub
Quindi...
Prima si trova l'handle del pulsante, poi si trova la sua immagine, si
carica la nuova immagine, la si applica al pulsante. Alla fine si rimette
tutto a posto!
Questo funziona con Win98SE e non funziona con WinNTsp6 o con Win2000.
Con WinNT il pulsante Start diventa grigio e non mostra il bitmap.
Sapete dirmi perché?
Mi è venuto in mente che potrebbe essere perché dopo il message BM_SETIMAGE
il SO invia un messaggio WM_PAINT e un messaggio WM_ERASEBKGND che
cancellano il disegno.
Possibile?
La cosa che ho trovato strana è che senza l'attribuzione del nuovo stile al
pulsante (OldStyle Or BS_BITMAP), il programma non funziona nemmeno sotto
Win98SE.
E' strano perché quell'istruzione non fa assolutamente niente visto che
nello style del pulsante Start c'è già BS_BITMAP.
Lo stesso esempio funziona anche con una icona (si devono cambiare un po' di
costanti come IMAGE_BITMAP in IMAGE_ICON ecc.), ma si deve anche cambiare lo
Style del pulsante con BS_ICON. Però non riesco a farlo andare nel senso che
mi si incasina lo stile e quindi il funzionamento del pulsante!
La cosa migliore forse sarebbe creare un nuovo pulsante che erediti le
proprietà (Style ecc.) del pulsante Start poi fare un hide del pulsante
originale.
Giusto?
Ciao
