Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da GrandeTimoniere Visualizza il messaggio
    Ti ringrazio! Mi sei stato di grande aiuto. Ma ho ancora un piccolo problema.
    Anzitutto:

    1) Ho creato un Form contenente un TextBox (che contiene il path del programma WordPad.EXE) e un Button. Il codice è banale e funziona perfettamente:

    ----------------------------------
    Imports System
    Imports System.Diagnostics
    Imports System.ComponentModel


    Public Class Form1
    Public Aperto As Boolean
    Public X As Process


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Programma As New Process()
    If Aperto = True Then
    X.Kill()
    End If
    Programma.StartInfo.UseShellExecute = False
    Programma.StartInfo.FileName = TextBox1.Text
    Programma.StartInfo.CreateNoWindow = False
    Programma.Start()
    X = Programma
    Aperto = True
    End Sub


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Aperto = False
    End Sub


    End Class

    --------------------------
    Grazie a If ... End If Ogni volta che premo Button1 viene chiusa la sessione (eventualmente già aperta) di WordPad e ne viene creata una nuova (poco male: avrei preferito aprire un file all'interno di quella già aperta, ma mi accontento...).

    2) Il fatto è che se l'utente, dopo aver aperto WordPad premendo Button1, chiude la finestra di WordPad e poi preme Button1, il programma si interrompe perché, giustamente, non "vede" più il processo WordPad da "Killare".
    Bisognerebbe inserire del codice come questo:

    If finestra WordPad = aperta Then X.Kill Else Continua così.

    Un suggerimento? Grazie in anticipo!
    LA classe process ha la proprietà HasExited che dovrebbe fare al caso tuo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da renygade Visualizza il messaggio
    LA classe process ha la proprietà HasExited che dovrebbe fare al caso tuo
    Infatti potresti scrivere semplicemente

    codice:
        Dim programma As Process = Nothing
    
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If programma Is Nothing Then
                programma = New Process()
            Else
                If Not programma.HasExited Then
                    programma.Kill()
                End If
            End If
    
    
            programma.StartInfo.UseShellExecute = False
            programma.StartInfo.FileName =  TextBox1.Text
            programma.StartInfo.CreateNoWindow = False
            programma.Start()
        End Sub
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Infatti potresti scrivere semplicemente
    ...oops! Mi hai risposto mentre scrivevo il post. Comunque grazie!

    PS: ovviamente il tuo codice è più efficiente!

  4. #4
    Quote Originariamente inviata da renygade Visualizza il messaggio
    LA classe process ha la proprietà HasExited che dovrebbe fare al caso tuo
    Grazie anche a te, era proprio quello che mi serviva!
    Ora WordPad (se aperto) viene chiuso e subito dopo se ne apre una nuova sessione.
    A chi può interessare, ecco la modifica da apportare alla sub del post precedente:

    ----------------------------------------

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Programma As New Process()

    If Aperto = True Then
    If X.HasExited = False Then
    X.Kill() : Aperto = False
    End If
    End If

    If Aperto = False Then
    Programma.StartInfo.UseShellExecute = False
    Programma.StartInfo.FileName = TextBox1.Text REM & " " & TextBox2.Text REM IMPOSSIBILE TROVARE IL FILE SPECIFICATO
    Programma.StartInfo.CreateNoWindow = False
    Programma.Start()
    X = Programma
    Aperto = True
    End If

    End Sub
    --------------------------------------

    Tuttavia c'è da dire che WordPad è un programma leggerissimo e il tempo necessario a chiudere e riaprire una sua sessione è praticamente inavvertibile. Ma se, invece di WordPad, voglio aprire programmi più corposi (come PhotoShop), il tempo di apertura / chiusura potrebbe risultare eccessivo. C'è un modo per "costringere" Visual Basic a usare sempre la stessa sessione del programma con cui aprire i vari file di competenza?

    Tra l'altro (si noti la parte del codice compresa tra i due REM) VisualBasic segnala l'inesistenza del file se tento di aprire WordPad facendo seguire il Path del file di testo RTF (ovviamente presente in TextBox2.Text). Con quale sintassi è possibile aprire un file "associato" a Programma.StartInfo.FileName ? Ho provato facendo precedere il nome del Path del file RTF da un semplice spazio (come nel codice riportato qui sopra, togliendo il REM ) da una virgola, da una barra dritta o inversa, ma il file sembra sempre non esistere (non ho commesso errore di digitazione: ho trascritto con copia/incolla).

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.