2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« ウィンドウアプリから非表示のコンソールウィンドウを開く。 | トップページ | ウィンドウアプリから非表示のコンソールウィンドウを開く。(その3) »

2008年9月15日 (月)

ウィンドウアプリから非表示のコンソールウィンドウを開く。(その2)

CreateNoWindowで非表示のコンソールウィンドウを開いて、それをAttachConsole()するサンプル。

vbc /t:winexe sample2.vb

Imports System.Diagnostics
Imports System.Threading

Public Class Class1

Private Declare Function AttachConsole Lib "kernel32" (dwProcessId As Integer) As Integer

Public Shared Sub Main()
Dim oProcess As New Process()
oProcess.StartInfo.FileName = "cmd"
oProcess.StartInfo.UseShellExecute = False
oProcess.StartInfo.CreateNoWindow = True
oProcess.StartInfo.RedirectStandardInput = True
oProcess.StartInfo.RedirectStandardOutput = True
oProcess.Start()
oProcess.StandardOutput.ReadLine()
AttachConsole(oProcess.Id)
oProcess.StandardInput.Close()
oProcess.WaitForExit()
MsgBox(CreateObject("WScript.Shell").Exec("fc.exe").StdErr.ReadAll())
End Sub
End Class

CreateNoWindowで作った非表示のコンソールウィンドウはShowWindow()で再表示できないようです。

コンソールアプリでは、WaitForInputIdle()が使えません。
なので、代わりに、StandardOutput.ReadLine()で待ちます。

CMD.EXEを終了するために、StandardInput.Close()します。

« ウィンドウアプリから非表示のコンソールウィンドウを開く。 | トップページ | ウィンドウアプリから非表示のコンソールウィンドウを開く。(その3) »