HTAをもっと流行らせる計画 at TECH
[2ch|▼Menu]
[前50を表示]
200:198
06/07/22 21:47:41
たま〜に来て てきと〜に情報投げて、じゃやっぱり迷惑だよね…。
今までよく怒られなかったヨ。 過疎ってたせいもあるんだろうけど。
…これからは控えますです。

201:デフォルトの名無しさん
06/07/23 10:24:08
いや、迷惑じゃないと思うよ。

202:198
06/07/23 13:34:53
>>199 >>201 ノシ
コアな話しの邪魔にならない程度に考えてみる


203:デフォルトの名無しさん
06/07/25 20:12:28
タイトル バーに閉じるボタンがない HTA を作成する方法はありますか。
URLリンク(www.microsoft.com)

MSの日本法人は刺ねばいいと思いませんか?

204:デフォルトの名無しさん
06/07/25 22:44:06
これ解けたら神だよ!!




hjuus htuuuiu4548""hh $%%458koiut
#hdifhkla''
さあこのプログラムがわかるかな?

205:デフォルトの名無しさん
06/07/27 22:22:19
>>203
何で?

206:デフォルトの名無しさん
06/07/27 23:18:33
>>205
英語
URLリンク(img.microsoft.com)
日本語
URLリンク(img.microsoft.com)


207:デフォルトの名無しさん
06/07/27 23:46:27
>>206
糞ワロタ

208:デフォルトの名無しさん
06/07/28 00:26:20
ヤバイ、MSの日本法人にちょっと萌えたw

209:デフォルトの名無しさん
06/07/28 10:37:46
>>208
MSの日本法人には日本人向けにドジっ娘属性が付けてあります♪

210:デフォルトの名無しさん
06/07/31 20:39:49
>>206
なるほど

211:デフォルトの名無しさん
06/08/02 22:33:40
生意気な hta みかけたぜ

<script>
(new ActiveXObject("WScript.Shell")).SendKeys("^{ESC}{UP}~~");
</script>


212:デフォルトの名無しさん
06/08/03 23:22:49
>>211
どこが?

213:デフォルトの名無しさん
06/08/04 19:17:54
HTAバカにしてきたけど、本格的なプログラムっぽい外観にできてかなりイイ!

214:デフォルトの名無しさん
06/08/07 23:20:49
自分のサーバー上に置いている自作のxxx.htaの中で、
<OBJECT CLASSID=clsid:38EE5CEE-4B62-11D3-854F-00A0C9C898E7
ID=DVD STYLE="height:420px; width:560px">
というMicrosoftのActiveXを読み込ますようにしています。

これの影響なのか、xxx.htaをダウンロードしようとしても、上記のActiveX
が正常に機能しません。私のサーバーのURLをIEの設定で「信頼するサイト」
に登録すると、正常に機能します。

htaのウリは、「ブラウザから解き放たれた」はずです。IEのセキュリティに
から解放する方法はございますでしょうか?(いちいち、ユーザーに私の
サイトを「信頼するサイト」に登録するようにお願いするのは面倒です。)

215:デフォルトの名無しさん
06/08/09 10:13:39
そんなの出来たら、ウイルスばら撒くのに便利すぎる。

リモートで実行できる以上、なんらかのセキュリティは必須だから
「IEのセキュリティ」から解放されても「htaのセキュリティ」が必要になる。
無駄だから統合してあるだけのこと。

216:デフォルトの名無しさん
06/08/09 11:22:02
>>214
「ブラウザから解き放たれた」ってのはつまり普通の exe アプリケーションと
同じ扱いするってことで… .hta ファイルをローカルに保存して実行してくれってことでわ?

217:デフォルトの名無しさん
06/08/09 22:50:26
>>216, 215
コメントありがとうございます。

> .hta ファイルをローカルに保存して実行してくれってことでわ?
明日試してみますが、ユーザーが自分のパソコンに「ローカルに保存」して私のhtaを
実行する」場合にも、そのユーザーはまず、私のサーバーを「信頼するサイト」と
してIEで登録しないと、214のようはhtaは実行できないのではありませんか?

もう1つ教えていただきたい点がございます。htaを開発しているWindows XPパソコ
ンには、Visual Studio 2005をインストールしていいて、htaにバグが発生すると、
自動的にVisual Studio 2005が立ち上がります。Visual Studioは便利なので、これで
初めからhtaを開発できたら便利だと思うのですが、可能でしょうか? 現在は、
エディターでhtaを書いています。


218:デフォルトの名無しさん
06/08/10 01:29:10
>>134
このbatがすごく自分のやりたい事に近いのですが、
batとJavaScriptにうとい為、いまいちどういう仕組みで
機能しているのか理解できません。

やっとこ調べて、%0がbatのパスを指すらしいことは分かったのですが
%* と s.indexOf("[[remov"+"e_tag]]") が良くわかりません。

vbsでいうところの、
For Each DropFile in Wscript.Arguments
MsgBox DropFile
Next
みたいにするには、どこを書きかえればいいのでしょうか?


