X



HTAをもっと流行らせる計画 Part2
■ このスレッドは過去ログ倉庫に格納されています
0689デフォルトの名無しさん
垢版 |
2013/05/16(木) 19:35:41.52
UTF8で記述しているHTAアプリから、
ActiveXObject("ScriptControl")
でRubyを呼び出して、ウェブの取得をしています。
サイトはUTF8で記述されているのですが、
RubyからJavaScriptに文字列が渡ってきた時点で、何故か勝手にSJISに変換されてしまいます。
SJISに変換されると、UTF8にしかない文字が壊れてしまうので困っています
この勝手な処理をなくすためにはどうすればいいのでしょうか?
0691デフォルトの名無しさん
垢版 |
2013/05/16(木) 23:12:12.52
時間のかかる処理をしていると、「このスクリプトの実行に時間がかかっています」というような警告が出て、
処理が止まってしまいます。
これを防ぐにはどうすればいいのでしょうか?
0692デフォルトの名無しさん
垢版 |
2013/05/17(金) 12:53:56.23
スクリプトエラー警告の閾値以下の時間でひとつのルーチンを終了する。
処理を分割してイベントハンドラから細かく呼び出すようにするとか、
連続するステップをsetTimeoutメソッドをチェインさせて呼び出すとか、
継続条件が決まってるならインターバルタイマーで呼び出すとか。
0694デフォルトの名無しさん
垢版 |
2013/05/17(金) 18:01:44.14
Connector/ODBC 5.1.12のWindows (x86, 64-bit)をインストールし、
ODBCデータソースアドミニストレーターから、DSNを登録し、接続テストも成功しましたが、
HTAからは接続しようとすると、
指定されたDSNには、ドライバーとアプリケーションのアーキテクチャの不一致が含まれています
とエラーが出て接続できませんでした
32ビット版のConnector/ODBCを入れ直したところ、接続できました
なぜ64bitWindowsなのに32bit版でないといけないのでしょうか?
0695デフォルトの名無しさん
垢版 |
2013/05/17(金) 18:46:21.73
>>694
HTA で使われているのは 32bit 版の方の mshtml.dll (%WINDIR%\SYSTEM32にある方)だから。
スタートメニューには 32 bit 版と 64 ビット版の Internet Explorer が別々にあるけど、
mshta.exe が使うのはこのうち 32 ビットの方の IE の IE コンポーネントになるわけ。
0696デフォルトの名無しさん
垢版 |
2013/05/17(金) 18:59:47.49
そういう事情ですか
MySQLに限らず32ビット版のドライバでないと使えないということですね
ありがとうございました
0704デフォルトの名無しさん
垢版 |
2013/10/20(日) 16:54:57.59
>コマンドライン引数使えなくなったので困ってる

いったんバッチファイルでコマンドライン引数を受けて
外部ファイルに保存しておく
そのバッチの中でhtaを起動する
htaは一時ファイルを読み取って処理を続ける

これで何とかww
htaだと複数の引数があったときに自分で対応する必要があるけど
バッチファイルならシステムがやってくれるから
こっちのが楽な場合もあるかも
07061/2
垢版 |
2013/12/20(金) 10:26:56.21
すみませんが、質問です。
ログインの必要なサイトからファイルをダウンロードする方法について
教えていただけないでしょうか?

いま試みているのは、
1. 手でIEを起動し、当該サイトにログインする。
2. 別途HTAを起動し、その内部で
var objShell = new ActiveXObject("Shell.Application");
objShell.windows();
を利用し、ログイン済みのIEのオブジェクト var ie を取得。
3. HTA内で
// var xhr = new XMLHttpRequest();
var xhr = new ActiveXObject("Msxml2.XMLHTTP");
xhr.open("GET", url, false);
...
xhr.send();
07072/2
垢版 |
2013/12/20(金) 10:29:30.67
ところが、IEのログイン情報を、XHttpRequestオブジェクトに渡す方法が
見つからず困っています。上記の 3. ... の行で
・xhr.setRequestHeader("Cookie", ie.document.cookie);
・xhr.withCredentials = true; // new XMLHttpRequest()を用いる。
などとしましたが、いずれもXMLHttpRequestのセキュリティ制約のため
ログイン情報が引き継がれません。
HTAなら動くかと思っていたのですが、そうは行きませんでした。

