Newsgroup: it.comp.lang.visual-basic
Titolo: hProcess restituito da ShellExecuteEx sempre a 0

Buongiorno,
ho il problema che hProcess restituito da ShellExecuteEx è sempre 0
mentre io vorrei mi restituisse l'ID del processo per poterlo gestire 
ad esempio attraverso AppActivate , sapete dirmi dove sbaglio???
Grazie
Ho creato un form standard con un pulsante ed al click ho associato 
il seguente codice
//////////////////////////////////////////////////////////////////
        Dim ret As Integer
        ret = Naviga(txtFileName.Text, Me.Handle.ToInt32)
        AppActivate(ret)
//////////////////////////////////////////////////////////////////
IN un modulo ho inserito il seguente codice
//////////////////////////////////////////////////////////////////
Option Strict Off
Option Explicit On
Module modPropertiesDlg
    ' API type declaration.
	Private Structure SHELLEXECUTEINFO
		Dim cbSize As Integer
		Dim fMask As Integer
		Dim hWnd As Integer
		Dim lpVerb As String
		Dim lpFile As String
		Dim lpParameters As String
		Dim lpDirectory As String
		Dim nShow As Integer
		Dim hInstApp As Integer
		Dim lpIDList As Integer
		Dim lpClass As String
		Dim hkeyClass As Integer
		Dim dwHotKey As Integer
		Dim hIcon As Integer
		Dim hProcess As Integer
	End Structure
 
	' API constants declaration.
	Private Const SEE_MASK_INVOKEIDLIST As Short = &HCs
	Private Const SEE_MASK_NOCLOSEPROCESS As Short = &H40s
	Private Const SEE_MASK_FLAG_NO_UI As Short = &H400s
 
	' API function declaration.
	Private Declare Function ShellExecuteEx Lib "shell32.dll" (ByRef SEI
As SHELLEXECUTEINFO) As Integer
 
    Public Function Naviga(ByVal FileName As String, ByVal OwnerhWnd
As Integer) As Integer
        Dim SEI As SHELLEXECUTEINFO
        ' Fill in the SHELLEXECUTEINFO structure.
        With SEI
            .cbSize = Len(SEI)
            .fMask = SEE_MASK_NOCLOSEPROCESS
            .hWnd = OwnerhWnd
            .lpVerb = "open"
            .lpFile =
"
http://care.ised.it/CARE_WebAdmin/FrontEnd?r=/_index.jsp
"
            .lpParameters = vbNullChar
            .lpDirectory = vbNullChar
            .nShow = 2 'SW_SHOWMINIMIZED
            .hInstApp = 0
            .lpIDList = 0
            .hProcess = -1
        End With
        ' Call the API function.
        If (ShellExecuteEx(SEI) = 0) Then
            ' Error, return 0 as instance handle.
            Naviga = 0
        Else
            ' Return the instance handle as result.
            Naviga = SEI.hProcess
        End If
    End Function
End Module
/////////////////////////////////////////////////////////////////

             .lpDirectory = vbNullChar
perche' non sono certo  che il NULL concepito dalle API corrisponda a
vbNullChar.
A volte ho dovuto fare cose strane per passare un NULL.
Tipo dichiare come ANY la variabile e poi passare una schifezza tipo "byval
0&" come valore.
Poi mi sorprende l'utilizzo dell'handle della finestra "owner" come integer.
Non sono sempre dei long gli handle delle finestre?
ciao
Paolo B.

 Grazie
Visto che utilizzi .NET (e sarebbe meglio specificarlo nel subject
utilizzando il tag [.NET], perché potrebbe non essere chiaro a tutti),
la cosa migliore è utilizzare le classi fornite dalla libreria, invece
di utilizzare le funzioni dell'API di Windows come in VB6.
Cerca le classi Process e ProcessStartInfo del namespace
System.Diagnostics.
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.