53 messaggi dal 27 novembre 2001
mrdev ha scritto:
Ciao.

Fermo restando quanto scritto negli altri post puoi provare nel seguente modo. Prima di tutto ti suggerisco di utilizzare il tool Spy++ disponibile tra i tools di Visual Studio. Con questo tool puoi analizzare e monitorare in dettaglio ogni singola finestra del sistema compresi i messaggi ad essa indirizzati. Applicandolo al tuo caso, quindi, monitorando la finestra di errore dovresti individuare le diverse componenti tra le quali immagino ci sia un controllo sotto forma di sub-window che contiene il messaggio che a te interessa.

Ottentuo l'handle di quella specifica finestra, ti sarà sufficiente richiamare l'API GetWindowText (http://www.pinvoke.net/default.aspx/user32/GetWindowText.html) per leggerne il contenuto (oppure SendMessage con WM_GETTEXT).

Ciao.

ciao,
seguendo il tuo consiglio ho individuato la finesta di errore e la sono riuscita a chiudere col sendkeys. quello che non sono riuscito a fare è appunto individuare il "controllo sotto forma di subwindow": dallo spy++ ho individuato la classe ma mi serve anche il nome della finestra che nel caso appunto della subwindow in questione non riesco ad intercettare...
In alternativa pensavo: ma se io con un mio processo della classe System.Diagnostics.Process mi attacco al processo che sto monitorando, a prescindere dal fatto che chiuda o meno la finestra, posso mediante appunto il processo attaccato reindirizzare lo standard error sullo stream del processo? perche ho provato a farlo ma mi dice che siccome il processo che gira è stato lanciato dall'esterno (cioè dall'utente a mano con un doppio click di mouse) non è possibile reindirizzare le informazioni dell'errore sullo stream di standarderror. questo è il mio codice:

Dim Stringa As String = New String(Chr(0), 10000)
GetWindowText(GetForegroundWindow, Stringa, 10000)
Stringa = Stringa.Substring(0, InStr(Stringa, Chr(0)) - 1)
Dim intHandle As Integer = FindWindow("WindowsForms10.Window.8.app3", Stringa)
Dim proc() As Process = Process.GetProcessesByName("NomeProcesso")
proc(0).StartInfo.UseShellExecute = False
proc(0).StartInfo.RedirectStandardError = True
proc(0).StartInfo.RedirectStandardInput = True
proc(0).StartInfo.RedirectStandardOutput = True
proc(0).EnableRaisingEvents = True
If intHandle <> 0 Then
SendKeys.SendWait("{TAB}")
SendKeys.SendWait("{TAB}")
SendKeys.SendWait("{ENTER}")
If proc(0).HasExited = True Then
If proc(0).ExitCode <> 0 Then
Dim stdErr As StreamReader = proc(0).StandardError
MessageBox.Show(stdErr.ReadToEnd)
Else
Dim stdErr As StreamReader = proc(0).StandardOutput
MessageBox.Show(stdErr.ReadToEnd)
End If
End If
End If

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.