06/11/09 22:59:07
当然exeにすれば、exefileのドロップハンドラが適用されるようになるよ。
あとはvbs、jsなどを介するとか。D&Dを受け付けないだけで引数が渡せないわけじゃないから
スクリプトにD&Dさせて、スクリプトからhtaに引数を渡すって方法もある。
320:デフォルトの名無しさん
06/11/10 01:05:06
>>318
>>240でcmdファイルにすればいいんじゃないの。
321:デフォルトの名無しさん
06/11/10 01:16:03
↓のようなの作ってD&Dできるようにしたことがある。
// test.js
var HtaFile = "d:\\hta\\test.hta";
@if (@_jscript_version >= 7)
import System;
import System.Diagnostics;
import System.IO;
var args : String[] = Environment.GetCommandLineArgs();
for (var i = 0; i < args.Length; i++)
args[i] = '"' + args(i).Replace('\\', '\\\\').Replace('"', '\\"') + '"';
Process.Start('mshta.exe', '"file:///' + HtaFile + '"'
+ ' var args=[' + String.Join(",", args) + '];');
@else
var args = WScript.Arguments;
var a = [];
for (var i = 0; i < args.length; i++)
a.push('"' + args(i).replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"');
new ActiveXObject("WScript.Shell").Run('mshta.exe "file:///' + HtaFile + '"'
+ ' var args=[' + a.join() + '];');
@end
それで、HTAの方は
<hta:application id="Hta" />
<script>
eval(Hta.commandLine.replace(/^".*?" /, ""));
のようにして
322:デフォルトの名無しさん
06/11/10 01:35:06
>>318
MSHTA.EXE フルパス.HTA
のショートカットを作ればいいだけじゃないの。
323:デフォルトの名無しさん
06/11/10 01:47:07
過去の遺産になりつつあるbatchファイルでもいいんでないか?
324:デフォルトの名無しさん
06/11/10 19:26:29
>>319-323 ありがとうございます。いろいろ方法があるんですね
即理解できるほど頭良くないのでじっくり吟味します。
325:デフォルトの名無しさん
06/11/11 17:17:33
少ない内容を背景で誤魔化してる例見つけた
URLリンク(sei.qee.jp)
HTAも結局デザインセンス如何で結構使ってもらえるかも
326:デフォルトの名無しさん
06/11/13 01:23:02
>>325
HTA自体、もともとIE(の普通のコンテンツ)からセキュリティと
GUIの制約を一部はずしたものなので、無理にデザインセンスとか
いわなくても、少しだけ気をつければダイアログベースのアプリ
のようなものなら、VBで作るexeのアプリとほとんど区別つかない
ものは比較的簡単にできると思う。
URLリンク(www2.wbs.ne.jp)
にある「jseval」とか、見かけダイアログだし、ほとんどキーボードで
操作できるし、普段HTAと意識することなく普通に便利に使ってる。
デザインよりも内容じゃないの。
327:デフォルトの名無しさん
06/11/14 19:28:46
>>324
レジストリ云々はこのあたりの話しじゃね?→ >>191
OSがXPSP2なら無問題ジャネ?
328:デフォルトの名無しさん
06/11/15 12:16:08
それならHTAでの引数の扱い方も一緒に
>>281-283
それから
URLリンク(pc.2ch.net)
の182
329:デフォルトの名無しさん
06/11/23 16:48:11
>>241の出典発見
URLリンク(www.vector.co.jp)
>>241←Yさん本人? …まさかね
330:デフォルトの名無しさん
06/11/24 20:18:56
こっちにHTAネタが
スレリンク(tech板:742番)
331:デフォルトの名無しさん
06/11/26 13:11:47
>326
そこそこ詳しい人なら中身で評価するけどね・・・
パソ初級者レベルだと見た目が良くないとダメだよ。
うちの嫁がそう。
あとブランド名か。
332:デフォルトの名無しさん
06/11/26 17:13:03
qooxdoo、Yahoo UI Library、Prototype Window Class とか
javascriptのライブラリ使えば結構リッチなGUIになるけどね。そいや >>198 もあったね。
スクリプタな人は嫌うのかな?
333:デフォルトの名無しさん
06/11/27 09:02:24
HTAは一見単なるHTMLファイルと見紛うような
見た目のチープさがいいんだよ!!
334:デフォルトの名無しさん
06/11/27 16:13:50
エエエエエェェ(;´Д`)ェェエエエエエエエエ
335:デフォルトの名無しさん
06/11/27 18:18:43
GUIなしのHTAの利用法を忘れてはいけません。
インラインで書けるスクリプトホスト。
Windowオブジェクトが組み込みで使えるスクリプトホスト。
例えば、>>330
336:デフォルトの名無しさん
06/11/27 19:01:28
>>335
batファイル作るんならもう一つwshファイル作った方が早くね?
と思ったが、doskeyマクロとかに登録するともしかしてコンソールで便利に使えるのかな?
337:デフォルトの名無しさん
06/11/28 19:44:42
>>336
例えば、>>330をWSHファイルで作ると、どう?
かえって手間が掛かるのでは?
338:デフォルトの名無しさん
06/12/14 07:20:47
現在の時刻に従って選択肢のデフォルトをAMかPMかに変えたいのですが、
<HTML>
<BODY>
AM/PM <SELECT name=selAmPm size=1>
<OPTION name=optAm value=AM>AM</OPTION>
<OPTION name=optPm value=PM>PM</OPTION></SELECT><BR>
<SCRIPT LANGUAGE><!--
d = new Date();
if (d.getHours() < 12){
selAmPm.options(0).selected = true;
}else{
selAmPm.options(1).selected = true;
}
//--></SCRIPT>
</BODY>
</HTML>
options(0)というようにインデックス0でなく、名前optAmで参照したいのですが、
どうやるといいのでしょうか?
selAmPm.optAm.selected = true;
selAmPm.options.optAm.selected = true;
selAmPm.options("optAm").selected = true;
どれもダメだった・・・orz
339:デフォルトの名無しさん
06/12/14 09:03:25
> selAmPm.options("optAm").selected = true;
で出来るよ。
但し「name=optAm」ではなく「id=optAm」ね。(両方でもいいけど)
HTA関係ないHTMLの基礎。
340:デフォルトの名無しさん
06/12/14 10:03:46
セキュリティ脆弱性があるから、HTAの関連付けを外せ、と巷間で言われてますが、
そんなに危ない?
対策としては、拡張子を適当に変えるだけでもよいのでは?HTBとか。
341:デフォルトの名無しさん
06/12/14 10:38:44
関連付け外したり、拡張子変えたりで対策出来ると思ってるようなバカには危ないかもな。
きちんと対策してれば何の問題もないけど。
342:デフォルトの名無しさん
06/12/14 15:28:49
EXEもHTA同様に危ないわけだが
343:デフォルトの名無しさん
06/12/14 18:41:32
>>341
バカバカってあまり言わないほうが、バカに見えないですよ。
344:デフォルトの名無しさん
06/12/14 20:09:28
>>341 1回
>>343 3回
345:デフォルトの名無しさん
06/12/14 22:06:35
バカバカバカバカ。ほらね、そうでしょ?
346:338
06/12/15 00:37:25
ありがとうございました。
347:デフォルトの名無しさん
06/12/15 14:39:32
関連付け外すのは、MSが
HTA の実行の脆弱性 - CVE-2006-1388
の回避策に挙げてるくらいだから、それなりに有効だろ。
でもそれじゃ不便だから、HTBに関連付けを変えれば、同等の効果があるんじゃないか。
HTA遣いのリスクを避ける知恵じゃないか。
348:デフォルトの名無しさん
06/12/15 17:49:17
>>307
マイコンピュータゾーンの
「ドメイン間のデータ ソースのアクセス」が「ダイアログを表示する。」
になっていると、そうなるみたい。なんかメッセージと合わないですが。
マイコンピュータゾーンのセキュリティを強化して、
ローカルのHTAからローカルのファイルにアクセスできないのも困ったもの。
>>317の代替手段はあるけど、ちょっと面倒ですね。
349:デフォルトの名無しさん
06/12/16 01:09:33
HTAでEscキーでウィンドウを閉じるようにはできないですか?
350:デフォルトの名無しさん
06/12/16 01:15:59
できるよ
351:デフォルトの名無しさん
06/12/19 23:38:41
ありがとう。できました。
こういうのがうまくいかないのはなぜなんでしょう?
<HTML id=maindoc onkeydown=fOnkeydown>
<BODY>
<SCRIPT>
//maindoc.onkeydown=fOnkeydown;
function fOnkeydown(){
if (window.event.keyCode == 0x0D){
alert("enter");
}
}
</SCRIPT>
</BODY>
</HTML>
「//」を取ると動きますが・・・
352:デフォルトの名無しさん
06/12/20 11:54:35
おぉ、HTAのスレがあったんですね。過疎ってますけど(ノ∀`)アチャー
自分の場合は、
番組表、天気予報、ニュースなどを取得する、
Samurizeのスクリプト(VBS)を使って、
出力結果をHTML+CSSで整形、単体で起動できるようにしてます。
353:デフォルトの名無しさん
06/12/20 12:06:11
ありきたりな使い方だな
俺もありきたりな使い方しかしてないけど
354:351
06/12/21 00:39:13
なんとなくわかりました。どうも。
355:デフォルトの名無しさん
06/12/22 15:42:17
>>198 のよりも手軽に使えるかも
DHTML Suite for applications
URLリンク(www.dhtmlgoodies.com)
注)ライセンス:LGPL …なのが玉に瑕...か
356:デフォルトの名無しさん
06/12/23 15:50:48
起動時にウインドウの位置と大きさを指定したいのですが、
マウスボタンを下げた状態でresizeToした場合にエラーが出るので
念のためマウス状態を取得して場合分けしてみたところ、fireEventで
イベントを呼び出したためかevent.buttonがうまく機能してくれません。
onloadイベントを使うと画面表示後にリサイズして見栄えが悪いので
出来ればfireEventを使いたいのですが、
この場合たまに起こる程度のエラーは諦めるしかないのでしょうね。
<html><head><script language="javascript">
document.all.tags("html")(0).onclick = function (){
if (1 & event.button) return true;
resizeTo(300, 300);
moveTo(event.screenX -150, event.screenY -150);
document.all.tags("html")(0).onclick = null;
return false;
}
while (document.all.tags("html")(0).fireEvent("onclick"));
</script><hta:application></head></html>
357:デフォルトの名無しさん
06/12/23 16:03:05
エラー拾ってリトライするか、
エラー無視してonloadで念のためもう一度やる、とかは?
358:sage
06/12/23 17:57:10
>>356
例外処理という方法があったのですね。
アドバイスありがとうございます、
おかげで期待通りの動作になりました。
359:デフォルトの名無しさん
06/12/26 14:37:26
>>355 ライセンス:LGPL ねぇ…
Yahoo UI Libraryが出てるから魅力感じないス。
phpspotでも紹介してたスね。こっちのほうが速いけど。
// 何気にこのスレって面白い情報集まるのね >>39 >>85 とか早い時期から注目してるし。
360:デフォルトの名無しさん
06/12/27 11:07:58
HTMLと同じように使えるので気に入ってます。
ただ,HTAではcookieは使えないようですね?
以前のデータをcookieのように保存するよい方法
がHTAにあれば,教えてください。
361:デフォルトの名無しさん
06/12/27 11:28:30
バイナリに保存しちゃえばええんちゃう?
function readBinary(file){
var adTypeBinary = 1;
var stream = new ActiveXObject("ADODB.Stream");
stream.type = adTypeBinary;
stream.open();
stream.loadFromFile(file);
stream.position = 0;
var bin = stream.read();
stream.close();
var tmpElm = new ActiveXObject("Microsoft.XMLDOM").createElement("tmp");
tmpElm.dataType = "bin.hex";
tmpElm.nodeTypedValue = bin;
return tmpElm.text;
}
function writeBinary(file,hexBinStr){
var adTypeBinary = 1;
var adSaveCreateNotExist = 1;
var adSaveCreateOverWrite = 2;
var tmpElm = new ActiveXObject("Microsoft.XMLDOM").createElement("tmp");
tmpElm.dataType = "bin.hex";
tmpElm.text = hexBinStr;
var bin = tmpElm.nodeTypedValue;
var Stream = new ActiveXObject("Adodb.Stream");
Stream.Type = adTypeBinary;
Stream.Open();
Stream.Write(bin);
Stream.Savetofile(file, adSaveCreateOverWrite);
}
362:デフォルトの名無しさん
06/12/27 14:49:50
>361
詳しいコードまで作成していただき,感謝です。これを改良して使わさせて
いただきます。
ところで,自分で教えていただいた
new ActiveXObject("ADODB.Stream");
をネットで検索すると,Ajaxの解説ページ,JavaScript Libraryのページ
などにありました。HTAに関連する他のnew ActiveXObject("...")の基本
的な機能を勉強するに,おすすめのサイトはございますか?
363:デフォルトの名無しさん
06/12/27 16:24:47
>>362
ActiveXObjectはHTA用とか関係ないから。とりあえずMSDNにはMSが作ってる
ADODB.Stream、Microsoft.XMLHTTP、MSXML2.DOMDocumentや
WSH付属のWScript.XXXXX、Scripting.FileSystemObject、Scripting.Dictionaryなどの
解説があるし、MS製以外なら制作者のHPや付属ドキュメントみれば良い。
364:デフォルトの名無しさん
06/12/27 19:25:05
>>360
cookie使えたような気がしたけど、俺の記憶違いかな
HTAらしさを醸し出すならやっぱし
behavior:url(#default#userData)
365:デフォルトの名無しさん
06/12/29 21:08:44
HTAならテキストファイルの読み書きが出来るからiniでもxmlでも好きなようにするがよろしい。