先に質問点を書きます。
1.Windowsでは、他の実行中のWindow(プログラム)にメッセージを送信して制御できるようですが、コマンドプロンプト画面にも送信できますか。
2.そういうツールご存じないですか。
3.Visual C のサンプルプログラムご存じないですか。
(何もないと私には無理です。あっても無理かも・・・。)
長くなりますが、背景説明をします。
実行ファイル名は、用途が分かりやすいよう仮名にしてお訪ねします。
パソコンにUSB接続して使用するオシロスコープ装置を購入しました。
その添付ソフトのサンプルプログラムを改造して、MyPsCON.exeというWin32プログラムを作りました。
コマンドプロンプト画面で、このMyPsCON.exeを起動すると、信号入力がある度に電圧変化を読み取って、data.txtというファイルを書き出します。
作業を終了するときは、キーボードから「X」と1文字入力すると、装置がUSBセッション(?)をクローズして、パソコンのコマンドプロンプト画面が閉じます。
私は、上記MyPsCON.exeを、Windows版の自作プログラムMyPsWin.exeから起動(shell起動というんですか)しています。
次にやりたいことは、MyPsWin.exeからMyPsCON.exeに対して、任意の時点で「X」と文字入力してそのMyPsCON.exeを終了させたいのです。
MyPsCON.exeをバッチファイルで起動~終了まで一括動作させられますが、起動時には何回読取動作させるか分からないのでダメです。
そんな訳で、冒頭の質問になります。
winbatchという市販有料ソフトが目的に合いそうですが、これだけに使うには勿体ないです。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
既存のプログラムを取り込むのがめんどくせー。
ってのは判らんでもないですけどね……。>SendMessageAPI関数は、コマンドプロンプトウィンドウで実行中のMyPsCON.exeに適用できるんでしょうか。
実行しているアプリに対しては適用できませんが、そのコマンド プロンプトのウィンドウへの適用は可能でしょう。
プログラムを実行しているコマンド プロンプトのウィンドウを検索するのが少々手間かも知れませんけど。
とりあえず、普通に起動しただけのコマンド プロンプトに対して、下記の処理で「a」が入力されたのは確認しました。
# Windows7 64BitにVC++2010Expressにて
HWND hConsoleWnd = NULL;
hConsoleWnd = FindWindowEx(NULL, NULL, TEXT("ConsoleWindowClass"), TEXT("管理者: コマンド プロンプト"));
if(hConsoleWnd) {
SendMessage(hConsoleWnd, WM_CHAR, (WPARAM)'a', (LPARAM)0);
}
FindWindowEx()の第4引数が問題になる…かも知れませんな。
# 複数起動していたらどうなる?とか、FindWindowEx()からSendMessage()までの間にウィンドウ閉じられたら(普通は無理ですが)どうする?とか……。
ちなみに、第4引数の文字列はSpy++にて該当ウィンドウのプロパティから取得。
見た目だけだと半角スペースの数とか合わないかも知れないから。
MyPsWin.exeを作った開発ソフトは、VCやVBでなく、xBASE言語のARAGOってやつで、API関数を使うには、当方また別の苦労があります。
でも、実現の可能性があるということが分かれば、充分です。
プロンプト画面での動作確認、ありがとうございました。
当方VC++2010もインストールしてます。実用したことないんですが・・・。
実は背景説明不足で、当方の使い方や操作状況が伝わっていませんでした。
オペレーターの操作を含めたフローチャートでも提示すればよく分かってもらえたと思います。
また、最初から、SendMessageというトピックにしてたら、話が早かったですね。
いい教訓になりました。
次回はもっと上手に質問しますので・・・・。
No.2
- 回答日時:
>私は、上記MyPsCON.exeを、Windows版の自作プログラムMyPsWin.exeから起動(shell起動というんですか)しています。
どのように起動させています?
CreatePress()APIを使用している場合ならば、標準入力のハンドルを作成して使用することで、
親プロセスから子プロセスへの標準入力を操作することが可能です。
# 標準出力や標準エラー出力も用意すればコマンドプロンプトの画面を出さない。というのも可能かと思われます。
「CreateProcess パイプ」辺りで検索して下さい。
以前の質問の内容でDLL化していた場合は、そういう処理できませんのでご注意を。
http://oshiete.goo.ne.jp/qa/9001216.html
この方法(main()をDLLMain()に変更)だと、LoadLibrary()から処理戻ってこないでしょうしね。
私なら…元々の環境で用意されているライブラリ使って、自前でデータの取得などを行うようにしますが…。
ってまさに#1さんが回答されている通りの方向ですな。
# 環境もないし試す気はないのがアレですけどね。
# 試す為に使う予定のないオシロを買う気も無いですし。
# (まぁ、手元にあれば使うコトもあるかも知れませんけどね……。電気畑ではなくソフト畑なので微妙すぎですけど)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- Windows 10 exeファイルが起動しない 4 2022/06/05 16:13
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- その他(プログラミング・Web制作) プログラム初心者です Pythonでタイピング練習サイトに 自動で入力するものをつくったのですが こ 2 2022/07/09 23:09
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- デスクトップパソコン windows7を使っているパソコンでの質問です。先日動作が遅く再起動かけると「windowsを起動 9 2022/06/16 21:31
- その他(プログラミング・Web制作) Windows上のプログラム。「予め決められた時刻に自分で起動して処理して自分で終了する」って可能? 3 2023/01/04 14:29
- その他(パソコン・周辺機器) 呪われた様な.......様々な不具合について 2 2022/08/26 15:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
ExcelVBAにてアプリをタスクマ...
-
ASPからのEXEファイル起動
-
バッチファイル、順番を指定し...
-
VB.NETでDOSコマンドの複数実行
-
keytool.exeを起動するには
-
バッチファイルからftpを実行時...
-
プログラムを実行すると、なぜ...
-
Rubyスクリプトから他のプログ...
-
batからvbs起動
-
c#でコマンドプロンプトを実行...
-
VBAでwindowsメールを起動させたい
-
VBAからキャッシュを削除する方...
-
batファイルで立ち上げたaplを...
-
ショートカットの作成とコピー
-
EXCELをバッチコマンドで...
-
cygwin上でのTeraPadの起動
-
ドライバーのインストーラーを...
-
exe間での引き値の受け取り方法
-
バッチファイルでAPを終了さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 特定ウインドウ...
-
stable diffusionのインストー...
-
ExcelVBAにてアプリをタスクマ...
-
EXCELをバッチコマンドで...
-
ショートカットの作成とコピー
-
バッチファイル実行時に起動す...
-
VB.NETでDOSコマンドの複数実行
-
プログラムを実行すると、なぜ...
-
exe間での引き値の受け取り方法
-
64bitのwindowsサーバーで32bit...
-
batファイルで立ち上げたaplを...
-
c#でコマンドプロンプトを実行...
-
UWSCについて
-
Shiftキーを押しながら起動
-
gccがコマンドプロンプト上で使...
-
C#でMediaPlayerを立ち上げた後
-
VB.NETでコマンドプロンプトの操作
-
指定したアプリケーションをモ...
-
バッチファイルでAPを終了さ...
-
相対パスのショートカットフォ...
おすすめ情報
早々のレスありがとうございます。
MyPsCON.exeはPCとUSBのセッション中なので、そのセッションを別のプログラムがクローズできないです。
仮に可能だとしても、そういう難しいプログラムは私には作れないです。
補足追加です。
>MyPsCON.exeはPCとUSBのセッション中
というのは、MyPsCON.exeの中のC言語の1つの関数を実行中という意味です。
>CreatePress()APIをいる場合ならば、
"shell起動"という表現が間違いのようです。
MyPsCON.exeは、独立したコマンドプロンプトウィンドウの中で実行しています。
手動でコマンドプロンプトウィンドウを開いてMyPsCON.exeを起動したのと同じ状態です。
MyPsWin.exeと、MyPsCON.exeとは、両方起動した状態で、交互処理が必要なんです。
(最初はdll方式で交互に動作させるつもりでしたが、やめました。)
"パイプ"処理たど、exeの実行開始から終了時点まで連続してコントロールしなくちゃいけないのではありませんか。
手動の場合は、
MyPsCON.exeを実行中のコマンドプロンプトウィンドウをマウスでクリックして、[X]キーを押しますが、その操作だけ、MyPsWin.exeを終了する前に1回実行させたいのです。
また追記です。
先の質問[1.]に相当する事例がありました。
他アプリへの文字入力1
http://mt-soft.sakura.ne.jp/web_dl/vb-parts/key_ …
SendMessageAPI関数は、コマンドプロンプトウィンドウで実行中のMyPsCON.exeに適用できるんでしょうか。
これがダメなら、あきらめます。