XMLHttpRequestと違ってIEのcookieをセットすることのできる
ActiveXObjectがあれば良いと思うのですが。
以上です。よろしければアドバイスをお願いいたします。
0708706
垢版 |
2013/12/20(金) 14:28:33.10
自己解決。
>>685さんのご紹介なさった WinHTTPが、そのものズバリでした。
WinHTTP は XMLHttp とほぼ同じで、セキュリティ制約だけが違うものの
ように見えます。

//実際に動作したコード
var xhr = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
xhr.open("GET", url, false);
xhr.setRequestHeader("Cookie", ie.document.cookie);
xhr.send();

あとは new ActiveXObject("Adodb.Stream"); を使ってファイル保存できました。
ここの過去のやりとりを見て解決できました。ありがとうございました。
0709デフォルトの名無しさん
垢版 |
2013/12/25(水) 13:21:58.97
質問です。

HTAに限らない話ですが、
new ActiveXObject("InternetExplorer.Application");
で取得した IEの User-Agent文字列は、どうやって取得したら良いでしょう?
オブジェクトのプロパティに見つかりませんでした。

Inconsistent Results using InternetExplorer.Application - KiXtart.org - official site
http://www.kixtart.org/forums/ubbthreads.php?ubb=showflat&Number=206419
ググったら、UAを表示するページに遷移させて、DOMからUAを取得するという、
大変面倒なことをしている人がいました。
もうちょっと良い方法がありそうな気がします。
0711デフォルトの名無しさん
垢版 |
2013/12/26(木) 08:30:26.74
>>710
すみませんが、UA文字列を取得したい理由については、説明がしづらいです。

結局、ie.document.createElement(), appendChild()で、IEの表示中のページ
にscript要素などを動的に追加して、UAの取得をしました。

これも煩雑ですが、IEを「診断くん」などのページに遷移させて取得するより
はまだマシだと思います。
0712デフォルトの名無しさん
垢版 |
2013/12/26(木) 08:36:22.96
別の質問です。

HTAで呼び出したIEの、DocumentCompleteイベントを利用する方法についてです。

ブラウザのビジー状態を判定するための,より良い方法
http://d.hatena.ne.jp/language_and_engineering/20100410/p1

1. このやり方だと、IEのインスタンス化に、
WScript.CreateObject( "InternetExplorer.Application", "hoge_" )
が必要です。HTAでインスタンス化するにはどうしたら良いでしょう?

2. このやり方だと、イベントハンドラが固定です。ページ遷移をするごとに
別のイベントハンドラを動的に割り当てることはできないのでしょうか?
0715デフォルトの名無しさん
垢版 |
2013/12/26(木) 17:59:34.75
>1. このやり方だと、IEのインスタンス化に、
>WScript.CreateObject( "InternetExplorer.Application", "hoge_" )
>が必要です。HTAでインスタンス化するにはどうしたら良いでしょう?

htaでwscriptオブジェクト使う方法が、例のところにあったような。
0717デフォルトの名無しさん
垢版 |
2013/12/26(木) 19:02:34.67
>2. このやり方だと、イベントハンドラが固定です。ページ遷移をするごとに
>別のイベントハンドラを動的に割り当てることはできないのでしょうか?

代表で受け取って、
call hoge

ページ遷移のイベントで、
set hoge=getref("実際のハンドラ")
0718712
垢版 |
2013/12/27(金) 00:13:27.32
ご返事、遅くなりました。

>>713-714
すみません。「忍法帖」の書き込みエラーよけです。よく知らないですが。

>>715-716
ありがとうございます。見てみます。

>>717
ありがとうございます。
よろしかったら、JScriptでの書き方も教えていただけませんか?
0720デフォルトの名無しさん
垢版 |
2013/12/28(土) 00:40:28.09
>>719
ありがとうございました。

別件で忙しく、この件をまだ試せないでいます。
試したらまた改めてご返事させていただきます。
0724712
垢版 |
2014/01/10(金) 02:47:06.91
大変遅くなって申し訳ありません。
残念ながら、HTAでIEのイベントを取得できないでいます。

