Newsgroup: it.comp.lang.visual-basic
Titolo: Chiudere finestra

Ciao, ancora una domandina...
in VB6, nascondo le cartelle e chiudo la finestra che le continene.
Vorrei ricreare tutto questo su VB 2005 ma riesco solo a rendere le
cartelle invisibili.
Questo il codice VB 6 :
'********************** Dichiarazioni per chiusura finestra
***************************
Private Declare Function PostMessage Lib "user32" Alias
"PostMessageA" (ByVal _
 hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
 IParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias
"FindWindowA" (ByVal _
 IpClassName As String, ByVal IpWindowName As String) As Long
Private Const WM_CLOSE = &H10
Private Sub ChiudiCartella_Click()
    'Chiudo la cartella Folitec e nascondo le cartelle al suo interno
    SetAttr "J:\Folitec\ASI DataMyte", vbHidden  'Vedo la
sottocartella
    SetAttr "J:\Folitec\ASI DataMyte - Errori", vbHidden 'Vedo la
sottocartella
    SetAttr "J:\Folitec\DB Da SQL Server", vbHidden 'Vedo la
sottocartella
    SetAttr "J:\Folitec\Foto DataMyte", vbHidden 'Vedo la
sottocartella
    'SetAttr "J:\Folitec\Note prod. NC", vbHidden 'Vedo la
sottocartella
    SetAttr "J:\Folitec\Report mese", vbHidden 'Vedo la sottocartella
    SetAttr "J:\Folitec\Situazione stampi", vbHidden 'Vedo la
sottocartella
    SetAttr "J:\Folitec\Utility", vbHidden 'Vedo la sottocartella
    'Cambio la sintassi della cartella in base al PC in uso
    Dim hWindow As Long
    Dim result As Long
    If NomePC.Text = "PORZIO2" Then
        hWindow = 0
        While hWindow = 0
            hWindow = FindWindow(vbNullString, "Folitec")
            DoEvents
            Wend
            result = PostMessage(hWindow, WM_CLOSE, 0&, 0&)
    ElseIf NomePC.Text = "ROVEGLIANOT" Then
        hWindow = 0
        While hWindow = 0
            hWindow = FindWindow(vbNullString, "Folitec")
            DoEvents
            Wend
            result = PostMessage(hWindow, WM_CLOSE, 0&, 0&)
    End If
Qualche idea?
Grazie
Marco
PS: As Any non è riconosciuto in VB2005, ho utilizzato As Object


Nessuno sa nulla su questo codice?
grazie

 cartelle invisibili.
cerchiamo, dove possibile, di usare solo managed code
per nascondere le cartelle:
Dim dir As New System.IO.DirectoryInfo("c:\yourfolder")
dir.Attributes = IO.FileAttributes.Hidden
per rendere vibili le cartelle nascoste:
Dim dir As New System.IO.DirectoryInfo("c:\yourfolder")
dir.Attributes = IO.FileAttributes.Normal
per recuperare il nome macchina:
Environment.MachineName
e lasciare solo due api per recuperare e chiudere la finestra
<DllImport("user32")> _
Private Function FindWindow(ByVal className As String, ByVal
windowName As String) As Int32
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As
UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean
End Function
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
Dim hWnd As Integer = FindWindow(vbNullString, "test - Blocco note")
SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0) '// solo se hWnd <> da
zero
Marcello Cantelmo
www.cantelmosoftware.com


Il resto (Visualizza, nascondi e nome macchina) li sistemo col tuo
codice più avanti, ora mi preme la chiusura della finestra :
1- dove incollo il codice ?
<DllImport("user32")> _
Private Function FindWindow(ByVal className As String, ByVal
windowName As String) As Int32
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
_
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As
UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Boolean
End Function
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060
in un modulo? Prima della Public class? ho fatto un po' di prove ma va
in errore...
grazie, scusa ma sono agli inizi con VB 2005!!
Marco

 Marco-
...e de che!  ;-)
Marcello Cantelmo
www.cantelmosoftware.com


Perfetto, funziona tutto...
grazie 1000 davvero!
solo un' ultima cosa, un consiglio :
secondo te per lavorare con questa app conviene mettere il progetto in
una cartella di rete e creare il link sui vari PC o è meglio lavorare
con la pubblicazione?
mi sa che pubblicare è più complesso e se non è settata correttamente
non funziona...

 non funziona...
quello che si faceva con vb6 non si può/deve più fare ;-)
ora non si deve più trascurare la *security*
la sicurezza -a tutti i livelli: esecuzione e/o protezione del codice,
ect.- deve nascere con il progetto!
alla partenza della tua applicazione entro subito in gioco la CAS
(
http://en.wikipedia.org/wiki/Code_Access_Security
) che verifica se si
hanno i permessi per fare una determinata cosa (accesso al disco,
ect.)...e se trascuri questo dettaglio...non puoi che avere solo
*crash*
considera pure che per il fw 2.0 c'è una restrizione di sicurezza che
impedisce l'esecuzione da una cartella condivisa. questa limitazione
---dopo molte lamentele--- è stata aggirata con il fw 3.5
io, comunque, opto per ClickOnce: 
http://msdn.microsoft.com/en-us/library/t71a733d(VS.80).aspx
Marcello Cantelmo
www.cantelmosoftware.com


Ok, cercerò di capirne di più su clickonce...
ora ho pubblicato in una cartella condivisa di un server ma non me la
lascia installare, va in errore...
Dice che mancano i file necessari per l' installazione!
faccio un po' di prove
grazie per il consiglio
Marco