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

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

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

ActiveXは、Microsoft社が開発したプログラミング技術群の総称。特定の技術ではなく、さまざまな技術を指しますが、一般的にActiveXといった場合は「ActiveXコントロール」を指します。

JavaScript

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

3029閲覧

javascriptでActiveXObjectを使用し、SendKeysとsleepを交互に行いたい

nemui_00

総合スコア5

ActiveX

ActiveXは、Microsoft社が開発したプログラミング技術群の総称。特定の技術ではなく、さまざまな技術を指しますが、一般的にActiveXといった場合は「ActiveXコントロール」を指します。

JavaScript

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2019/10/15 08:47

編集2019/10/16 00:23

前提・実現したいこと

Webアプリから、クラサバのソフトウェアへデータ入力を行う処理を実装したい。

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

javascriptでActiveXObjectを使用し、SendKeysとsleepを交互に行う処理を作成していますが、
SendKeys後、sleepが行われず、sleep後にまとめてSendKeysが実行されているような動きになってしまいます。
どうしたらよいのでしょうか?

該当のソースコード

以下のhtmlファイルをIEで開き、データ入力画面というファイル名のテキストファイルをメモ帳で開いた状態で、ブラウザのbuttonを押すと、事象を確認できます。
また、button2はRunで新規に開いたやり方です。これだとうまくいくようです。

html

1<!DOCTYPE html> 2 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 6 <title></title> 7 <script type="text/javascript"> 8 function inputData(arg1) { 9 var obj = new ActiveXObject("WScript.Shell"); 10 obj.AppActivate("データ入力画面"); 11 sleep(1000); 12 //キー・コードを送る。 13 obj.SendKeys(arg1); 14 sleep(2000); 15 obj.SendKeys("{ENTER}"); 16 sleep(900); 17 obj.SendKeys("{F5}"); 18 sleep(2000); 19 obj.SendKeys("{ENTER}"); 20 obj = null; 21 } 22 function inputData2(arg1) { 23 var obj = new ActiveXObject("WScript.Shell"); 24 obj.Run("notepad"); 25 sleep(1000); 26 //キー・コードを送る。 27 obj.SendKeys(arg1); 28 sleep(2000); 29 obj.SendKeys("{ENTER}"); 30 sleep(900); 31 obj.SendKeys("{F5}"); 32 sleep(2000); 33 obj.SendKeys("{ENTER}"); 34 obj = null; 35 } 36 function sleep(waitMsec) { 37 var startMsec = new Date(); 38 // 指定ミリ秒間だけループさせる 39 while (new Date() - startMsec < waitMsec); 40 } 41 </script> 42</head> 43<body> 44 <form id="form1"> 45 <div> 46 <button type="submit" onclick="inputData('12345');">button</button> 47 <button type="submit" onclick="inputData2('12345');">button2</button> 48 </div> 49 </form> 50</body> 51</html>

試したこと

AppActivateでなくRunで新規に画面を起動した場合(button2のやり方)、うまくいくようです。

補足情報(FW/ツールのバージョンなど)

IE11
ASP.NET WebForm
.NET Framework 4.0

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

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

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

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

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

Zuishin

2019/10/16 00:33

ActiveX は終わっているということを承知の上で作っていますか? 回答を作ってる間にその結末で自己解決するんじゃないかと思われているかもしれません。 少し調べてみてその結末に納得して自己解決されるのがいいかもしれません。
nemui_00

2019/10/16 00:40

ご回答ありがとうございます。 ActiveXはあまり使いたくなかったのですが、社内で作ったクラサバのソフトウェアへの入力方法がこれしかないため、仕方なくこういったやり方でやっています。 もう少し考えてみようと思います。。
Zuishin

2019/10/16 00:43

このソースと目的を見る限りそんなこと無さそうですが。
guest

回答1

0

自己解決

以下のようにsetIntervalを使用するよう変更したところうまくいきました。

html

1var array = new Array('12345', '{ENTER}', '{F5}', '{ENTER}'); 2var cnt = 0; 3var hoge = setInterval(function() { 4 var obj = new ActiveXObject("WScript.Shell"); 5 obj.AppActivate("データ入力画面"); 6 sleep(1000); 7 obj.SendKeys(array[cnt]); 8 obj = null; 9 cnt++; 10 //終了条件 11 if (cnt >= array.length) { 12 clearInterval(hoge); 13 } 14}, 1000); 15function sleep(waitMsec) { 16 var startMsec = new Date(); 17 // 指定ミリ秒間だけループさせる 18 while (new Date() - startMsec < waitMsec); 19}

投稿2019/10/16 05:30

編集2019/10/16 06:33
nemui_00

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問