質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

6049閲覧

VB.NETで自分で立ち上げたcmd.exeにクリップボード経由でコマンドを送信したい。

Yo-Ko.Fujiwara

総合スコア2

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2020/07/01 11:01

編集2020/07/02 01:08

表題の件に付きましてご存じの方居られましたらご助力を頂けますでしょうか?

###やりたい事
Windowsフォームアプリケーションからcmd.exeを起動してdosコマンドを実行し、実行結果をwindowsフォームアプリケーションに返したい。
但しcmd.exeその物は隠しておきたい(非表示で実行したい)のでフォーカスが対象に当たる事が前提のsendkeysは使わない。

取り合えずコマンド自体が送信出来るか試す為に以下のコードを作成しましたが目的のcmd.exeにコマンドがペースト出来ません。

VB.NET

1Imports System.Runtime.InteropServices 2Public Class Form1 3 4 Public mwh As IntPtr 5 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 6 Dim p As Process = New Process() 7 p.StartInfo.FileName = "cmd.exe" 8 p.Start() 9 10 11 While p.MainWindowHandle = IntPtr.Zero AndAlso p.HasExited = False 12 System.Threading.Thread.Sleep(1) 13 p.Refresh() 14 End While 15 16 Dim hMainWindow As IntPtr = p.MainWindowHandle 17 Me.mwh = hMainWindow 18 19 Clipboard.SetText("dir") 20 End Sub 21 22 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 23 Native.SendMessage(mwh, Native.WM_PASTE, 0, 0) 24 25 End Sub 26 27 28 <DllImport("user32.dll", CharSet:=System.Runtime.InteropServices.CharSet.Auto)> 29 Public Shared Function SendMessage( 30 ByVal hWnd As IntPtr, 31 ByVal Msg As Integer, 32 ByVal wParam As Integer, 33 ByVal lParam As Integer) As Integer 34 End Function 35 36 Public Const WM_PASTE As Integer = &H302 37 38End Class

フォーム上に貼り付けたボタン1をクリックすればcmd.exeにdirコマンドが入力される事を期待していますが思うように動作しません。

環境はwindows10 .netframework 4.6 になります。

よろしくお願いします。


早速の回答ありがとうございます。
皆様の回答の方法を試してみてフォードバックをしたいと思います。
取り急ぎ御礼まで

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

y_waiwaiさんの回答の参考先にもありますが、
クリップボードの内容を標準入力から流し込んで、標準出力を取得すればよろしいかと思います。

投稿2020/07/02 00:47

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

クリップボードにコマンドをコピーしてからcmd.exeを実行しても良い(処理終了の都度cmd.exeは終了)のであれば、以下の方法はどうでしょうか。
・Processで起動するcmd.exeのコマンドライン引数にクリップボードの内容(Clipboard.GetText)を入れる。
・複数のコマンドがクリップボードに含まれる場合は、バッチファイルにその内容を保存し、Processでそのバッチファイルを起動する。

投稿2020/07/02 00:36

編集2020/07/02 00:44
kenshirou

総合スコア772

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2020/07/01 12:04

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問