>>715-716 さんの方法で、HTAからWScriptオブジェクトを利用することができました。

また、>>719さんの記法はよく分からなかったのですが、WSHの場合、
hoge_DocumentComplete = function() { .... }
と記述することで、イベントハンドラを動的に変更できました。

しかし、それを HTAの<script>要素に記述しても、イベントハンドラが割り当てられ
ませんでした。

どうしたら良いか、アドバイスをいただけたらありがたいです。
0725712
垢版 |
2014/01/10(金) 15:06:30.31
質問を再定義すると「HTAで、スクリプト内で生成されたActiveXオブジェクトの
イベントを取得できるか」になるでしょう。>>618さんの質問と同じです。
こちらに回答がないので、不可能なのかもしれません。

関連する質問です。HTA内でIEを生成(new ActiveXObject)、終了(ie.quit())を
繰り返していると
「このシステムでは、これ以上のスレッドを作成できません。」
というエラーが発生してしまいます。
これを避けるにはどうしたら良いでしょう?
quitイベントを取得するまで待つのが良いかと考えています。
0726デフォルトの名無しさん
垢版 |
2014/01/10(金) 15:52:33.52
ieのeventは特殊で一般論は通用しない

new ActiveXObject以外の方法、wscript.shell runなどでieを起こせばいい

shell.application windowsでieを捕捉すればいい
0727712
垢版 |
2014/01/10(金) 17:16:24.95
>>726 ありがとうございます。WScript.ShellからIEの起動と、
Shell.Application windows によるIEのインスタンス取得はできました。
これのDocumentCompleteイベントを取得するにはどうしたら良いのでしょうか?
知識不足で申し訳ありません。

なお、IEのインスタンスの取得ですが、このスクリプトを動かす環境が多様で、
他にIEが起動している場合が多いし、起動直後のIEのホームページも一定では
ありません。起動したIEをどうやって見分けるかについても悩んでおります。
0728712
垢版 |
2014/01/11(土) 13:08:38.76
何度もすみません、HTA内で動的に生成したActiveXオブジェクトのイベントの
取得法を説明するページを、お教えいただけないでしょうか?

Scripting Clinic: イベントのスクリプティング
http://msdn.microsoft.com/ja-jp/library/ms974564.aspx
ここだと、
・ブラウザの要素のイベント
・<object>要素で指定したActiveXObject
のイベントの記述しかありませんでした。

WSHだとイベント取得はできるので、最悪、ロジックを全部WSHに書いて、HTAから
それをキックするしかないのかもしれません。
0730712
垢版 |
2014/01/11(土) 20:57:59.68
>>729
ご返事ありがとうございます。

結局、HTAでは、動的に生成したActiveXオブジェクトのイベントの
取得はできない、ということですか…。

>ieのeventは特殊で一般論は通用しない
これは「IEのActiveXObjectが特殊」という文意ではなくて、
IEはスクリプトホストとして特殊で、だからイベント操作には
HTAではなく、他のホスト(WSH, PowerShell, .NETなど)を
使ったほうが良い、という文意だったのでしょうか?

HTAでメインロジックをすでに書いてしまったので、正直頭を
抱えています。
>>348さんなどの、HTAをWSFに埋め込む方法も検討してみます。
0732712
垢版 |
2014/01/12(日) 10:07:12.67
WSF埋め込みのHTAを書いてみました。

HTAとWSHが一つのファイルにまとまるのは大変ありがたいのですが、
機能的には別ファイルにあるのと変わりがないようです。

変数や関数の共有はできないし、WSHからHTAにデータを渡すのは
HTA起動時に標準入出力を経由したり、外部ファイルをポーリングで監視する
などしかないようで、私のような初心者にはなかなか厳しいですね…。
0733デフォルトの名無しさん
垢版 |
2014/01/15(水) 02:39:42.98
IEが簡単に素人にしかも簡易なスクリプト程度で制御できちゃったら
今頃ウィルスやらなにやら大問題になってると思わないか?
とにかくローカルからはおいそれと手出しできないように
進化してきてるからある程度で諦めるのが吉
IEの操作はユーザーに任せるべきってMS自体が言ってんだし
しかも環境バラバラで特定できないんだろ?そんなん普通に難しいぞ
まずはそっちをどうにかしてもらった方が早い
0734712 忍法帖【Lv=2,xxxP】(1+0:5)
垢版 |
2014/01/16(木) 01:35:49.38
アドバイスありがとうございます。
>>732を書いたあと、規制等でここに書けないでおりました。

