

はじめまして！

今VisualBasic勉強中で悪戦苦闘しています。  
タイトルの通りVB.NETでVBアプリケーション自身から起動した他アプリケーション（例：コマンドプロンプト）を操作（コマンド送信→結果取得）をしようとしています。

[code]

        AppActivate(プロセスID)
        SendKeys.SendWait("dir\{Enter}")
    
[/code]

、、みたいな感じで操作が可能なのですが出来ればウィンドウ自体を表示したくありません。

上記の方法だとウィンドウがどうしてもアクティブになってしまいます。

結果の取得も最初はコマンドプロンプト画面のコピーを取ってVBアプリがクリップボードの内容を参照するみたいな事を考えていたのですが同様の事情で私の望む動きにならないと思っています。

どなたかお助け頂けますでしょうか？

よろしくお願いします！


CC BY-SA 3.0
2015-08-27T02:58:04.427
14887
2015-10-17T02:51:10.127
11083
question
vb.net
VisualBasic.NETで他アプリケーションを操作する方法


既に起動しているプログラム（この場合はコマンドプロンプト）を操作しないとダメですか？  
自分でコマンドプロンプトを起動して希望する動作をさせる、ほうが圧倒的に簡単ですよ。  
<http://dobon.net/vb/dotnet/process/processwindowstyle.html>  
<http://dobon.net/vb/dotnet/process/standardoutput.html>


CC BY-SA 3.0
2015-08-27T03:58:05.530
14888
2015-08-27T03:58:05.530
8589
14887
answer


例えば、こんな感じ

[code]

    Imports System
    Imports System.IO
    Imports System.Diagnostics
    
    Module Sample
        Sub Main()
            Dim myProcess As Process = new Process()
    
            myProcess.StartInfo.CreateNoWindow = true 'ウィンドウを作らない
            myProcess.StartInfo.FileName = "cmd.exe"
            myProcess.StartInfo.UseShellExecute = false
            myProcess.StartInfo.RedirectStandardInput = true
            myProcess.StartInfo.RedirectStandardOutput = true
    
            myProcess.Start()
            Dim sr As StreamReader = myProcess.StandardOutput
            Dim myStreamWriter As StreamWriter = myProcess.StandardInput
    
            myStreamWriter.WriteLine("dir") 'コマンドを標準入力として書き込み
            myStreamWriter.Close()
            Dim returnvalue as String = sr.ReadToEnd() '標準出力を文字列で読込
    
            myProcess.WaitForExit()
            myProcess.Close()
            '動作チェックでファイルへ書き込む
            Dim file As StreamWriter = new StreamWriter(".\\out.txt") '結果をファイルとして書き込み
            file.WriteLine(returnvalue)
            file.Close()
        End Sub
    End Module
    
[/code]


CC BY-SA 3.0
2015-08-27T04:10:57.667
14889
2015-08-27T13:14:23.680
2015-08-27T13:14:23.680
5044
5044
14887
answer


コンソールウィンドウを非表示にして、なおかつ標準入出力のリダイレクトも行わないとなると、SendKeysは使えませんね。

SendKeysはアクティブウィンドウに対して操作するAPIですので、ウィンドウを非表示にしているアクティブではないウィンドウには使えません。SendMessage
APIを使用してコントロールすることになるかと思います。

ウィンドウの非表示については、[コマンドプロンプト（cmd.exe）のフォーム埋め込み](https://ja.stackoverflow.com/questions/12614/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88-cmd-
exe-%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF)にある方法でWindowハンドルを取得後、ShowWindow
APIで非表示にできるはずです。


CC BY-SA 3.0
2015-10-17T02:51:10.127
17739
2015-10-17T02:51:10.127
2017-04-13T12:52:38.920
-1
12774
14887
answer