vb.net

2009-08-21 10 views
0

で終了イベントを使用して[OK]を、私は基本的にあなたがそこにファイルをドラッグすることができ、非常に基本的なvb.netのリサイズアプリを作ってるんだ、それはその後、ファイルを処理するバッチファイルを使用しています。vb.net

それは非常にシンプルだし、すべてがこれまでに計画しようとしている、それはそれらを処理するバッチファイルを使用して、バッチファイルは、それがすることになっているものを行い、右のファイルを受け入れます。

唯一の問題は、私は、プロセスが完了したときに/バッチファイルプロセスによって提起されなければならない可能Exitedイベントにフックする方法がわからないということです...

私はのDOSウィンドウをしたいですそれが実行されている間に隠されたままにするバッチファイルので、私は、適切な時点でプロセスを開始するためにSystem.Diagnostics.Process.Start(myBatch)を使用し、その後、ProcessWindowStyle.MinimisedにプロセスのWindowStyleプロパティを設定し、バッチファイルを指定するためにProcessStartInfoを使用しています。

これは、私が欲しいものを作品とし、罰金です。ただし、プロセスがいつ終了するかを知る唯一の方法は、Exitedイベントを使用することです。しかし、Exitedイベントは、ではなく、ProcessStartInfoでのみ動作します。私は代わりにProcessを使用するように切り替えることができましたが、私は(AFAIK)DOSウィンドウを最小化して実行できませんでした...

方法はありますか?私は数日だけ.netを書いています。これは私がバッチファイルを実行している方法です:

Dim myBatch As New ProcessStartInfo("C:\\batchFiles\\test.bat") 

myBatch.WindowStyle = ProcessWindowStyle.Minimized 
system.Diagnostics.Process.Start(myBatch) 

アイデアはありますか?

おかげ

答えて

2

プロセスオブジェクトを作成し、StartInfoプロパティを設定してみてください。その後、イベントを待つ代わりにWaitForExitを呼び出すことができます。 EG:documentationから

using(var process = new Process 
            { 
             StartInfo = 
              new ProcessStartInfo("Foo.exe") 
              {WindowStyle = ProcessWindowStyle.Minimized} 
            }) 
      { 
       process.Start(); 
       process.WaitForExit(); 
      } 
+0

おかげではありません:D は私がに最後に次のコードを使用 proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden proc.StartInfo.CreateNoWindow = Trueの :新しいプロセス proc.StartInfo.FileName = "\\ mybat.bat C" のよう 薄暗いPROCを:それは私がやりたいことを得ますproc.Start() proc.WaitForExit() proc.Close() – danwellman

0

VBでの構文のわからないが、私はあなたが実際にマネージコードとWINのAPIをインラインで使用されなければならない、と何あなたがプロセスオブジェクトのMainWindowHandleを使用できることはほぼ確信しています。

[DllImport("User32")] 
     private static extern int ShowWindow(int hwnd, int nCmdShow); 

このコマンドでは、このメソッドのwinip apiライブラリへの参照をお勧めします。しかし、あなたがしたいことは、私はinteropで非常に実現可能だと思います。

アンドリュー

+0

を私はVBにこれを翻訳するのに十分な知っているが、答えてくれてありがとう:) – danwellman

0

:このイベントはEnableRaisingEventsプロパティの値が場合にのみ発生する可能性があります。

したがって、次の作業をする必要があります:

Dim procStart As New ProcessStartInfo 
Dim WithEvents proc As New Process 

Private Sub Button21_Click(sender As System.Object, e As System.EventArgs) Handles Button21.Click 
     procStart.FileName = "C:\PTL\Bin\xxxxxx.exe" 
     proc.StartInfo = procStart 
     proc.EnableRaisingEvents = True 
     proc.Start() 
End Sub 

Private Sub proc_Exited(sender As Object, e As System.EventArgs) Handles proc.Exited 
    Debug.WriteLine("Process Ended " + proc.ExitCode.ToString + " " + DateTime.Now.ToString) 
End Sub