>>731
webbrowser control とは、普通の "InternetExplorer.Application" の
ことでしょうか?今はそれを使っています。visible = true にしないほうが
安定して動くようです。
0735712 忍法帖【Lv=2,xxxP】(2+0:5)
垢版 |
2014/01/16(木) 01:42:36.98
>>733
おっしゃるとおり、安定して稼働する環境の条件を見つけ出して、
それ以外はサポート対象外にさせてもらえないか、交渉する方向で
行こうと思います。

今までここに書いた以外にも、IEの不安定さを痛感することが
いくつも起こり、苦戦しております。

IEを細かくコントロールするには、C#で書くべきだったかもしれないし、
そもそもIEを千ページ以上にわたって自動制御する事自体、無理な課題
だったかもしれません。
0738デフォルトの名無しさん
垢版 |
2014/01/19(日) 05:23:06.35
まあ、やらないで無理っていうのはなかなか顧客には納得してもらえないだろうから
その為の期間だったと思えば・・・つかC#使えるのかよ迷わずそっちだろっていう
それ以上はリッチクライアントとか考慮するしか無いんじゃない
0740デフォルトの名無しさん
垢版 |
2014/05/20(火) 00:01:37.94ID:bwvL81ad
>>739
> 結論から言えば、対価を得られるような代物は作れない。

HTAで対価を得ようとか思う奴がいるのか?
0741デフォルトの名無しさん
垢版 |
2014/05/20(火) 20:14:59.88ID:qmBR4auP
リンクをユーザーの標準のブラウザで開かせるにはどうしたらいいのでしょうか
0745デフォルトの名無しさん
垢版 |
2014/05/21(水) 09:19:04.48ID:pNDMw+QG
>>740
> 詳しいことはkia HTA:APPLICATIONタグとかで。

とか書いておきつつ

> テキスト選択ができる
> マウスのドラッグでアプリケーション上のテキスト選択ができる。(選択範囲が反転する)
> ブラウザ上と同じ動きをするので、テキストだけではなく、ボタンとか画像とか全部反転
> 表示される。ひどい。

ってwww
0749デフォルトの名無しさん
垢版 |
2014/06/02(月) 00:12:50.77ID:E3BEJVo9
イケイケ時代ならいざ知らずMSの宣言は逆説
SilverlightでリッチUX!、チーン
PowerShellでUnixShell超え!、チーン
JScript改めJavaScriptでアプリ!←今ここ
0753デフォルトの名無しさん
垢版 |
2014/06/05(木) 08:22:13.99ID:JxeISGSi
>>751
実際の所リスナの追加やら何やらをページ側のスクリプト無しでタイミングも気にしないで
実行できるのは非常に便利。
・・・世の中にIE以外のブラウザが無けりゃ。
0755デフォルトの名無しさん
垢版 |
2014/06/16(月) 11:49:03.97ID:TgcVEHkU
>>754
このコード今のIEだと動かないし、互換モード指定して動かしたとしても「スクリプトがタブを閉じようとしてる」って
警告が出るんだけどほんとに何したいんだか。
普通のユーザーがIEで訪問したページにこれが仕込まれてても、なんかバグってるとしか思われないと思うんだが…。
0756デフォルトの名無しさん
垢版 |
2014/06/23(月) 00:40:27.56ID:1MZYUWya
firefoxとかClome板htaって出ないかな
0758デフォルトの名無しさん
垢版 |
2014/06/26(木) 21:22:15.25ID:56wR5ryD
とりあえずローカルファイルと階層が簡単に弄れればokなんだが
0760デフォルトの名無しさん
垢版 |
2014/07/05(土) 13:41:53.29ID:AlsL4J+L
>>759
いや、自己満足ローカルツールがHTML+Javascriptで簡単に作れる機能が
あればいいなーと思っただけ。
XULもFile APIも俺みたいな底辺には手軽でないし、記述方式も優しくないからな
0761デフォルトの名無しさん
垢版 |
2014/07/05(土) 20:45:49.65ID:EL6gVfGT
html5のFile APIで今後どうなるかってところだろうな
でも*nix系やmacではそういう需要ない気がする
0762デフォルトの名無しさん
垢版 |
2014/07/06(日) 15:17:01.13ID:4j5XaxT1
Windowsストアアプリが窓化できるようになって
簡単にサイドローディングできるようになればいいんだよ
0764デフォルトの名無しさん
垢版 |
2014/10/04(土) 08:01:51.43ID:r3/HxU2u
WInsows10でストアアプリが全画面でなくデスクトップに表示にできるようになりましたってアピールが苦笑せざるをえない

