前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー