Hilfe bei meinem ersten Projekt

Lesterdor

Erfahrenes Mitglied
Hallo liebe Community,

[1.] Vorwort:
Wie ihr sicherlich sehen könnt, bin ich neu hier im Forum. Dies trifft ebenfalls auf meine Kenntnisse in Visual Basic 2008 zu. Am Wochende habe ich angefangen mich mit Visual Basic 2008 Express Edition auseinander zu setzen. Es ist meine erste Programmiersprache, ich bin also völlig neu auf dem Gebiet der Programmierung. Ich habe mich durch die VB 2008 Hilfe gelesen und einige Erfahrungen sammeln können. Nun möchte ich mich näher mit den vielen verschiedenen Funktionen vertraut machen. Ganz nach dem Motto: "Learning by doing". Soweit zum Vorwort, nun schildere ich einmal mein "Projekt" und die Fragen / Probleme, die ich momentan habe.

[2.] "Mein erstes Projekt":
Ich habe mir gedacht, ich schreibe für den Anfang ein Programm, mit dem ich oder der Anwender eine *.exe Datei auswählen kann und das Programm diese startet und via Button beendet. Im Vorfeld habe ich es per Shell-Funktion schon hinbekommen. Nur habe ich da immer selbst den Pfad angegeben und über Taskkill beendet. Jetzt soll es allgemeiner werden.

[3.] Fragen und Probleme:
Ich habe für mein Programm eine Form sowie einen Button, über den ich eine *.exe aus einem beliebigen Verzeichnis auswählen kann. Der Code hierfür sieht wie folgt aus:
Visual Basic:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ofd As New OpenFileDialog
        ofd.InitialDirectory = "C:\"
        ofd.Filter = "exe (*.exe)|*.exe"
        ofd.Title = "Wählen Sie eine EXE zum Beenden aus"
        If ofd.ShowDialog() = _
              Windows.Forms.DialogResult.OK Then
            MsgBox("Es wird geöffnet: " & ofd.FileName)
        Else
            MsgBox("Abbruch")
        End If
Den Code habe ich im Internet über google gefunden und funktioniert auch.
Ich frage mich jetzt allerdings, wie es weiter geht. Ist mit der Auswahl einer *.exe meine Variable "ofd" als die vom Benutzer ausgewählte *.exe definiert ?
Nach der Auswahl einer *.exe soll mein Programm die ausgewählte Anwendung auch ohne jegliche anderen Dialoge oder so ausführen (starten), wie lautet der Code für mein Vorhaben ?

Soweit dazu. Über einen zweiten Button, soll das Programm die *:exe beenden, ebenfalls brauche ich den Code dafür, da ich leider gar nicht weiß, wie es weitergeht.

[4.] Meine Gedankengänge:
Natürlich sollte der Programmierer schon im Voraus Überlegungen tätigen, wie das Programm einmal laufen soll. Ich habe mir folgendes gedacht:
*Programmaufbau: Eine Form mit 2 Button (*.Exe-Auswahl, *.Exe-Beenden)
*OpenfileDialog: Der Dialog lässt eben nur Daten mit der Endung *.exe zu
*Sobald die Variable definiert ist, also das Programm weiß, welche Anwendung geöffnet werden soll, es auch zu tun.

Dies sind so meine Gedanken gewesen. Falls ich irgendwo zu allgemein gedacht habe oder eine falsche Ansicht aufgrund meines geringen Know-Hows habe, bitte ich euch mir andere Wege über die Planung eines Programms zu offenbaren.

[5.] Schlusswort:
Ich hoffe, mir wird jemand von euch helfen mein kleines Programm zu vollenden. Ich habe schon hier einige Threads gelesen, finde sie aber etwas unverständlich an manchen Stellen, wenn Beispielcodes gepostet worden sind. Falls noch etwas fehlt, einfach mitteilen und ich editiere es hier hinein. In diesem Sinne, vielen vielen Dank im Voraus.

Mit freundlichen Grüßen

Euer Lesterdor :)
 
Hi!
Wow, langer text.