WinJSとSegoeSymbolのアプリアイコンをWin7とIE9のHTAで使えるようにしろ
0767デフォルトの名無しさん
垢版 |
2014/10/29(水) 23:05:42.85ID:+FmHsxMh
ユーザーにVSをインストールしてもらって自分でビルドしてもらえばいいんだよw
0769デフォルトの名無しさん
垢版 |
2014/11/16(日) 09:06:27.71ID:yzwLS/JR
>>768
window.open メソッドのバグか。
リンク先に回避方法も書かれてるけど、そもそもhtaでiframeってそんなに使うかな?
0770デフォルトの名無しさん
垢版 |
2014/11/17(月) 23:55:24.90ID:MIxGkQpt
Win10 Build9879のIEの新機能をHTAで使う方法が分からない…
まだ試験的実装だから仕方ないか
0771デフォルトの名無しさん
垢版 |
2014/12/06(土) 01:29:26.86ID:zfdgj8Pu
以下のようなツールを過去に作ったって人いたら下さい!

・Dドライブ内をcmdのdir /s や dir /s /bで検索する
・条件は単一でいいですし and や or で複数
・結果の文字列はハイパーリンク
・dir /s /b の場合はフォルダ毎に開閉できるHTMLタグ
・ウィンドウサイズの変更に、HTA上のオブジェクトの位置がバランスよく追従

ないですかね?
0772デフォルトの名無しさん
垢版 |
2014/12/06(土) 01:42:21.35ID:zfdgj8Pu
ハイパーリンクじゃなくて、ラジオで選択してフォルダを開く、またはファイルを開くボタンでもいいです!
0776デフォルトの名無しさん
垢版 |
2014/12/06(土) 22:08:12.90ID:kbxsIH5l
>>775
EXE化出来るんだから標準搭載がどうとか関係無いだろw
0779デフォルトの名無しさん
垢版 |
2014/12/06(土) 22:57:02.28ID:zfdgj8Pu
作った人いないのですか?しょぼん
0781デフォルトの名無しさん
垢版 |
2014/12/08(月) 22:41:56.36ID:bVi9rgke
それはつまり、dirじゃないけど似たのは作ったということです?下さい!
dirが最速だと思ってるだけで他のでも全然まったくもって下さい!
もしかしたら日付や時刻まで条件に指定できたりしますか?スゴい!
0784デフォルトの名無しさん
垢版 |
2014/12/22(月) 08:25:25.06ID:7LUwf6eu
HTA では VBScript より Jscript の方がけた違いに速いってさ

VBScriptについて必死に話し合うスレ [転載禁止](c)2ch.net
ttp://peace.2ch.net/test/read.cgi/tech/1416826139/178
> ### WScript/CScript
> VBScript 14秒
> JScript 25秒   ←遅すぎ
>
> ### HTA(mshta)
> VBScript 14秒
> JScript 0.9秒   ←速すぎw
>
> ### Google Chrome
> JavaScript 0.3秒
0785デフォルトの名無しさん
垢版 |
2014/12/22(月) 08:48:03.57ID:8L7faHaX
>>784
それ、ベンチマークのやり方が不適切なので参考程度で見て
JavaScriptの最適化が進んでいて速いのは確かなんだが
0786デフォルトの名無しさん
垢版 |
2014/12/22(月) 21:10:21.29ID:MSM2wBGo
>>784
空ループの時間を計るとか、何の意味もないし参考にならないな。
コード書いた人は脳味噌が80年代のBASICで止まってるんじゃなかろうか。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況