HTAをもっと流行らせる計画 Part2
■ このスレッドは過去ログ倉庫に格納されています
そんなサンプルあるだろ
ttp://www.vector.co.jp/vpack/browse/person/an010222.html <OBJECT id=WB classid=clsid:8856F961-340A-11D0-A96B-00C04FD705A2
WB.ExecWB UTF8で記述しているHTAアプリから、
ActiveXObject("ScriptControl")
でRubyを呼び出して、ウェブの取得をしています。
サイトはUTF8で記述されているのですが、
RubyからJavaScriptに文字列が渡ってきた時点で、何故か勝手にSJISに変換されてしまいます。
SJISに変換されると、UTF8にしかない文字が壊れてしまうので困っています
この勝手な処理をなくすためにはどうすればいいのでしょうか? XMLHttpRequestを使ったらJavaScriptだけで取得できるのか
何故かできないと思ってました 時間のかかる処理をしていると、「このスクリプトの実行に時間がかかっています」というような警告が出て、
処理が止まってしまいます。
これを防ぐにはどうすればいいのでしょうか? スクリプトエラー警告の閾値以下の時間でひとつのルーチンを終了する。
処理を分割してイベントハンドラから細かく呼び出すようにするとか、
連続するステップをsetTimeoutメソッドをチェインさせて呼び出すとか、
継続条件が決まってるならインターバルタイマーで呼び出すとか。 Connector/ODBC 5.1.12のWindows (x86, 64-bit)をインストールし、
ODBCデータソースアドミニストレーターから、DSNを登録し、接続テストも成功しましたが、
HTAからは接続しようとすると、
指定されたDSNには、ドライバーとアプリケーションのアーキテクチャの不一致が含まれています
とエラーが出て接続できませんでした
32ビット版のConnector/ODBCを入れ直したところ、接続できました
なぜ64bitWindowsなのに32bit版でないといけないのでしょうか? >>694
HTA で使われているのは 32bit 版の方の mshtml.dll (%WINDIR%\SYSTEM32にある方)だから。
スタートメニューには 32 bit 版と 64 ビット版の Internet Explorer が別々にあるけど、
mshta.exe が使うのはこのうち 32 ビットの方の IE の IE コンポーネントになるわけ。 そういう事情ですか
MySQLに限らず32ビット版のドライバでないと使えないということですね
ありがとうございました HTA(HTML Application)で WebGL を使う方法
ttp://javascript.g.hatena.ne.jp/cx20/20130627 htcもvmlもactivexもフィルタも何も使えなくなるからie10モードは選択肢にならん >コマンドライン引数使えなくなったので困ってる
いったんバッチファイルでコマンドライン引数を受けて
外部ファイルに保存しておく
そのバッチの中でhtaを起動する
htaは一時ファイルを読み取って処理を続ける
これで何とかww
htaだと複数の引数があったときに自分で対応する必要があるけど
バッチファイルならシステムがやってくれるから
こっちのが楽な場合もあるかも すみませんが、質問です。
ログインの必要なサイトからファイルをダウンロードする方法について
教えていただけないでしょうか?
いま試みているのは、
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(); ところが、IEのログイン情報を、XHttpRequestオブジェクトに渡す方法が
見つからず困っています。上記の 3. ... の行で
・xhr.setRequestHeader("Cookie", ie.document.cookie);
・xhr.withCredentials = true; // new XMLHttpRequest()を用いる。
などとしましたが、いずれもXMLHttpRequestのセキュリティ制約のため
ログイン情報が引き継がれません。
HTAなら動くかと思っていたのですが、そうは行きませんでした。
XMLHttpRequestと違ってIEのcookieをセットすることのできる
ActiveXObjectがあれば良いと思うのですが。
以上です。よろしければアドバイスをお願いいたします。 自己解決。
>>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"); を使ってファイル保存できました。
ここの過去のやりとりを見て解決できました。ありがとうございました。 質問です。
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を取得するという、
大変面倒なことをしている人がいました。
もうちょっと良い方法がありそうな気がします。 >>710
すみませんが、UA文字列を取得したい理由については、説明がしづらいです。
結局、ie.document.createElement(), appendChild()で、IEの表示中のページ
にscript要素などを動的に追加して、UAの取得をしました。
これも煩雑ですが、IEを「診断くん」などのページに遷移させて取得するより
はまだマシだと思います。 別の質問です。
HTAで呼び出したIEの、DocumentCompleteイベントを利用する方法についてです。
ブラウザのビジー状態を判定するための,より良い方法
http://d.hatena.ne.jp/language_and_engineering/20100410/p1
1. このやり方だと、IEのインスタンス化に、
WScript.CreateObject( "InternetExplorer.Application", "hoge_" )
が必要です。HTAでインスタンス化するにはどうしたら良いでしょう?
2. このやり方だと、イベントハンドラが固定です。ページ遷移をするごとに
別のイベントハンドラを動的に割り当てることはできないのでしょうか? > http://
何故、質問者がこういう嫌がらせするのか理解に苦しむ >1. このやり方だと、IEのインスタンス化に、
>WScript.CreateObject( "InternetExplorer.Application", "hoge_" )
>が必要です。HTAでインスタンス化するにはどうしたら良いでしょう?
htaでwscriptオブジェクト使う方法が、例のところにあったような。 WindowsアプリからWScript.exeのWScriptオブジェクトを利用する ...
だな >2. このやり方だと、イベントハンドラが固定です。ページ遷移をするごとに
>別のイベントハンドラを動的に割り当てることはできないのでしょうか?
代表で受け取って、
call hoge
ページ遷移のイベントで、
set hoge=getref("実際のハンドラ") ご返事、遅くなりました。
>>713-714
すみません。「忍法帖」の書き込みエラーよけです。よく知らないですが。
>>715-716
ありがとうございます。見てみます。
>>717
ありがとうございます。
よろしかったら、JScriptでの書き方も教えていただけませんか? 代表で受け取って、
hoge();
ページ遷移のイベントで、
var hoge=function(){...} >>719
ありがとうございました。
別件で忙しく、この件をまだ試せないでいます。
試したらまた改めてご返事させていただきます。 大変遅くなって申し訳ありません。
残念ながら、HTAでIEのイベントを取得できないでいます。
>>715-716 さんの方法で、HTAからWScriptオブジェクトを利用することができました。
また、>>719さんの記法はよく分からなかったのですが、WSHの場合、
hoge_DocumentComplete = function() { .... }
と記述することで、イベントハンドラを動的に変更できました。
しかし、それを HTAの<script>要素に記述しても、イベントハンドラが割り当てられ
ませんでした。
どうしたら良いか、アドバイスをいただけたらありがたいです。 質問を再定義すると「HTAで、スクリプト内で生成されたActiveXオブジェクトの
イベントを取得できるか」になるでしょう。>>618さんの質問と同じです。
こちらに回答がないので、不可能なのかもしれません。
関連する質問です。HTA内でIEを生成(new ActiveXObject)、終了(ie.quit())を
繰り返していると
「このシステムでは、これ以上のスレッドを作成できません。」
というエラーが発生してしまいます。
これを避けるにはどうしたら良いでしょう?
quitイベントを取得するまで待つのが良いかと考えています。 ieのeventは特殊で一般論は通用しない
new ActiveXObject以外の方法、wscript.shell runなどでieを起こせばいい
shell.application windowsでieを捕捉すればいい >>726 ありがとうございます。WScript.ShellからIEの起動と、
Shell.Application windows によるIEのインスタンス取得はできました。
これのDocumentCompleteイベントを取得するにはどうしたら良いのでしょうか?
知識不足で申し訳ありません。
なお、IEのインスタンスの取得ですが、このスクリプトを動かす環境が多様で、
他にIEが起動している場合が多いし、起動直後のIEのホームページも一定では
ありません。起動したIEをどうやって見分けるかについても悩んでおります。 何度もすみません、HTA内で動的に生成したActiveXオブジェクトのイベントの
取得法を説明するページを、お教えいただけないでしょうか?
Scripting Clinic: イベントのスクリプティング
http://msdn.microsoft.com/ja-jp/library/ms974564.aspx
ここだと、
・ブラウザの要素のイベント
・<object>要素で指定したActiveXObject
のイベントの記述しかありませんでした。
WSHだとイベント取得はできるので、最悪、ロジックを全部WSHに書いて、HTAから
それをキックするしかないのかもしれません。 >ieのeventは特殊で一般論は通用しない
wshを使うか、NET、powershellだってば >>729
ご返事ありがとうございます。
結局、HTAでは、動的に生成したActiveXオブジェクトのイベントの
取得はできない、ということですか…。
>ieのeventは特殊で一般論は通用しない
これは「IEのActiveXObjectが特殊」という文意ではなくて、
IEはスクリプトホストとして特殊で、だからイベント操作には
HTAではなく、他のホスト(WSH, PowerShell, .NETなど)を
使ったほうが良い、という文意だったのでしょうか?
HTAでメインロジックをすでに書いてしまったので、正直頭を
抱えています。
>>348さんなどの、HTAをWSFに埋め込む方法も検討してみます。 ieのコントロールは難しいからやめとけ
webbrowser controlを使え WSF埋め込みのHTAを書いてみました。
HTAとWSHが一つのファイルにまとまるのは大変ありがたいのですが、
機能的には別ファイルにあるのと変わりがないようです。
変数や関数の共有はできないし、WSHからHTAにデータを渡すのは
HTA起動時に標準入出力を経由したり、外部ファイルをポーリングで監視する
などしかないようで、私のような初心者にはなかなか厳しいですね…。 IEが簡単に素人にしかも簡易なスクリプト程度で制御できちゃったら
今頃ウィルスやらなにやら大問題になってると思わないか?
とにかくローカルからはおいそれと手出しできないように
進化してきてるからある程度で諦めるのが吉
IEの操作はユーザーに任せるべきってMS自体が言ってんだし
しかも環境バラバラで特定できないんだろ?そんなん普通に難しいぞ
まずはそっちをどうにかしてもらった方が早い アドバイスありがとうございます。
>>732を書いたあと、規制等でここに書けないでおりました。
>>731
webbrowser control とは、普通の "InternetExplorer.Application" の
ことでしょうか?今はそれを使っています。visible = true にしないほうが
安定して動くようです。 >>733
おっしゃるとおり、安定して稼働する環境の条件を見つけ出して、
それ以外はサポート対象外にさせてもらえないか、交渉する方向で
行こうと思います。
今までここに書いた以外にも、IEの不安定さを痛感することが
いくつも起こり、苦戦しております。
IEを細かくコントロールするには、C#で書くべきだったかもしれないし、
そもそもIEを千ページ以上にわたって自動制御する事自体、無理な課題
だったかもしれません。 >そもそもIEを千ページ以上にわたって自動制御する
。 。
/ / ポーン!
( Д ) まあ、やらないで無理っていうのはなかなか顧客には納得してもらえないだろうから
その為の期間だったと思えば・・・つかC#使えるのかよ迷わずそっちだろっていう
それ以上はリッチクライアントとか考慮するしか無いんじゃない htaを触ってみたけど使えないことがわかった
ttp://fron.sitemix.jp/blog/2014/02/26/38/ >>739
> 結論から言えば、対価を得られるような代物は作れない。
HTAで対価を得ようとか思う奴がいるのか? リンクをユーザーの標準のブラウザで開かせるにはどうしたらいいのでしょうか >>740
> 詳しいことはkia HTA:APPLICATIONタグとかで。
とか書いておきつつ
> テキスト選択ができる
> マウスのドラッグでアプリケーション上のテキスト選択ができる。(選択範囲が反転する)
> ブラウザ上と同じ動きをするので、テキストだけではなく、ボタンとか画像とか全部反転
> 表示される。ひどい。
ってwww イケイケ時代ならいざ知らずMSの宣言は逆説
SilverlightでリッチUX!、チーン
PowerShellでUnixShell超え!、チーン
JScript改めJavaScriptでアプリ!←今ここ PowerShellってUnixShellに対抗しようとしてたのか >>751
実際の所リスナの追加やら何やらをページ側のスクリプト無しでタイミングも気にしないで
実行できるのは非常に便利。
・・・世の中にIE以外のブラウザが無けりゃ。 >>754
このコード今のIEだと動かないし、互換モード指定して動かしたとしても「スクリプトがタブを閉じようとしてる」って
警告が出るんだけどほんとに何したいんだか。
普通のユーザーがIEで訪問したページにこれが仕込まれてても、なんかバグってるとしか思われないと思うんだが…。 firefoxとかClome板htaって出ないかな とりあえずローカルファイルと階層が簡単に弄れればokなんだが firefoxとかには元々そーゆー機能があるの? File APIとかの話? >>759
いや、自己満足ローカルツールがHTML+Javascriptで簡単に作れる機能が
あればいいなーと思っただけ。
XULもFile APIも俺みたいな底辺には手軽でないし、記述方式も優しくないからな html5のFile APIで今後どうなるかってところだろうな
でも*nix系やmacではそういう需要ない気がする Windowsストアアプリが窓化できるようになって
簡単にサイドローディングできるようになればいいんだよ WInsows10でストアアプリが全画面でなくデスクトップに表示にできるようになりましたってアピールが苦笑せざるをえない
WinJSとSegoeSymbolのアプリアイコンをWin7とIE9のHTAで使えるようにしろ 笑うのは勝手だが野良アプリを解放しなければ状況は改善しない ユーザーにVSをインストールしてもらって自分でビルドしてもらえばいいんだよw IE11 の環境で DPI が既定値から変更されていると HTML アプリケーション (.hta) が縮小表示される
http://support.microsoft.com/kb/2923604/ja >>768
window.open メソッドのバグか。
リンク先に回避方法も書かれてるけど、そもそもhtaでiframeってそんなに使うかな? Win10 Build9879のIEの新機能をHTAで使う方法が分からない…
まだ試験的実装だから仕方ないか 以下のようなツールを過去に作ったって人いたら下さい!
・Dドライブ内をcmdのdir /s や dir /s /bで検索する
・条件は単一でいいですし and や or で複数
・結果の文字列はハイパーリンク
・dir /s /b の場合はフォルダ毎に開閉できるHTMLタグ
・ウィンドウサイズの変更に、HTA上のオブジェクトの位置がバランスよく追従
ないですかね? ハイパーリンクじゃなくて、ラジオで選択してフォルダを開く、またはファイルを開くボタンでもいいです! ファイルにリダイレクトしてやれ
dir /s > file.txt node-webkitがあるんでhtaはオワコンで良いんじゃないの? >>775
EXE化出来るんだから標準搭載がどうとか関係無いだろw それはつまり、dirじゃないけど似たのは作ったということです?下さい!
dirが最速だと思ってるだけで他のでも全然まったくもって下さい!
もしかしたら日付や時刻まで条件に指定できたりしますか?スゴい! HTAのWindow handleって取得出来ないんか? 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秒 >>784
それ、ベンチマークのやり方が不適切なので参考程度で見て
JavaScriptの最適化が進んでいて速いのは確かなんだが >>784
空ループの時間を計るとか、何の意味もないし参考にならないな。
コード書いた人は脳味噌が80年代のBASICで止まってるんじゃなかろうか。 >>786
ちゃんとしたベンチマークコード書いてください! ■ このスレッドは過去ログ倉庫に格納されています