Guck mal ob das deinen wünschen entspricht.
Code:
    Dim anwendung As New System.Diagnostics.Process()
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ofd As New OpenFileDialog
        ofd.InitialDirectory = "C:\"
        ofd.Filter = "exe (*.exe)|*.exe"
        ofd.Title = "Wählen Sie eine EXE zum Beenden aus"

        If ofd.ShowDialog() = _
Windows.Forms.DialogResult.OK Then

            MsgBox("Es wird geöffnet: " & ofd.FileName)

        Else

            MsgBox("Abbruch")

        End If
        anwendung.StartInfo.FileName = ofd.FileName
        anwendung.Start()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        anwendung.Kill()
    End Sub

Vielleicht hilft dir das. So würde ich es machen :)

PS: Bin selber nocht nicht so erfahren in VB.NET.

Peter86
 
Hallo Peter86,
vielen vielen Dank, es funktioniert genauso, wie ich es haben möchte. Besten Dank für deine schnelle Antwort und Hilfe. :)

An der Stelle ergibt sich mir noch eine Frage, ist es möglich das Programm eine Textdatei erstellen zu lassen, wo genau protokolliert wird, welche Anwendung um welche Zeit geöffnet wurde über mein Programm ?

Mit freundlichen Grüßen

Lesterdor :)
 
Hier, Bitteschön. Habs bisschen verfeinert, es wird als log gespeichert, wobei der name der Log das Datum ist an dem sie erstellt wurde. Kannst du natürlich ändern, wenn du willst.

Code:
        'ausserhalb der subs  setzen !
        Dim liste As String = ("")

        ' in dem Button wo du die file auswählst!
        If liste = ("") Then
            liste = liste & TimeOfDay & "  " & (ofd.FileName.ToString)
        Else
            liste = liste & ControlChars.CrLf & TimeOfDay & "  " & (ofd.FileName.ToString)
        End If



        ' das hier würde ich ins Form.Close event setzen
        Dim _date As String = Date.Today
        Using sw As StreamWriter = New StreamWriter(Application.StartupPath & "/" & _date.Replace(".", "_") & ".log")
            sw.Write(liste)
            sw.Close()
        End Using
 
Zuletzt bearbeitet:
Hi Peter86,
Danke für deine Bemühungen. Bei mir wird As StreamWriter, das "StreamWriter" unterstrichen mit der Meldung: "Fehler 1 Der Typ "StreamWriter" ist nicht definiert". Und wo genau speichert er die Log-Datei ?

Danke im Voraus
 
Zuletzt bearbeitet:
System.Io importieren
Code:
Imports System.IO


Ausserhalb der Subs. z.B. Ganz oben unter Class .....
Code:
Dim liste As String = ("")



In den Button womit du die Dartei startest
Code:
        If liste = ("") Then

            liste = liste & TimeOfDay & "  " & (ofd.FileName.ToString)

        Else

            liste = liste & ControlChars.CrLf & TimeOfDay & "  " & (ofd.FileName.ToString)

        End If

Das würde ich ins Event Form.Close setzen
Code:
        Dim _date As String = Date.Today
        Using sw As StreamWriter = New StreamWriter(Application.StartupPath & "/" & _date.Replace(".", "_") & ".log")
            sw.Write(liste)
            sw.Close()
        End Using



PS: Bewertung nicht vergessen ;)
 
Okay Danke, aber es kommt immer die Fehlermeldung:

"Fehler 1 Der Typ "StreamWriter" ist nicht definiert"

Kennst du für den Fehler die Lösung ?

Ach ja, wo wird eigentlich die Log-Datei hingespeichert ?
 
hast du die System.IO Importiert?!

Setz an den Anfang deines Projektes. Nach ganz oben vor Class!
Code:
Imports System.IO

z.B.
Code:
Imports System.IO
Public Class Form1


Die file wird in dem Ordner gespeichert wo das Programm gestartet wurde (Application.StartupPath).
 
Es ist vollbracht

Hey Peter86,

ich hab mein "Projekt" soweit fertig und es läuft alles nach meinen Wünschen. Vielen lieben Dank nocheinmal für deine tolle Unterstützung.

Selbstverständlich habe ich deine Bewertung nicht vergessen und auch schon getätigt.

Für heute reicht es ersteinmal, sind ja auch viele neue Erkenntnisse für mich.
 
Zurück