219:デフォルトの名無しさん
06/08/10 02:04:15
>218
まぁ、ぶっちゃけ肝は
>        //コマンドラインを取得
>        document.getElementById("cmd_line").value = app.commandLine;
ここなんだけどね。
var cmdline = app.commandLine;
var args = cmdline.split(/\s+/);
for (var i = 0; i < args.length; ++i) {
window.alert(args[i]);
}
ってすれば「vbsでいうところの〜」のよーなことになる。
(split()で単純に空白で区切ってるから空白入ったパスは寸断してしまうが。サンプルコードなんでカンベソ)
ちなみに、バッチファイルの「%*」は「バッチファイルに与えられた引数全部」。
(バッチの中でshiftコマンド使うと話が変わってくるがそれはおいとく)
「s.indexOf("[[remov"+"e_tag]]")」は"[[remove_tag]]"という文字列が含まれてるかの検査
(vbsならInStr(s, "[[remov"&"e_tag]]")だな)だが
DOMで全文書パースしてるからそこを"[[remove_tag]]"と書いてしまうとその部分も引っかかってわやになるので
そう書いている。

220:218
06/08/10 22:43:43
>>219
親切丁寧なScripting Guyに惚れそうです。本当に感謝です。

甘えてばっかもアレなんで、冗長っぽいコードですがVBS仕様にしてみました。
>>134氏同様にインデントは全角スペースになっています。

Sub window_onLoad
Dim arg,FindCnt,StartCnt,FilePath,fso
'----- 一番上のコメント削除(完全流用) -----
For Each n in Document.body.Childnodes
  If typename(n.nodeValue)="String" and 0 < inStr(n.nodeValue,"[[remov" & "e_tag]]") then n.nodeValue=""
 Next
