Newsgroup: it.comp.lang.visual-basic
Titolo: Problema arduo





Ho la necessità di "creare" dei 
pc client i quali avviano window, lanciano Explorer (connettendosi ad una pagina 
Web) e non possono fare nient'altro se non consultare questa 
pagina.


Per Explorer non ho ancora provato, mi sembra di 
ricordare che ci sia un modo per togliere la possibilità di inserire un 
url.


 


Come faccio in vb?


Ho trovato un appunto, girando in msdn, di una 
funzione Postmessage(shellhandle,WM_QUIT,0,0) che, avendo l'handle della shell 
(explorer) dovrebbe chiuderlo.


Ho pensato quindi che, inserendo un programma in 
esecuzione automatica che chiude la shell explorer, l'utente non ha più 
il desktop e non può più fare niente (poi dal programma posso 
avviare explorer per internet).


 


Qualcuno ne sa qualcosa in più di 
me?


 


Per avere l'handle di una applicazione si usa 
normalmente la funzione FindWindow, ma indicando "explorer" mi 
restituisce 0 (nessun handle).


 


Spero di non aver creato confusione con i 2 programmi omonimi 
(explorer come shell ed explorer come browser), ringrazio chiunque sappia 
aiutarmi.


 



Per avere l'handle di una applicazione si usa normalmente la funzione
FindWindow, ma indicando "explorer" mi restituisce 0 (nessun handle).
L'handle delle icone del desktop si ottine con:
hWnd = GetWindow(FindWindow("Progman", "Program Manager"), GW_CHILD)
Poi per nasconderle:
ShowWindow hWnd, SW_SHOW
Invece per nascondere la barra delle applicazioni:
hWnd = FindWindow("Shell_TrayWnd", "")
ShowWindow hWnd, SW_HIDE
Ciao

...


Queste sono le poche righe di codice che ho usato, se riesci ad aiutarmi ti
ringrazio.
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
      (ByVal lpClassName As String, ByVal lpWindowName As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal _
         nCmdShow As Long) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal
lpsz2 As String) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Sub Main()
 x = FindWindow("progman", 0&)
 y = ShowWindow(x, SW_HIDE)
 x = FindWindow("Shell_TrayWnd", 0&)
 'y = ShowWindow(x, SW_HIDE)
 'z = FindWindowEx(x, 0, "Button", nil)
 'questo dovrebbe nascondere solo il tasto start
 'y = ShowWindow(z, SW_HIDE)
 y = SendMessage(x, WM_CLOSE, 0, 0)
End Sub


 y = SendMessage(x, WM_CLOSE, 0, 0)
A me funziona...
hSysTry = FindWindow("Shell_TrayWnd", "")
Ottineni l'handle della System Try Windows
La funzione FindWindowsEx ti da l'handle di un child di cui si conosce,
caption, class, padre e almeno un suo child da cui iniziare la ricerca. Se
lo metti NULL fa la ricerca dalla prima figlia. Quindi:
hButton = FindWindowEx(hSysTry, False, "Button", "")
e con SendMessage lo chiudi:
SendMessage  hButton, WM_CLOSE, False, False
Cmq sbagli a mettere le funzioni in quel modo e chiamare le variabili con
nomi non nmemonici. Quando chiami un api di cui non ti serve il ritorno, usa
la sintassi:
funzione parametro1, parametro2, ...
eviti di dichiarare variabili in più e il codice è più pulito
Oppure falle nidificate:
SendMessage FindWindowEx(hSysTry, False, "Button", ""), WM_CLOSE, False,
False
Ciao

...
<megasnip>
Secondo me vi state impelagando in un casino per niente...
Se devi disabilitare la shell, la soluzione piu' semplice che mi viene in
mente e'... sostituire explorer e settare un tuo programma come shell di
sistema.
Sorry, sono un po' fuso oggi (solo oggi? :-), e non trovo le istruzioni per
farlo...
Qualcuno si ricorda come si fa?
--
Roal Zanazzi
z...@iol.it


File system.ini, sezione bot, stringa shell
metti:
shell=programma.exe
Ciao ^_^