knuefi
Goto Top

Ein VBScript in Visual Studio 2013 als Windows Forms Anwendung anwenden

Hallo zusammen,

ich würde gerne folgendes VBScript mit einer Windows Forms Anwendung anwenden, leider funktioniert es nicht (16 Fehler). Das Script habe ich in den Button eingefügt, was mache ich da falsch?. Als normales Script läuft es. Muss ich das Script umschreiben?
Const strPath = "C:\Users\Max\Desktop\Test1"  
Const strPath2 = "C:\Users\Max\Desktop\Test2"  
Const intInterval = "2"  
strDrive = Split(strPath,"\")(0)  
strFolder = Replace(Split(strPath,":")(1),"\","\\") & "\\"  
strDrive2 = Split(strPath2,"\")(0)  
strFolder2 = Replace(Split(strPath2,":")(1),"\","\\") & "\\"  
Set fso = WScript.CreateObject("Scripting.Filesystemobject")  
Set objShell = CreateObject("Wscript.Shell")  
Set objWMIService = GetObject( "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2" )  
strQuery = "Select * From __InstanceOperationEvent" _  
    & " Within " & intInterval _  
    & " Where Targetinstance Isa 'CIM_DataFile'" _  
    & " And ((TargetInstance.Drive='" & strDrive & "'"_  
    & " And TargetInstance.Path='" & strFolder & "') or "_  
    & "(TargetInstance.Drive='" & strDrive2 & "'"_  
    & " And TargetInstance.Path='" & strFolder2 & "'))"  
Set colEvents = objWMIService.ExecNotificationQuery (strQuery) 
Do 
    Set objEvent = colEvents.NextEvent()
    Set objTargetInst = objEvent.TargetInstance
    Select Case objEvent.Path_.Class 
        Case "__InstanceCreationEvent"  
            objShell.Run """F:\Programe\\Droi\Droi.exe"""  
    End Select 
Loop

Content-ID: 305684

Url: https://administrator.de/contentid/305684

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

colinardo
Lösung colinardo 29.05.2016 aktualisiert um 17:06:37 Uhr
Goto Top
Hallo Knueffi,
ein set gibt es in VB.Net nicht für das Zuordnen von Objekten zu einer Variablen, etc. pp. ein einfaches übernehmen ist also in den seltensten Fällen möglich face-wink und meist auch sehr ineffizient da einem in VB.NET durch das NET-Framework so viel mehr Funktionalität zur Verfügung steht.

Außerdem hast du mit VB.Net einfachere Möglichkeiten als den WMI-Notification Filter, namentlich den Filesystemwatcher der das selbe macht, das sähe dann z.B. so aus um zwei Ordner auf neue Dateien zu überwachen:
Public Class Form1
    ' Filesystemwatcher initialisieren  
    WithEvents watcher1 As New System.IO.FileSystemWatcher("C:\Users\Max\Desktop\Test1", "*")  
    WithEvents watcher2 As New System.IO.FileSystemWatcher("C:\Users\Max\Desktop\Test2", "*")  

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ' Filesystemwatcher aktivieren (Überwachung starten)  
        watcher1.EnableRaisingEvents = True
        watcher2.EnableRaisingEvents = True
    End Sub

    ' Event wenn in Ordner 1 eine Datei erstellt wird  
    Private Sub watcher1_Created(sender As Object, e As System.IO.FileSystemEventArgs) Handles watcher1.Created
        RunApplication()
    End Sub

    ' Event wenn in Ordner 2 eine Datei erstellt wird  
    Private Sub watcher2_Created(sender As Object, e As System.IO.FileSystemEventArgs) Handles watcher2.Created
        RunApplication()
    End Sub

    ' Sub die deine Anwendung startet  
    Private Sub RunApplication()
        Process.Start("F:\Programe\Droi\Droi.exe")  
    End Sub

    ' Wenn Form geschlossen wird , beende die Überwachung der Ordner sauber  
    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        watcher1.EnableRaisingEvents = False
        watcher2.EnableRaisingEvents = False
    End Sub
End Class
Sorry aber du solltest dich dann vielleicht doch erst mal in die grundlegenden Unterschiede beider Programmiersprachen einlesen, damit du auch was lernst.

Grüße Uwe
Knuefi
Knuefi 29.05.2016 um 22:07:19 Uhr
Goto Top
Hallo Uwe,
danke für deine schnelle Hilfe. Das habe ich mir einfacher vorgestellt face-sad, auf die schnelle werde ich es nicht schaffen das geplantes Projekt umzusetzen.
Gruß und Danke noch mal.