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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1287閲覧

jsスクリプトの動作が不安定です[再掲]

erlk356

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/06/15 11:04

編集2020/06/16 11:35

前提・実現したいこと

恐れながらプログラミング未経験者です。
下記URLを参考にWindowsのサウンドの録音タブにある、ライン入力を一旦無効にして、再度有効にするスクリプトを自作しました。
(規定デバイス変更時、この処理をしないとライン入力の音声が正しいスピーカーから出力されないためです。)
うまく動くこともあれば、添付の画像の画面で止まってしまう(正常に終了しない)こともあります。
よければ改善法をお教えいただけないでしょうか?

参考サイトURL
https://nyanshiba.hatenablog.com/entry/2017/08/21/221555
http://chryfopp.hatenablog.com/entry/2013/03/27/123749

発生している問題・エラーメッセージ

添付した画像の画面(録音タブではなく、再生タブ)で止まってしまい、正常稼働しないことがあります。 正常に稼働する場合はライン入力が有効から→無効→有効と切り替わり、画像のウィンドウで止まらずに消えます。

該当のソースコード

var wait = function(title){ do { WScript.Sleep(100); } while(!WshShell.AppActivate(title)); }; var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.Run("control mmsys.cpl"); wait("サウンド") WshShell.SendKeys("^{PGDN}");//CTRL+PageDNで録音タブに// WshShell.SendKeys("{DOWN 3}");//↓3回でラインインを選択(※環境によって異なる)// WshShell.SendKeys("+{F10}");//Shift+F10でコンテキストメニュー表示// WshShell.SendKeys("{DOWN}");//↓で無効化選択// WshShell.SendKeys("~");//Enterで無効化// WshShell.SendKeys("{DOWN 3}");//↓3回でラインインを選択(※環境によって異なる)// WshShell.SendKeys("+{F10}");//Shift+F10でコンテキストメニュー表示// WshShell.SendKeys("{DOWN}");//↓で有効化選択// WshShell.SendKeys("~");//Enterで有効化// WshShell.SendKeys("~");//Enterで確定、閉じる//

試したこと

一度正常に動くとその後も連続で正常に動く事が多いです。
再起動直後でも、動いたり、動かなかったりします。
録音タブではなく、再生タブで止まってるので、
最初のCtrl+PageDNの命令が届いてないのかもしれません。
(でもそのやり方もよく分かってませんので、よければご教授いただきたいです)

完全なるプログラミング未経験のですが、自分で調べれる範疇ではお手上げ状態です。
どうかよろしくお願い致します。

6/16追記
最初の新規設定している関数の待ち時間を伸ばせば解決するかと思い、
3行目のsleep(100)を様々な数字に置き換えてみましたが症状は変わりませんでした。
数字を1000以上にするとそもそも動かなくなるようですね。
また、添付画像の様にScroll lockキーが押された表示が、スクリプトの正常動作、失敗に関わらずでてきます。
勿論、命令にはスクロールロックキーを入力する命令を入れてないため、原因は不明です。

もしかしてカテゴリ違いですか?
ファイルの種類にjavascriptと書いてあったのでここに質問をしたのですが・・・

イメージ説明
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

カテゴリについて

この件は「JScript」についてで、Javaでもjavascriptでもありません。似てるけどなんで違うかはリンク先を見ていただければ。

本題

SendKeyはいわゆるキーボードからのキー入力をエミュレーションしますが、人間が入力する適切な速さを自動的に再現してくれるわけではありません。
例えば{DOWN 3}という矢印下キー3回押下が出てきますが、人間がタン、タン、タンと入力する速さではなく0.001秒で一瞬に3回叩かれると思ってください。そのような速度では入力を受け取るウィンドウ側もキー入力を全て受け取れないことがあります。つまりスクリプトでのキー操作が速すぎるのです。
本件のように人間のキー入力を再現するのであれば、キー入力とキー入力の間にしかるべき待ち時間を入れればよいです。冒頭にもあるWScript.Sleepです。
PCの状況によりけりで100%確実とはいきませんが、だいたいキー入力の間が300ミリ秒もあればほとんどの状況で大丈夫でしょう。

jscrpit

1wait("サウンド") 2WScript.Sleep(300); 3WshShell.SendKeys("^{PGDN}");//CTRL+PageDNで録音タブに// 4WScript.Sleep(300); 5// DOWNは1回ずつ分解する 6WshShell.SendKeys("{DOWN}");//↓3回でラインインを選択(※環境によって異なる)// 7WScript.Sleep(300); 8WshShell.SendKeys("{DOWN}");//↓3回でラインインを選択(※環境によって異なる)// 9WScript.Sleep(300); 10WshShell.SendKeys("{DOWN}");//↓3回でラインインを選択(※環境によって異なる)// 11WScript.Sleep(300); 12WshShell.SendKeys("+{F10}");//Shift+F10でコンテキストメニュー表示// 13WScript.Sleep(300); 14//以下略

投稿2020/06/16 13:10

hope_mucci

総合スコア4447

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

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

erlk356

2020/06/16 14:11

やはり別のカテゴリだったのですね。 それでもわざわざご回答頂き、ありがとうございました。 Sleepの数字を弄っていくうちに無事、安定するようになりました。 とても助かりました!重ねて御礼申し上げます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問