Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1

    Usare Shell per gestire una sola finestra di programma

    Premessa: uso Visual Basic Express 2013

    Sintetizzando, con questo banale codice...

    NomeFile = " C:\MioDocumento.rtf"

    Shell ("C:\wordpad.exe" & NomeFile , AppWinStyle.NormalNoFocus)


    ...apro in WordPad il file MioDocumento.RTF. Se, però, in seguito voglio esaminare anche il file AltroDocumento.RTF, con questa sintassi viene aperta una nuova sessione di WordPad e alla fine rischio di affollare troppo lo schermo. L'alternativa è quella di chiudere tutte le finestre di WordPad non più necessarie, ma è ovvio che è scomodo.

    Domanda:

    Come fare per aprire vari file RTF, in successione, su un'unica sessione di WordPad?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    237
    Quote Originariamente inviata da GrandeTimoniere Visualizza il messaggio
    Premessa: uso Visual Basic Express 2013

    Sintetizzando, con questo banale codice...

    NomeFile = " C:\MioDocumento.rtf"

    Shell ("C:\wordpad.exe" & NomeFile , AppWinStyle.NormalNoFocus)


    ...apro in WordPad il file MioDocumento.RTF. Se, però, in seguito voglio esaminare anche il file AltroDocumento.RTF, con questa sintassi viene aperta una nuova sessione di WordPad e alla fine rischio di affollare troppo lo schermo. L'alternativa è quella di chiudere tutte le finestre di WordPad non più necessarie, ma è ovvio che è scomodo.

    Domanda:

    Come fare per aprire vari file RTF, in successione, su un'unica sessione di WordPad?
    Ma non potrebbe essere che basta chiudere il process aperto (wordpad) prima di richiamarne l'apertura di un'altro?

  3. #3
    Quote Originariamente inviata da renygade Visualizza il messaggio
    Ma non potrebbe essere che basta chiudere il process aperto (wordpad) prima di richiamarne l'apertura di un'altro?
    Ma è proprio la domanda che ho fatto: come si fa - da Visual Basic - a chiudere un processo aperto, in precedenza, con Shell?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Quote Originariamente inviata da GrandeTimoniere Visualizza il messaggio
    Ma è proprio la domanda che ho fatto: come si fa - da Visual Basic - a chiudere un processo aperto, in precedenza, con Shell?
    Il fatto è che non devi usare la Shell ma la classe Process con tutte le sue caratteristiche.

    http://msdn.microsoft.com/it-it/libr...v=vs.110).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Il fatto è che non devi usare la Shell ma la classe Process con tutte le sue caratteristiche.

    http://msdn.microsoft.com/it-it/libr...v=vs.110).aspx
    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!

  6. #6
    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

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non puoi usare un'interfaccia grafica con delle richtextbox?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Non puoi usare un'interfaccia grafica con delle richtextbox?
    Oservazione corretta, ma la risposta è negativa per due motivi:

    1) Come ho detto nel post, il problema è solo una sintesi delle difficoltà che ho incontrato. In realtà il programma che sto sviluppando evidenzia un ListBox in cui sono presenti i link di file di ogni tipo (RTF, JPG, XLS, WAV, eccetera). L'utente, cliccando uno dei nomi di file, dovrebbe avere la possibilità di aprire quel file con un programma da lui indicato (non necessariamente quello predefinito dal sistema). Per esempio, potrebbe voler aprire i file DOC con Word, ma i file RTF con Notepad; i file JPG non con PhotoShop, ma con Paint (eccetera).

    2) Ho già provato: può sembrare strano, ma usando un RichTextBox - e aprendo al suo interno un file RTF - il file viene aperto come se, invece di un RichTextBox, avessi a disposizione un semplice TextBox. Tanto per intederci, al suo interno compaiono i vari codici di formattazione, tipici di RTF. Esempio:

    {\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1040{\fonttbl{\f0\from an\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
    {\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f6\fmodern\fcharset 0\fprq1{\*\panose 00000000000000000000}Courier;}{\f14\fnil\fcharset2 \fprq2{\*\panose 05000000000000000000}Wingdings;}}{\colortbl;\red0\ green0\blue0

    ...eccetera.

    Il fatto strano è che facendo copia da un file RTF (da Word o da Notepad) e incolla (sul RichTextBox), il testo incollato mantiene tutte le caratteristiche (font, colore, attributi) e non so spiegarmene il motivo.

    Rimane il fatto che, anche se riuscissi a risolvere il problema del RichTextBox, rimarrebbe comunque aperto per gli altri programmi.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.