'----- CommandLineを整形 ------
 arg = Replace(app.commandLine ,Chr(34) & Split(app.commandLine,"""")(1) & Chr(34) & " ", "") '自身のパス削除
  StartCnt=1
  Set fso = CreateObject("Scripting.FileSystemObject")
  'スタート地点が文字数を超えない限りループ
  Do While StartCnt < Len(arg)
    '最初の文字が「"」かどうかで分岐(「"」で始まる場合は、パスの間に空白がある)
    If Mid(arg, StartCnt, 1) = Chr(34) Then
      FindCnt = InStr(StartCnt + 1, arg, chr(34))'パスの終わりの「"」を探す
      FilePath = Mid(arg, StartCnt + 1, FindCnt - (StartCnt + 1))'パスの抽出
      StartCnt = FindCnt + 2'スタート箇所を次のパスの頭へずらす
    Else
      FindCnt = InStr(StartCnt, arg, " ")'パスの区切りである「 」を探す
      FilePath = Mid(arg, StartCnt, FindCnt - StartCnt)'パスの抽出
      StartCnt = FindCnt + 1'スタート箇所を次のパスの頭へずらす
    End If
      Msgbox FilePath & vbNewLine & "Exists:" & fso.FileExists(FilePath)'抽出パスの確認
  Loop
  Set fso = Nothing
End Sub

221:218
06/08/10 22:54:11
コードで行がいっぱいいっぱいになってしまったので連投スマソ。

参考資料
URLリンク(www.microsoft.com)

どうしても、わからない事があったので聞きたいのですが、

>DOMで全文書パースしてるからそこを"[[remove_tag]]"と書いてしまうとその部分も引っかかってわやになるので
>そう書いている。

この部分を詳しくお願いします。
どうも"[[remov" & "e_tag]]" と "[[remove_tag]]" の違いが理解できなくて。
&で文字列を結合するのとしないのと違いがでるのでしょうか?

222:デフォルトの名無しさん
06/08/12 02:39:54
今さら真面目に>>134見てみたけど、面白いねこれ。

まず、拡張子は .bat だから基本的にこれはバッチファイル。
だから引数を %* で食えるんだね。

バッチだったら "<html>" 以下は文法エラーじゃないかと一見思えるが、
その2行上でexit してる。バッチはインタプリタなので exit 以下は無視
されるので問題ない。ふむふむ。

で、このバッチが何をしているかというと、自分自身を mshta.exe の引数
に渡してる。(2行目)
ここでこのファイルは HTAファイルとして mshta.exe に評価されることに
なる。
じゃー今度は <html> より上の部分が文字列として表示されてしまうじゃん
かというと、これはこれで<html>より上はしっかり HTML 的にコメントアウト
されてる。なるほど!

いやいや待ちたまえ、rem [[remove_tag]] はコメントアウトされてないじゃ
ないか。その通り。
そのために ev_onload() で「"[[remove_tag]]" という文字列を含むノード
は中身を空にする」って作業を入れてるわけだ。おもしろ〜い。

そこで>>134氏に2つ質問。
・数行前にはああ書いたけど、本当は前半の <!-- --> はオマケだよね?
<html>より上は1つのTextノードになるから、どっちみち ev_onload() で
除去される。
・"[[remov"+"e_tag]]" は必要なの?<script>はElementノードだから
nodeValue は null。影響ないんじゃない?


223:デフォルトの名無しさん
06/08/18 09:52:33
×ボタンが押された場合の処理ってjavascriptでどう検出して書けばいいんでしょうか…
onunloadに書くと全てのウィンドウを閉じる操作をした場合に実行されてしまうので。

HTAでは×ボタンを表示しないようにするしかないのでしょうか。



224:デフォルトの名無しさん
06/08/18 10:29:36
自己レス

フラグ立てれば済む話という単純なことに気づきませんでした…スマソ。


225:デフォルトの名無しさん
06/08/20 17:10:50
んがー、HTA+VBScriptでSleepは使えないのか。
ループの中でテキストボックスの中身変更しても反映されないorz

226:デフォルトの名無しさん
06/08/20 19:54:51
>>225
無理みたいね

HTA(HTMLアプリケーション)について
URLリンク(www.roy.hi-ho.ne.jp)(HTML%83A%83v%83%8A%83P%81[%83V%83%87%83%93)%82%C9%82%C2%82%A2%82%C4
(注意:WscriptオブジェクトはWSHの組み込みオブジェクトなので、HTAからは利用できない)

HTAファイルでWScriptオブジェクトの使用  
URLリンク(www.happy2-island.com)
代替案でsetTimeoutの説明してる


227:デフォルトの名無しさん
06/08/22 00:39:04
>>225
URLリンク(msdn.microsoft.com)

228:デフォルトの名無しさん
06/08/23 15:41:15
どうしても分からないんで助言をお願いしまっす
HTAでIEのツール→インターネットオプションの詳細設定の
一番下の「背景とイメージを印刷する」を
オン・オフするにはどうすれば良いでしょうか?

色々調べたんですが、探しかたが悪いのか全く情報が見つかりません。
どうか宜しくお願いします

229:デフォルトの名無しさん
06/08/23 16:42:54
>>228
\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Print_Background

230:228
06/08/24 14:37:01
>>229
素早い返事ありがとです。やっぱレジストリをいじいじするんですね。
こう言うキーの探し方ってコツとかあるですかね?

あと一つだけ質問です。
職場で動かそうとするとノートンに怒られ、
最終的には管理者に怒られてしまうので
レジストリとか手をだしたことがないんですけど
コレは大丈夫でしょうか?
質問ばっかりで申し訳ないんですが、宜しくお願いします


231:デフォルトの名無しさん
06/08/24 15:28:28
>>230
探し方のコツはレジストリを適当に眺めてるとつかめますよ。

HTAはノートンの設定を変えないと警告が出るんだっけ。
いっそのこと↓のようにexeにしてしまうとか。
スレリンク(tech板:77番)

232:デフォルトの名無しさん
06/08/24 19:25:30
>>230
管理者にバレたら大変じゃないの?

233:デフォルトの名無しさん
06/08/24 20:28:01
>>231
HTAだとSCRIPTがVBの時もあるのだけどそういうのをexeにするコンバータとか売ってる?


234:デフォルトの名無しさん
06/08/24 21:25:35
単純にexeにするのなら>>98のがある。
VB.NETや他の.NET対応言語で書き直すもよし。

235:228
06/08/24 23:01:01
>>231
なるほど眺め続ければいーんですね。
ってキーの数とか半端ないんですけど…
んで、HTAの件ですがレジストリの読み込みは普通にできました。
ただレジストリを変更すると流石に反応するんじゃないかな?
と思ってるんでチャレンジしてません。
ノートンの知識がないんで、何に反応されるか戦々恐々なんですよ…
exeはただのjscriptでも可能なら考えてみたいです

>>232
大変かもしれません。
一度引っ掛かって、管理者の方がスットンできた経験あります。
原因がわかってるならいーけど?みたいな事を言われ軽く睨まれました。
引っ掛かった瞬間パニくって、速攻で丸ごと削除ったから
原因なんて分かる訳ないじゃん?とはチキンなんでいえませんでした。


236:デフォルトの名無しさん
06/08/24 23:13:38
>>235
手動でIEの[ツール]の[オプション]を変更して反応しなければ
他のプログラムでレジストリの該当部分を変更しても大丈夫だと
思うけど。
レジストリを変更したプログラムを一々監視してたとしたら別ですが。

237:デフォルトの名無しさん
06/08/25 11:12:34
>>234
アンカミスってません? 
>>130 >>136"*.exeじゃ無かったな、確か。独自形式の*.wsits だったな、確か。"』
exeにするなら >>184 HTABOX の方かと

>>235
>exeはただのjscriptでも可能なら
>>231のリンク先以外の方法なら
URLリンク(www.vector.co.jp)
とか いくつかありますね

238:デフォルトの名無しさん
06/08/25 13:44:25
>>234,237
ありがとう。
しかし同じ動作するのにexeだとOKでhtaじゃ嫌と言う社内の空気がワカラン orz

アイコンつけられるかつけられないかの違いだったらモットワカラン orz

239:デフォルトの名無しさん
06/08/25 18:47:36
ノートン先生ってHTAには警告出すけど
EXEはスルーするよね。

240:デフォルトの名無しさん
06/08/26 11:04:08
>>134 >>222

もっと簡単に、

@START MSHTA.EXE "%~f0" %*
@GOTO :EOF
<script language=vbscript>document.body.innerText=""</script>
<html>
〜略〜

更に、#!行みたいに、1行で、

@START MSHTA.EXE "%~f0" %* & GOTO :EOF & REM <script language=vbscript>document.body.innerText=""</script>
<html>
〜略〜



241:デフォルトの名無しさん
06/08/26 20:27:53
>>117 >>120 >>125

HTMLならMHTMLでひとつに纏められます。

そこで、まずhoge.HTAをhoge.HTMに変えて、IEで開き、MHTMLで保存します。

MSHTA.EXE %CD%\hoge.mht
とやっても駄目ですが、
MSHTA.EXE mhtml:file://%CD%/hoge.mht
とすればよいようです。

このファイルの先頭に、
@START MSHTA.EXE "mhtml:file://%~f0" %*
@GOTO :EOF
の2行を追加して、拡張子をCMDに変えます。

或いは、

拡張子を.MHTAに変え、
MSHTA.EXE "mhtml:file://%0" %*
に関連付けます。


242:デフォルトの名無しさん
06/08/28 13:58:32
>>125

mshta.exe "mhtml:res://自分.exe/main.mht"

はどうでしょう?


243:デフォルトの名無しさん
06/08/28 19:40:34
mht ってファイル名が全部フルパスに変更されちゃうからローカルファイルだとちょっとハズイ。
それとパッケージされるのは元からhtmlにリンクされているファイルだけみたいだけど
スクリプトで動的に表示したい画像ファイルとかはどうやって保存する?
IE以外に作成ツールとかあるのかな?

244:デフォルトの名無しさん
06/08/28 20:00:22
>>117

目隠し程度でよいのなら、以下はどうでしょう?

+ADwASABUAE0ATAA+ADwASABFAEEARAA+-
+ADwAUwBDAFIASQBQAFQAIABsAGEAbgBnAHUAYQBnAGUAPQB2AGIAcwBjAHIAaQBwAHQAPg-
+AFMAdQBiACAAdwBpAG4AZABvAHcAXwBvAG4AbABvAGEAZAAoACk-
+AE0AcwBnAEIAbwB4ACAAIjBCMEQwRjBIMEoAIg-
+AEUAbgBkACAAUwB1AGI-
+ADwALwBTAEMAUgBJAFAAVAA+-
+ADwALwBIAEUAQQBEAD4-
+ADwAQgBPAEQAWQA+MEswTTBPMFEwUwAgADwALwBCAE8ARABZAD4APAAvAEgAVABNAEwAPg-

ぱっと見では、HTMLにはとても見えませんが、
拡張子HTAかHTMLのファイルに保存すれば、実行可能です。


245:デフォルトの名無しさん
06/08/28 20:09:45
>>243

IEでなく、CDO.Messageを使うと、Content-IDでリンクされます。
CDO.Messageなら、いろいろ操作できてよいのでは。


246:デフォルトの名無しさん
06/08/28 20:11:26
>>116

named pipeでなく、anonymous pipeで標準入力に渡せばよいのでは?

>>114

しかし、そうやってHTAファイルを隠したところで、
所詮、右クリックの「ソースの表示」で見えちゃうのでは?


247:デフォルトの名無しさん
06/09/01 23:17:42
>>246
HTA:APPLICATIONタグで
右クリック禁止にしておけばいいんじゃないの?


248:デフォルトの名無しさん
06/09/02 11:29:51
Vistaでは、簡単にHTAの背景透過できるんかな

249:デフォルトの名無しさん
06/09/02 13:54:28
>>247
コンテキストメニューのほうは抑止できますが、^pの印刷は抑止できます?

印刷設定ダイアログ表示中にテンポラリフォルダを見るとソースがあります。
この方法はダイアログなどにも使えます。


250:デフォルトの名無しさん
06/09/02 18:44:23
クライアントで読む必要があるものを隠そうとするのは不毛の道

251:デフォルトの名無しさん
06/09/03 12:46:15
res:みたいに、ZIPの中身を取り出すprotocolがあったら、と思いません?
もし、それがあれば、HTMLやHTAを.filesや.mhtでなく、.zipにまとめて保存できて、よいのに。

誰か作っているかも、と思って探してみたけれど見つかりませんでした。残念。

試しに、こんなことを。

<script language=vbscript src='vbscript:CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\a.vbs").ReadAll()'></script>
は出来るのに、

<img src="javascript:var sc=new ActiveXObject('ScriptControl');sc.Language='javascript';var s=sc.Eval('new ActiveXObject(\'ADODB.Stream\')');s.Open();s.Type=1;s.LoadFromFile('C:\\a.gif');s.Read(-1);">
は駄目みたいです。


252:デフォルトの名無しさん
06/09/03 14:11:01
これはできたよ。
<script language="VBScript">
Dim sh
Set sh = CreateObject("Shell.Application")
sh.NameSpace("H:\").CopyHere(sh.NameSpace("H:\test.zip").Items())
</script>


253:252
06/09/03 17:01:52
一応補足。
Zipフォルダが使える環境でないと動かないはず。
逆にエクスプローラでフォルダとして扱えればLHAでもCABでもなんでもいけるはず。


254:デフォルトの名無しさん
06/09/03 17:49:25
>>249
そもそもHTAをのぞけばソース見えちゃうんだし。
テンポラリ漁ってまで見たいような人にはどんな対策をしても無駄だと思うけど。

255:デフォルトの名無しさん
06/09/03 19:23:21
Windows Script Encoder みたいな仕組みはないのかな?

256:デフォルトの名無しさん
06/09/03 20:16:05
<script language=vbscript src='vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll()'></script>
とやると、スクリプトを標準入力/パイプから読み込めるので、スクリプトは隠蔽できるかも。

そもそも隠蔽しなくてよければ、
MSHTA.EXE vbscript:CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll()
で、HTAソース全体を標準入力/パイプで流し込めます。


257:デフォルトの名無しさん
06/09/03 21:30:19
>>252
>Set sh = CreateObject("Shell.Application")
>sh.NameSpace("H:\test.zip")

このやり方は、Windows2000で、エラーになるらしい。cabも。

そういうときは、Explorerのid.Document.Applicationから
Shell.Applicationを取り出して使えばよいと思う。


258:デフォルトの名無しさん
06/09/03 21:31:29
HTAで、ShellNameSpaceが、XP SP2より後の修正で、使えなくなりました。
セキュリティ絡みでしょうか。
これを使うHTAが駄目に。回避方法はないでしょうか?

ADODB.StreamのLoadFromFileも、HTAで、使えません。
「エラー: このコンピュータの安全性の設定により、ほかのドメインのデータ ソースへのアクセスは禁止されています。」
HTML+SCなら使えるのに、なんで? ShellNameSpaceと同じ修正が関係?
使ってる人、多そうなのに大丈夫でしょうか。


259:デフォルトの名無しさん
06/09/09 14:22:17
>>249 に突っ込まないのはこのスレの方針?
IEとHTAとHTABOXの機能をごっちゃにしてるみたいなんだけど。

260:デフォルトの名無しさん
06/09/09 14:59:19
じゃあお前が突っ込めばいいのでは?

261:デフォルトの名無しさん
06/09/09 15:25:12
せっかく静かに流れてたんだからスルーしとこうヨ 

262:258
06/09/09 15:39:27
ShellNameSpace
HTAでは使えなくなりましたが、HTAから出したダイアログ内では使えます。

コントロールが、わざわざダイアログかどうかをチェックして、
ダイアログでなかったら使えないようにすることに、
何かメリットがあるとは思えないので、
よくある、セキュリティ上の問題を回避、軽減する弥縫策でしょうか。

なので、HTAでShellNameSpaceを使うときの回避策は、
HTAからダイアログを出して、その中でShellNameSpaceを使うことです。

ファイルが2つに分かれるのが面白くないので、ひとつで済ます方法を
2パターン考えました。
自身をダイアログで呼び出し、中で切り分ける。
空のダイアログを作って中身を書き換える。
どちらも、使い慣れてないせいか、かなり面倒でした。


263:デフォルトの名無しさん
06/09/18 11:42:58
htaでグーグルマップのAPIを使ったアプリは作成できるのかな。
問題点があるとしたらなんだろう。

264:デフォルトの名無しさん
06/09/18 23:29:30
用途が思いつかないことかな。

265:デフォルトの名無しさん
06/09/21 00:51:04
HTAでframeを使いたいときは、必ずソースファイルのhtmを
用意する必要があるんですかね?

何がしたいかというと、bodyから何から全てスクリプトで動的に
生成していきたいのです。


266:デフォルトの名無しさん
06/09/21 00:53:42
>>265
document.writeしてもだめだったっけ?

267:デフォルトの名無しさん
06/09/21 01:26:07
>>265
>>256みたいに
<frame src=javascript:'HTML記述'>
<frame src=vbscript:"HTML記述">
はどうでしょう。

268:デフォルトの名無しさん
06/09/22 15:27:27
わざわざframe使わなくても,div(或いはtableのtd)の中身を動的に生成するのじゃだめなの?

269:デフォルトの名無しさん
06/09/23 03:17:42
>>266
frame タグの仕様で src に URL を指定しないといけないのですが
そのURLをファイルとして用意する以外に方法はないかと。

で、>>267 さんの提案を試してみましたがなかなかうまくいきません…。
javascript:document.write(...) でいけるかと思ったのですが失敗。

>>268
たとえば、エラーメッセージと本メッセージでスクロール領域を
分けたいのですよね〜。

frame ってXSSの温床になってるせいもあってかセキュリティも厳しくて、
どうも使い勝手がイマイチなのが残念。


270:デフォルトの名無しさん
06/09/23 07:49:37
<div style="overflow:scroll"></div>
でいいやん。

271:デフォルトの名無しさん
06/09/23 09:31:29
俺もframe要らないと思うよ。
frameが無いと出来ないことってほとんど無いだろうし。

272:267
06/09/23 20:28:46
>>265
こんな感じで、ヒントエクスプローラバーをやってみましたが、うまく行きましたよ。
<script>
function source(){return '<'+'html>\r\n'+'<'+'head>\r\n'+'<'+'/head>\r\n'+'<'+'body>\r\n'+'<'+'img src=tips.gif>\r\n'+'<'+'/body>\r\n'+'<'+'/html>\r\n\r\n';}
</script>
<frameset>
<frame src="javascript:parent.source()">
</frameset>


273:デフォルトの名無しさん
06/09/25 23:21:20
皆々さん、ありがとう!
確かに、やろうとしたかったことは fram を使わずにできました。
HTA:APPLICATION タグでスクロールを無効にして、

<div id="result" style="width: 100%; height: 50%; overflow: auto; margin: 0px;"></div>
<hr />
<div id="error" style="width: 100%; height: 50%; overflow: auto; margin: 0px;"></div>

とすれば、ほぼフレームと同じ見た目になりますね!
(枠を移動させるまではできませんが…。もちろんscriptをガリガリ書けばできるでしょうけど。)

それとは別に、>>272さんのワザは勉強になりました。
document.write するんでなくてそのまま評価されるんですね。

ただ、HTMLとしてなら成功しましたが、HTA では「オブジェクトでサポートされていない
プロパティまたはメソッドです。javascript:parent.source()」
とエラーになってしまいました。


274:デフォルトの名無しさん
06/09/25 23:31:53
せきゅりちいゾーンがちがうからね。
>>138 とかすればノーガードになる。


275:デフォルトの名無しさん
06/09/27 00:54:42
>>274さんありがとうございます!

うほっ、そんな属性があったとは。ステキ。
自分もまだまだ勉強不足です。

しかしセキュリティゾーンは面倒だなあ。
Vista/IE7になったらもっと面倒になりそう…。


276:デフォルトの名無しさん
06/10/03 21:54:14
>>243
subst

277:デフォルトの名無しさん
06/10/09 08:04:22

初歩的なことかもしれないけど、教えてください。
やりたいことはフレーム分割をして、それぞれに任意のオブジェクトを配置したいのです。
しかし、タグ解説サイトを見ると、フレームの中身はsrcで指定したhtmlを読ませるだけで
frameset、frameタグを書いたファイル自身で、フレーム内の内容を記述する解説が見つかりません。
もちろんHTAでも外部のhtmlを参照できるのは知っていますが、便宜上1ファイルに纏めたいので
上記のことをやる方法を教えてください。現在はとりあえずフレーム自体は表示されるのですが、
frameタグの中に何を書いても一切表示されません。
VBSはだいぶ前から使っているのですが、GUIを作成する手段としてHTAを使い始めたばかりで
HTML関連を扱うのはこれが始めてなので悪戦苦闘しています。宜しくお願いします。

とりあえずcols="50,*"で<input type="button"/>を左右に一つずつ配置する
サンプルでも書いていただけるとありがたいのですが。

278:デフォルトの名無しさん
06/10/09 08:51:39
>>277

<html>
<head>
<script>
function load() {
    with (frame1.document) {
        open("text/html", "replace");
        write('<html><body><div><input type="button"/></div></body></html>');
        close();
    }
    with (frame2.document) {
        open("text/html", "replace");
        write('<html><body><div><input type="button"/></div></body></html>');
        close();
    }
}
</script>
</head>
<frameset cols="50%,*" onload="load()">
  <frame id="frame1" />
  <frame id="frame2" />
</frameset>
</html>

279:278
06/10/09 08:55:40
一々open()やwrite()使わないで,
frame1.document.body.innerHTML = '<html><body><div><input type="button"/></div></body></html>';
でもよい。

280:277
06/10/09 09:26:00
>>278-279
なるほど、スクリプトで書くわけですか。
どうりでタグ解説サイトを漁っても見つからないわけだ。

とにかく、教えていただいた
document.writeとdocument.body.innerHTMLで
目的は果たせます。ありがとうございました。

281:デフォルトの名無しさん
06/10/11 21:01:01
>>191
関連情報(?)見付けたので投稿してみる
HTAで引数を使う
URLリンク(wscript.name)
 via WSH Lab. 掲示板

282:デフォルトの名無しさん
06/10/13 16:58:04
では、こんなのも。
HTAでコマンドラインの引数を分離するVBScript関数
URLリンク(www.vector.co.jp)


283:デフォルトの名無しさん
06/10/26 18:04:38
コマンドライン引数を分離するVBScript関数ってこれじゃだめなの?
URLリンク(www.microsoft.com)

284:デフォルトの名無しさん
06/10/26 18:55:37
mahta.exe c:\short\path\name\hoge.hta a b c
でやってみて。

285:284
06/10/26 18:58:20
typo
mshta.exe


286:デフォルトの名無しさん
06/10/27 01:17:30
面倒なので別のプログラムにやらせたりしてた。

// arg.js - コンパイル方法: jsc arg.js
import System;
var arg: String[] = Environment.GetCommandLineArgs();
for (var i: int = 1; i < arg.Length; i++)
    Console.WriteLi(arg[i]);


<!-- HTA Sample -->
<html><head><hta:application id="Hta" /><script>
var WshShell = new ActiveXObject("WScript.Shell");
function GetCommandLineArgs() {
    return WshShell.Exec("arg.exe " + Hta.commandLine).StdOut.ReadAll().split(/\r\n/);
}
</script></head><body><dl><dt>Command Line:</dt><script>
var c = GetCommandLineArgs();
for (var i = 0; i < c.length; i++)
    document.write('<dd>' + i + ': ' + c[i] + '</dd>');
</script></body></html>

287:デフォルトの名無しさん
06/10/27 01:19:17
Console.WriteLi → Console.WriteLine

288:デフォルトの名無しさん
06/10/27 14:42:29
VistaとIE7で、HTAの扱いどうなってんの?
背景透過の容易性とか、アクティブデスクトップ機能とかあるんかいな

289:デフォルトの名無しさん
06/10/27 18:20:47
IE7入れて自分の目で確認したらいい。
OSの差は無いから。

290:デフォルトの名無しさん
06/11/08 00:28:14
HTAでAPIとか使わないで画像の合成して書き出しって可能?

291:デフォルトの名無しさん
06/11/08 00:31:54
BMPぐらいならなんとかできるかも?

292:デフォルトの名無しさん
06/11/08 00:35:03
IMGタグとかフィルタとか

293:デフォルトの名無しさん
06/11/08 00:57:39
やっぱADODB.Streamあたりでごりごりやるのかね……

294:デフォルトの名無しさん
06/11/08 01:14:14
ADODB.StreamもAPIだよ。
Win32APIではないけどね。

295:デフォルトの名無しさん
06/11/08 01:19:27
……そう言っちまったら「APIでない」のって何があるんだ……
window配下のオブジェクトツリーだけは「組み込み」ってことで特別扱い?

296:デフォルトの名無しさん
06/11/08 01:45:27
「そう言っちまったら」って…w
COMコンポはどう考えたってAPIとしか言えないだろ。

297:BMPをごりごり書いてみたw
06/11/08 03:21:03
<html><head>
<script language="VBScript">
Dim BmpFileHeader, BmpInfoHeader, BmpImageData
Dim BmpImageWidth, BmpImageHeight, BmpImageLineBytes
BmpFileHeader = Array(66,77, 54,0,0,0, 0,0, 0,0, 54,0,0,0)
BmpInfoHeader = Array(40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
BmpImageData = Array()
Sub SetArrayLong(arr, index, LongNum)
Dim num, i
num = CLng(LongNum)
For i = 0 To 3
arr(index + i) = num Mod &H100
num = num \ &H100
Next
End Sub
Sub SetBmpSize(x, y)
BmpImageWidth = x
BmpImageHeight = y
BmpImageLineBytes = ((x * 3 + 3) \ 4) * 4
SetArrayLong BmpFileHeader, 2, 54 + BmpImageLineBytes * y
SetArrayLong BmpInfoHeader, 4, x
SetArrayLong BmpInfoHeader, 8, y
ReDim BmpImageData(BmpImageLineBytes * y - 1)
End Sub
Sub SetPixel(x, y, r, g, b)
Dim index
index = (BmpImageHeight - y - 1) * BmpImageLineBytes + x * 3
BmpImageData(index) = b
BmpImageData(index+1) = g
BmpImageData(index+2) = r
End Sub


298: ↓  続く         
06/11/08 03:21:41
Sub SaveBmpFile()
Dim strm, i
Set strm = CreateObject("ADODB.Stream")
strm.Type = 2 ' = adTypeText
strm.Charset = "iso-8859-1"
strm.Open
For Each i In BmpFileHeader
strm.WriteText ChrW(i)
Next
For Each i In BmpInfoHeader
strm.WriteText ChrW(i)
Next
For Each i In BmpImageData
strm.WriteText ChrW(i)
Next
strm.SaveToFile "test.bmp", 2
End Sub
Sub Main()
SetBmpSize 32, 32
dim i
for i=0 to 31
SetPixel i,i, 255,0,0
next
SaveBmpFile
End Sub
</script>
</head>
<body><button onclick="Main()">SAVE BMP FILE</button></body>
</html>


299:デフォルトの名無しさん
06/11/08 12:56:57
>>297-298

これ何?

300:デフォルトの名無しさん
06/11/08 13:18:07
BMPファイルを救う

301:デフォルトの名無しさん
06/11/08 14:45:44
普通、VBSやJSで処理が可能かどうか、駄目そうなら他のLLではどうか、
C++や他で作ったDLLを利用するかしないか、
でインターフェイス(GUI)にHTAを選ぶかどうか、ジャマイカ?

302:デフォルトの名無しさん
06/11/08 19:10:47
>>301
そんな普通に考えていたら最終的にHTAを選択する確率は限りなく0に近くなるだろ?
やっぱしHTAに対する盲目的な愛が必要だと思うんだ。

303:デフォルトの名無しさん
06/11/08 20:17:14
大切なことはHTAで何ができるかじゃあない.
我々がHTAのために何をしてあげられるかということなんだ.

304:301
06/11/08 20:40:26
限りなく0...www
AHKにもGUIあるしねぇ。
>>301 のは
『HTAで○○出来る?』っていうの観るとさぁ。萎えるんだ、最近。
トシのせいかな。いや、愛が足りてないのかな?

305:デフォルトの名無しさん
06/11/08 20:42:04
いや単に心の狭い小さな人間だから。

306:290
06/11/08 22:05:53
うぉっ

教えて君でごめんちゃい。
自分で調べても出来そうな方法が見つからなかったけど、
ここの住人の人たちはレベル高そうなんで、
なにか良い方法をしってるかも?と思って軽い気持ちで聞いちゃった。
「API使わないで」ってのは、「DynaCallつかってWin32API」とかって一蹴されそうなんで
入れてみただけなんですよ・・・そんなイジメないで・・・
職場の環境上HTAぐらいしか選択肢がないもんで。

てか、ADODB.Stream使った方法とかすげぇ。
この方法を使うと絵もかけちゃったりするのか、マジ感動。
ほんと勉強になりまっす

HTAで出来ることと出来ないことの切り分けが未熟なんで
迷惑かけてすいませんでした。
自分でももうすこし調べて頑張ってみるよん


307:デフォルトの名無しさん
06/11/08 23:40:14
あれ、HTAでADODB.StreamのLoadFromFileが
エラー: このコンピュータの安全性の設定により、ほかのドメインのデータ ソースへのアクセスは禁止されています。
になりません?
どの設定でしょう?


308:デフォルトの名無しさん
06/11/08 23:46:18
とりあえずさ、エラーが出たらそのエラー文でそのままググる癖付けろよ。
殆どの場合、聞くより早く解決するし、「ググれカス」とか言われずに済む。

309:デフォルトの名無しさん
06/11/08 23:54:34
でも、ローカルのHTAからローカルのファイルにアクセスできないんですよ。
こういう例はググっても出てきませんが。。。


310:デフォルトの名無しさん
06/11/09 00:02:48
もうバカとしか言えないな。
HTAの話でもないし、放置してもいいでしょ。

311:デフォルトの名無しさん
06/11/09 00:20:09
……そう言っちまったら「HTAの話」って何があるんだ……
window配下のオブジェクトツリーだけは「組み込み」ってことで特別扱い?

312:デフォルトの名無しさん
06/11/09 00:28:14
> window配下のオブジェクトツリー
HTML

313:デフォルトの名無しさん
06/11/09 00:28:25
>309
もしかしてノートンとか入れてる?

314:デフォルトの名無しさん
06/11/09 01:23:49
>もしかしてノートンとか入れてる?
入ってます。そのせいでしょうか?


315:デフォルトの名無しさん
06/11/09 10:27:43
よくノートンなんて入れる気になるな

316:デフォルトの名無しさん
06/11/09 10:44:48
スクリプト遮断をオフにしても駄目。
ADODB.Streamには、ScriptBlockingInprocServer32キーがない。
ノートンは関係ないのでは?


317:デフォルトの名無しさん
06/11/09 11:25:29
<?xml version="1.0" encoding="shift_jis"?>
<package>
<component>
<public>
<method name="CreateObject" dispid="0" internalName="xCreateObject" />
</public>
<script language="VBScript"><![CDATA[
Option Explicit
Public Function xCreateObject(ProgID)
Set xCreateObject=CreateObject(ProgID)
End Function
']]></script>
</component>
</package>
というWSCを作って、
<html><head><script language="VBScript">
Sub window_onload()
Set xCreateObject=GetObject("script:" & location.pathname & "\..\CreateObject.WSC")
Set Stream=xCreateObject("ADODB.Stream")
MsgBox TypeName(Stream)
Stream.Open
Stream.Type=2
Stream.Charset="shift_jis"
Stream.LoadFromFile location.pathname
MsgBox Stream.ReadText(-1)
End Sub
</script></head><body></body></html>
てな具合にWSCでCreateObjectさせるとエラーにならないですよ。


318:デフォルトの名無しさん
06/11/09 22:35:29
HTAにドロップするにはレジストリをいじらないといけないと聞きました
他の人に自作のHTAを提供したいのですがレジストリは変えたくないそうです
HTABOXというソフトを使って、exeファイルにドロップして起動できるようになるのでしょうか?
自分の環境はレジストリを変えているので確認できません

319:デフォルトの名無しさん
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の代替手段はあるけど、ちょっと面倒ですね。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4761日前に更新/259 KB
担当:undef