2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

HTABOXコア

1 :デフォルトの名無しさん:2010/03/09(火) 17:13:46
HTABOXコアに関するご要望はこちらへお願いします

2 :hidebou:2010/03/09(火) 17:29:16
現在ウインドウスタイルを操作するAPIの定義を検討中です。
ご意見を伺えれば助かります。



3 :デフォルトの名無しさん:2010/03/09(火) 18:11:41
exeと同じ名前のhta,htmlを読み込むって事だけど、index.htaとかを読み込む方が良いんじゃないでしょうか?
人によると思いますが、自分的に同じ名前を複数存在させるの嫌なんです・・・


4 :デフォルトの名無しさん:2010/03/09(火) 18:19:28
ttp://kuroda.bglb.jp/htabox/

5 :hidebou:2010/03/09(火) 18:46:43
start.iniみたいな定義ファイルを導入して、柔軟な起動ができるように
するというアイディアはどうでしょう?

6 :某330:2010/03/09(火) 18:56:17
残念ながら状況変わらず。

あと、F5 を押すと MSHTA 同等になるざます。
(メニューとか右クリックとかはそのままですが)

7 :hidebou:2010/03/09(火) 19:08:55
えぇ〜!!

8 :hidebou:2010/03/09(火) 19:11:52
認識引数、絶対パス結果をMessageBoxで表示するバージョンを作りますので
しばらくお待ちを。

9 :hidebou:2010/03/09(火) 19:23:19
URL上のLZHを置き換えました。
3回MessaeBoxが表示されると思うのですが、その結果を教えてください。

10 :hidebou:2010/03/09(火) 19:36:57
起動ファイルがないよ状態でhelpからビルド日時も確認してくださいね。

11 :デフォルトの名無しさん:2010/03/09(火) 20:17:27
R:\ 直下に test.exe と test.html を置いた場合。

開始初期CommandLine
"R:\test.exe"

第一引数認識文字列


絶対パス結果文字列


ビルド情報
HTABOX
Mar 9 2010 19:16:08 リリース

12 :hidebou:2010/03/09(火) 20:20:45

起動はコマンドラインでしょうか?それともファイル名を指定でしょうか?





13 :hidebou:2010/03/09(火) 20:32:22
ファイル名を指定で実験したものですから、逆に通常起動で
引数を認識していませんね。明日までの宿題にさせてください。
ご迷惑をおかけします。


14 :hidebou:2010/03/09(火) 21:03:30
html->htlmのタイプミスがありました。LZHを入れ替えました。明日お暇な
時で結構ですから動作をご確認ください。

15 :デフォルトの名無しさん:2010/03/09(火) 21:07:07
ファイラ (あふ) から起動した場合です。
エクスプローラからダブルクリックなどで起動した場合も同様。
コマンドプロンプトから実行した場合はメッセージボックスは一度だけ。

ファイル名を指定して実行の場合は
r:\test r:\test.html

開始初期CommandLine
"r:\test.exe" r:\test.html

第一引数認識文字列
r:\test.html

絶対パス結果文字列
r:\test.html

で正常に起動しました。
引数を指定しない場合はファイラから起動した場合と同様です。

16 :デフォルトの名無しさん:2010/03/09(火) 21:13:08
あー入れ違い。
だいたい正常に起動するようになりましたが、
コマンドプロンプトから引数指定の場合はうまく行きません。

17 :hidebou:2010/03/09(火) 21:26:25
了解しました。さらに修正します。
お詫びに粗品として旧HTABOX256Kスペシャルバージョンを置きます。
ttp://kuroda.bglb.jp/htabox/HTABOX2.lzh


18 :デフォルトの名無しさん:2010/03/09(火) 21:32:16
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

19 :デフォルトの名無しさん:2010/03/09(火) 22:48:38
自分はhtmlからWIN32のGUIが呼び出しているというのに魅力を感じてて、それの機能追加を期待してる。
現状のメニューだけだとちょっとまだ使えないから何も出来ないけど、頑張って下さい。

20 :hidebou:2010/03/09(火) 23:34:29
ありがとうございます。
自分が使う為に作り始めて、こつこつ成長させてきたソフトなんですが、
書いてしまうと書く側のエゴが出てしまうんですね。ここでいろんなご意見
をうかがって、プログラムなんて書いたこと無い人が書いてみようかと思う
環境を作れたらいいなと思っております。

21 :hidebou:2010/03/10(水) 08:29:19
Windowスタイルなんですけど、動作途中で変更する必要はありませんよね。
だった起動時読み込みファイルという概念を導入して、
[STYLE_EX]hoge|hoge;
[STYLE]hoge|hoge;
で設定するだけというのが簡単でいいのではと、
あらゆるAPIは追加可能なんですが、
どっかの外人さんの書いたなんとかみたいに、
単にC++を遠まわしにやるだけっだら意味ないと思うのです。


22 :hidebou:2010/03/10(水) 08:35:15
起動時のスタイル設定の理由はもうひとつあって、
HTABOXコアの場合APIを使えるのは起動後なんです。軽量なHTMLの場合既に
表示された後になるかも知れません。たとえ一瞬でも表示されたスタイルが
変更されるのは美しくないだろうという理由もあります。

23 :hidebou:2010/03/10(水) 08:45:12
start.ini(仮称)を導入すれば、最初にその存在を確認し、宣言してあればその
HTMLを実行するとか、さまざまなオプションを付けることもできます。私は
この方向で行こうと思っているんですが、異論のある方いらっしゃいますか?

24 :デフォルトの名無しさん:2010/03/10(水) 10:17:40
これ純粋にhtmlパースも独自なの?
windowsのコンポーネントに依存しないのなら他のプラットフォームでも稼働するのかな?


25 :hidebou:2010/03/10(水) 10:30:23
実行ファイルの大きさから想像していただけると思いますが、独自パースは
スクリプトのみです。HTMLも独自パースが理想ですが、IEと同じ大きさの
巨大なプロジェクトとなりますので個人では支えきれないと考えています。

26 :hidebou:2010/03/10(水) 10:35:13
拡張子HTML関連のバグ、コマンドライン引数関連のバグを修正しました。
ttp://kuroda.bglb.jp/htabox/HTABOXCORE.lzh

27 :デフォルトの名無しさん:2010/03/10(水) 10:37:31
>>25
速攻の回答ありがと
そうか、他のシステムには移植できないのか。

ieコンポーネントは化け物だからしょうがないかもね(つかffとかもコンポーネントベースになればいいのに)


28 :hidebou:2010/03/10(水) 11:25:33
>>27
そのIEコンポーネントを制限無く扱える手法が無いと感じたものですから
HTABOXコアが誕生したという経緯です。


29 :hidebou:2010/03/10(水) 12:45:30
総務省消防庁の提供する「救急オフラインシステム」が出力するXMLから
任意な事案項目、傷病者項目をデータとして取り出したり、国表統計
月報統計を出力するサービスの準備を開始します。

HTABOXコアをこういったピンポイントなサービスを提供する手段として
捕らえていただければより深いご理解がいただけると思います。


30 :hidebou:2010/03/10(水) 15:15:32
総務省が行政事務のクラウド化を推進するのは結構なことなのですが、自治体にはそれぞれのカラーがありますから、
単純にこの形式のデータを報告してくださいが行われた場合、2重にデータを作成し、突合するという本末転倒な状態
となります。かといって中央官庁が各自治体の御用聞きをおこなってシステムを設計するはずもありません。

私はこの隙間を埋めるソフトウエアサービスを提供することが自分に課せられた使命のひとつだと思っています。

31 :hidebou:2010/03/10(水) 15:42:18
通常ならそんなことは個人では不可能です。
大きな力に押しつぶされるでしょう。
しかしHTABOXシステムはそれを可能にするために書かれたソフトです。

32 :hidebou:2010/03/10(水) 21:50:02
皆さんもいろんな分野で活躍なさっていると思うのですが、その中で感じる矛盾
が、ソフトウエアで解決できるのであれば、どんどん開発して発表してください。
その業務のつらさを知っている人間だけがそこにフィットするソフトを書けるのです。

まだ生まれたばがりのHTABOXコアですが、そんなときの道具になれるよう努力してゆ
きますのでご指導お願いします。



33 :hidebou:2010/03/11(木) 07:49:35
独白スレッドになっていますがお許しください。
「どうしてソース隠すことにこだわるのか?」についてお話します。

答えは「書いた人のアイディアがお金にならなければ人は育たない」と考える
からです。どんなに優れた発想でソフトを作っても大手企業さんがその拡張版
をすぐ出すようでは書いた人の苦労って水の泡ですよね。

もちろん、ソースを公開し共同開発して人類共通の英知とするっていうのも素
晴らしいとは思いますが、それは片手間にそんなことをしても食べていける人
の場合で、少なくとも私にそんな余裕はありません。

34 :hidebou:2010/03/11(木) 08:34:59
アイディアを思いついたユーザーがネイティブコンパイラを扱える方なら何も
いらないのですが、そうじゃないユーザーのアイディアをいかに簡単に具現化
して、保護するかというテーマで考えた結果が「HTML Applicationでソース隠
蔽」だったわけです。

でも旧HTABOXではMSHTA.EXEの壁を越えられず、最終的に名前パイプ経由とい
う消極的な手法しかとれませんでした。これはデバッガでこそ見えないものの
オブジェクトの単純GETで関数コードが見えてしまいます。

MSHTA.EXEを自分で書ければその問題を解決できるのは明白でしたが当時の私
にそのスキルはありませんでした。

35 :hidebou:2010/03/11(木) 08:52:42
旧HTABOXは、私にとって敗北の象徴となりました。最も目にしたくないもので
あり、この世から消し去りたい事実となったのです。

HTABOXシステムとかHTABOXコアというネーミングはHTABOXという検索で旧HTABOX
の事がヒットしないようにという単純な理由です。勿論、現状の隠蔽手法にも穴
が発見される可能性はありますが、だったらこうすればという対策を直ぐ発想で
きるとこまで研究したつもりです。

36 :hidebou:2010/03/11(木) 14:34:19
誰でもプログラムを書き始めた当初はソースさえ難解なら見えたところで簡単
には流用できないだろうと思うものです。しかし、十分に経験を積むとアルゴ
リズムは無視して、結局「どのCOMまたはどのAPIを使っているのか」を見るだ
けで内容が推察できるようになります。

そいう観点から見た場合ソースが長大で難解に書かれていたとしても目くらま
しにはなりません。また、ネイティブコンパイラの場合リリース前に配布EXE
をメモ帳で眺め、要所となる手続きが推察不能であることを確認すべきです。

37 :hidebou:2010/03/11(木) 14:54:36
HTABOXコアのエンコード機能で実現したいことは
「書いた人の汗が報われる」
というごく当たり前でフェアなルールを導入しましょうということです。

38 :hidebou:2010/03/11(木) 19:57:59
HTABOXサーバーを使わなくてもHTABOXコアだけで今までの概念を打ち破るソ
フトの配布形態、ビジネスモデルを実現できることを説明します。

HTABOXコアでフレームアプリケーションを作成し、子フレームをURL上のもの
とします。サーバーには認証を設定せず、フルスペックなフリーソフトとして
Vectorに投稿します。サーバーのログを監視すればユーザーの利用状況が判り
ます。リリース当初はユーザーからの報告でバグフィクスが必要となりますが
サーバー上のファイルを更新するだけで即座に対応することができます。

つまり、リリースしながら手元にあるという状態を作り出すことができます。

39 :hidebou:2010/03/11(木) 20:12:10
十分に広報活動が行われたと判断した場合、サーバー上の既存ファイルをスペ
ックダウンさせ、フルスペックの機能が必要であれば別のソフトをダウンロー
ドするように促します。別のソフトの内容は当初のフルスペックバージョンで
あり、子フレームURLには認証を設定します。あとはアカウントを販売するだけ
です。

従来の静的配布ではフルスペックを配布した後に制限を加えるなどということは
できませんが、HTABOXコアならあたりまえのように実現できます。Vectorで何を
基準にソフトを審査しているのかは知りませんが、少なくとも一部をURL上の子
フレームとしている私のHTABOXエンコーダーが承認されていることは事実です。

40 :hidebou:2010/03/11(木) 23:32:44
寝る前に一言書かせてください。

HTABOXコアはMSHTA.EXEとは比べ物にならないくらい自由度が高い環境です。
逆な観点から言えばそれを使用する側の強い倫理観が求められます。もし、
この技術が悪用されるなら個々のHTABOXコアにシリアルを埋め込んで名前を
固定し申請がなければ使用できない状態にせざるを得ないでしょう。

私は決してそんな日は来ないと信じています。



41 :hidebou:2010/03/12(金) 06:13:40
長々と書いてしまいましたが、私がHTABOXコアに興味を持っていただいた方に
是非知っていただきたい事は書かせていただきました。

今一番重要なのは、実際にこの環境を使ったサービスが成功するのか否かです
から、しばらくはHTABOXコアを使った具体的サービスプログラムの作成に重心
を置きたいと考えています。このスレッドに直ぐレスポンスできないかも知れ
ませんがお許しください。

もっと荒れるかと思ったのですが、つまらないつぶやきにお付き合いいただい
てありがとうございました。

ttp://kuroda.bglb.jp/

42 :デフォルトの名無しさん:2010/03/12(金) 16:34:03
プログラムの事は、殆どよくわからないのですが、hidebouさんの思い、
言葉を目にし、HTABOXコアがいかに魅力的なソフトであるかが伝わって
きました。
HTABOXコアの誕生によって、多くのプログラマーの汗が報われる事を願って
やみません。hidebouさんのサービスプログラムの成功を、心から期待して
おります。


43 :hidebou:2010/03/12(金) 19:46:39
>>42
もう50才になろうとする爺ですが、爺になると開き直りの境地の達します。
万人からアホ呼ばわりされたとしても、たった一人の方の心に残る何かを
残せたらそれでいいじゃないかと...

ですから少し泣かせてください。ありがとう!。


44 :hidebou:2010/03/13(土) 16:38:31
今書いている「救急オフラインユーティリティー」に気が入らないのですこし
つぶやかせてください。テーマは「C++とスクリプト」になるでしょうか。

バイナリの再利用というと響きはいいですが、要は他人の褌でいかに相撲をと
るかの工夫なわけです。C++が一般的になる前は「関数」がライブラリを形成
していたわけですが、「クラス」という概念を導入し単一アドレスへの問い合
わせで他言語からもバイナリモジュールをコールできるようにしたのがCOMだと
理解しています。

45 :hidebou:2010/03/13(土) 16:50:41
ですからIDispatchのようなクラスをコールする動作でプログラムが形成され
ていた場合、その実行速度はどんな言語でもほぼ同一となります。これは
Microsoft Office系のオブジェクトをC++で操作したところで早くならないこ
とから理解できると思います。こういう動作は主にスクリプトで書くべきです。

46 :hidebou:2010/03/13(土) 17:08:32
ただし、APIコールがループで繰り返されるようなケースでは個々のAPIがCOM
でラップされていた場合「そういう名前あります?」「ああIDはこれですよ」
「じゃそのIDでInvokeしますね」が繰り返されるわけですから、膨大な時間
リソースを消費します。それはC++で書くべきでしょうとなるわけです。


47 :hidebou:2010/03/13(土) 17:33:09
話は変わりますが、スクリプトよりC++の方がバグの発生率は少なくなります。
スクリプトではVARIANTのvtしか型を限定する要素がありませんが、C++では明
確な型宣言が必要ですので、勘違いがおこりにくいのです。久しぶりに目にす
るソースファイルにたいしたコメントが無くても即座に修正作業に入れます。

C++でWIN32アプリを書くと痛感するのですがGUIの形成は地獄絵図になります。
「メインウインドウにボタンを一個置いてクリックしたらダイアログを表示し
ましょう」というプログラムを書きながら「onclick="hoge()"」で済む世界が
天上の世界に思えるのです。

48 :hidebou:2010/03/13(土) 17:41:03
一番楽なプログラミング環境はC++です。だけどGUI形成はDHTMLでささっと
済ませてしまいたい。という発想でHTABOXコアを眺めていただければ、狂気
乱舞する方がいらっしゃると思うんですが、だめですかね。

49 :hidebou:2010/03/14(日) 03:52:46
寝てる時にふと思ったんですが、C++向けには
Microsoft Script Control
msscript.ocx:{0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}
の機能にプラスしてHTML解釈によりGUIが形成できるCOMDLLを提供すると
喜んでもらえるんでしょうか?
HTABOXコアがやってる事の順番変えるだけで供給できるんですが。


50 :hidebou:2010/03/14(日) 04:16:11
Microsoft純正プログラム眺めていると、GUIはリソースのHTMLでささっと済ま
せている場合が見受けられますよね。要はそれと同じ事をWIN32環境でできる
ようにすれば.....ということはCOMDLLよりスタティックリンクできるライブ
ラリの方がいいかも知れませんね。
今のところ余裕が無いのですぐ設計するわけにはいきませんが。

51 :hidebou:2010/03/14(日) 10:52:22
話題が変わりますが、私が何よりも重大な問題だと考えていることについてお
話します。「プログラミング新規参入者の減少」についてです。

私の住んでいる田舎の場合、どこの書店でも売れない本は置きません。ここ数
年で開発言語系の書籍は激減しました。プログラミングしたいという人はWWW
経由で調べてるからという理由ならいいでしょうが、現実は違うと思います。

52 :hidebou:2010/03/14(日) 11:05:42
私はシャープのポケコンでプログラミングに興味を持って現在に至るのですが
当時はそこでちょっとしたゲームとかを書くと、それは誰も見たことがない最
先端テクノロジーですので「凄い!」になるわけです。その後業務用OSである
PTOSでBASICをいじり、MS-DOS、Windows、とプラットフォームが変化してゆく
歴史を目撃しているわけですが、今までいかに不自由だったかという理由を踏
まえると納得できる規格の変化も、いきなり新たな規格を突きつけられた人間
には理解できないという現象が生じています。

53 :hidebou:2010/03/14(日) 11:17:23
Windows以前、ひとつのプログラムはコンピューターを占有しました。つまり
他のプログラムは今動いているプログラムを停止しない限り起動できませんで
した。その代わり、ディスプレイもキーボードも自分が好きなようにコントロ
ールできますから、今のようにWindowsから肩を叩かれて動く配慮は必要なか
ったのです。プログラム特に業務で使うものは現場で作るものという風潮が
まだ残っていたと思います。事実私のような人間でもちょっと本を読めば実用
的なプログラムが書けたのです。

54 :hidebou:2010/03/14(日) 11:26:25
同時に複数のプログラムを動かして、アクティブなタスクを切り替えたい。と
いう欲求はごく自然な流れです。今までキーボードは直接のハードウェア割り
込みだったものが、そうは行かなくなります。CPUは結局ひとつのストーリー
しか理解しませんから、常駐する親プログラムがキーボードを監視して、どの
プログラム向けに入力されたものかを子プログラムへ通知する必要が生じるの
です。これがWindowsメッセージです。

55 :hidebou:2010/03/14(日) 11:41:45
CとC++についても全く同じような事が言えます。Cは言語というよりもアセン
ブラをもっと使いやすくしましょうという規格として存在しました。重要なの
はこの時主導権を持っていたのはANSIという営利とは関係の無い協会であった
ことです。規格が定まればバイナリのライブラリは共有できる資源となります
ので、結果的にプログラマーはハードウェアを意識せず標準関数を使いプログ
ラムが書けるのです。

56 :hidebou:2010/03/14(日) 11:51:47
Cの誕生は劇的に生産効率を向上させましたが、大規模なプロジェクトの場合
名前の衝突が頻繁に発生します。Cでの名前は最終的にただのアドレスに変換
されるマークなのですが、リンク中に名前の衝突が起これば致命的な破綻と
なります。複数の人間がひとつのプロジェクトに関わる場合、自分が使える
名前の範囲をペーパーで確認するといった作業が必要になるわけです。

C++のクラス、名前空間はそれを解決する素晴らしい英知なわけですが、その
苦労を知っていない、若しくは想像できない人間にとって、これほど煩わしい
ものは無いわけです。

57 :hidebou:2010/03/14(日) 12:03:08
javaの誕生は新たなステージの幕開けでした。仮想マシンという規格層を設け
そこに向かって動的なバイナリモジュール呼び出しをしようとするものです。
実行時の名前解決ですので、ソースコードに名前情報が含まれ、ソースが暴か
れるという欠点はあるのですが、人間も賢くなったものだなぁーと思いました。
Java裁判がおこるまでは...

58 :hidebou:2010/03/14(日) 12:20:22
結局どんな理屈をこねようが、企業間の抗争の根底にあるのはマネーです。
Microsoft社のJava仮想マシンはSUNのそれを完全に凌駕していました。当然
Windowsには同社しか知りえない情報があるわけですから当然です。
悲劇は起こりました。正統な英知の集積であるJ++は息の根を絶たれることに
なってしまいました。高速なJavaという夢はこれで終わったのです。

59 :hidebou:2010/03/14(日) 12:37:55
その後のWndowsにおけるプログラミング環境のグダグダはご存知のとおりです。
Microsoft社は所詮メインの開発プラットホームにはなり得ない仮想マシンを
意地になって開発し続けます。それにかかるコストを回収しようとあたかも
最高のものであるかのようにコマーシャルし続けます。結果的にユーザーは
プログラミングそのものに失望し、現状に至っているというのが私的分析です。



60 :hidebou:2010/03/14(日) 12:50:43
誰でも最初はプログラミングなんて何のことだか解りません。大切なのは私
がポケコンでゲームを書いた時のように、ちょっとした自作プログラムに自身
が感動できるか、友人が「凄い!」と言ってくれるかだと思います。

私の息子達もそうなのですが、プログラミング=ビデオゲームだと思ってい
ます。また、WWWの発達によって何でも目にできますから地味なアプリケーシ
ョンを見せても「何これ?」になるわけです。開発環境に対する情報はめちゃ
くちゃ、苦労して書いても誰も見向きもしない。開発環境を誤ればソースコード
は丸見え。これで「さあプログラミングしましょう」と声高に叫んでも、
若い人がついてくるわけありません。


61 :デフォルトの名無しさん:2010/03/14(日) 12:54:48
確かにWindows上でネイティブアプリ並に高速な
Java VMが存在していたらならば
かなり歴史は変わっていたでしょうねぇ
.NET Frameworkが産まれなかったかも

62 :hidebou:2010/03/14(日) 13:07:41
HTABOXコアはそんな現状に対する私にとって精一杯の抵抗なんです。
大げさに聞こえるかも知れませんが、この国は若者たちの英知無しでは滅び
ます。

どんな些細なプログラムでも自分が使って便利だと思えるツールは誰かが喜んで
くれます。「ありがとう」という声は必ず作り手のパワーとなります。

いかにそれが虚しく空を切ろうが、私は死ぬまで叫び続けようと思います。
「さあプログラミングしましょう」

63 :hidebou:2010/03/14(日) 13:10:18
>>61
こんなスレに目をとめてくれてありがとう。

64 :デフォルトの名無しさん:2010/03/14(日) 13:13:38
>>63
いえいえ、手軽にGUIを構築できるHTABOXには期待しています

65 :hidebou:2010/03/14(日) 23:51:36
ソースもバグだらけなら日本語も不自由なんですが、明らかに間違っているので
訂正させてください。
57:ソースコードに名前情報が含まれ->クラスファイルに名前情報が含まれ




66 :hidebou:2010/03/15(月) 01:57:42
寝苦しくて起きてしまったので爺さんの戯言にお付き合いください。
「私が抱いている具体的な構想」についてです。

こんな環境を提供したところで、みんなが急にプログラム書き始めるとは思っ
ていません。プログラムを発表できる場を提供することが絶対必要だろうと
考えています。今までの私の断片的な書き込みから想像できると思いますが、
「プログラムの100円ショップ」を実現したいんです。


67 :hidebou:2010/03/15(月) 02:12:29
変な話ですけど皆さんの時給っていくらですか?
単純に労力が金額に換算できるとすれば、本来1時間かかる面倒な作業をその
プログラムで回避できればその時給分の価値があるはずですよね。実際にオー
ダーメイドの業務アプリケーションなら結果的にコストダウンだと判断されれ
ば導入されるはずです。

日常のツールでそれを主張しても受け入れられないでしょうから「100円」が
いいのではないかと考えています。



68 :hidebou:2010/03/15(月) 02:35:14
本当にちょっとしたツール例えば「HTMLタグ名だけを全部小文字に統一」みた
いなのが沢山あって、手作業じゃ面倒だし、安かったらお金で解決しちゃおう
というニーズに答えるシステム作りをしたいんです。

HTABOXシステムは実行時のプログラム配布を実現できますので、場合によって
は「使っただけ課金」というシステムにすることもできます。

69 :hidebou:2010/03/15(月) 02:51:43
私はクラウドがもたらす本当の恩恵ってそういう事じゃないのかなって思うん
です。従来は静的に配布される高機能なエディタの正規表現機能を使って小文
字に変換するしかなく、結局お金も時間もかかったわけですが、そういった用
途のためのツール群がオンライン上にあって必要な時にチョイスできる状態。

プログラムを投稿する側もエディタ全体を設計して競い合う必要はなく、自分
が得意とする分野のアクションで個性を発揮し、確実に収益が上がる状態。

私がおぼろげながらも、目指しているのはそんな未来なんです。

70 :hidebou:2010/03/15(月) 03:11:13
そこで才能を開花させる若者が出てきて、レクサスの一番高いのに乗って
「プログラム書くってステータスの高い仕事なんだ」と世間が気づけば
後に続く人も出て、私の仕事も一段落なのかなぁっと思っています。

71 :hidebou:2010/03/15(月) 03:26:27
話がすごくあっちこっちに飛躍しちゃいましたが、このスレッド本来の目的
であることろの「HTABOXコアに対するご意見ご要望」を気兼ねなくお寄せく
ださい。

「プログラムは書いたことがないんですが」という方のご意見ほど貴重な
ものはないと考えております。そういう方をメインターゲットに書いたツ
ールなんですから。

72 :デフォルトの名無しさん:2010/03/17(水) 01:54:05
プログラムはちょっとかじった程度なんやけどなんかすごいことしているようで
まーなにはともあれ体壊さんようにがんばったってや〜

73 :hidebou:2010/03/17(水) 08:21:27
>>72
私は3年間このことだけ考えて、このことだけ見つめてきたわけですので、
どこか感覚がズレてないかをここで確かめたいという気がしてるんです。
暖かいお言葉ありがとう!

74 :hidebou:2010/03/17(水) 23:19:33
ちょっとだけスレ違いな話をさせてください。
テーマは「ソースコードの美しさとは」になるでしょうか。

私にとって至福な時間というのは、自身が書いたソースコードに見惚れてい
るときです。決して動作にホレボレするのではなく、ソースコードなのです。
ただし、その美しさは「機能美」でなければなりません。美術彫刻は確かに
美しいわけですが、機能が存在しないという点で物足りなさを感じます。


75 :hidebou:2010/03/17(水) 23:34:09
例えば「レーサー」とか「航空機」とか、ある目的のために研ぎ澄まされて
結果的に美しいという形の方に心を奪われます。プログラムで言えば「速度」
です。

世の中には「アーティスティックな美しいコード」のために存在する言語も
あるそうですが、そういうことは「美術」か「文学」の世界で論じるべきこ
とであって、最終的に情報処理の手段にすぎないプログラミングコードに
速度を犠牲にした美しさを求めるなどナンセンスです。

今夜は庄内平野も久しぶりに雪景色です。

76 :hidebou:2010/03/18(木) 10:52:00
スタート時にウインドウを最大化する場合のサンプルです。「救急オフラインユーティリティー」
の部分は各自のアプリケーションタイトルに置き換えてくださいね。

<script language=javascript onreadystatechange="">
window.onCreate = function()
{
var WM_SYSCOMMAND = 0x0112;
var SC_MAXIMIZE = 0xF030;

var Hwnd = WIN32.FindWindow("HTML Application Host Window Class", "救急オフラインユーティリティー");
if(Hwnd != 0) WIN32.SendMessage(Hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
}
</script>


77 :hidebou:2010/03/18(木) 11:30:14
今までスクリプトしか書かなかった方はWM_SYSCOMMANDやSC_MAXIMIZEの定数が
どこから出てきたのか不思議に思うかも知れませんが、WINUSER.Hにこの辺の
定数はずらりと書いてあります。ということは、無料版のVC++をダウンロード
してWIN32SDKのヘッダを眺めているだけでもずいぶんと賢くなれることを意味
します。

78 :hidebou:2010/03/18(木) 12:10:45
例えばこういう動作をwindow.Maximize()にして最初から実装すれば?という
意見が生じるのはごもっともなんですが、一旦決めた「規格」は動かしがた
いものになります。

不親切に感じるかも知れませんが、できるだけWIN32APIのイメージのまま実装し、
各ユーザーの好みで、関数としてくくってもらう方が望ましいと考えています。

79 :hidebou:2010/03/18(木) 15:32:42
なぜJScriptしかサポートしないのかという理由は、C++のコードへ移植しやす
いからです。アルゴリズムをスクリプトで考えてそのままVC++のソースへ貼り
付け、型宣言を変えることはよくやります。勿論その逆もありです。

なんでVBScriptはサポートしないの?っていう声があれば技術的には何の問題
もなくサポートできるんですが、VBScriptじゃないと書けないという方はいら
っしゃるのでしょうか?

80 :デフォルトの名無しさん:2010/03/18(木) 19:03:46
プログラム初心者です、プログラマー目指すまでの情熱はないですが
エクセルVBAから入って、vb、vbscriptなどほんの少しかじりました

結構そういう方は多いのかなと思いますがどうなんでしょ?

最初にvb系から入ってしまうと、{}や行の最後の;などの表記のある言語に違和感を
覚えてしまいます

81 :hidebou:2010/03/18(木) 20:10:21
>>80
了解しました。改良点としてVBScriptでのエンコードを課題とします。

82 :hidebou:2010/03/18(木) 20:16:40
現状で改善すべき課題と考えていることをまとめておきます。
「旧HTABOXのようにファイルを単一EXEにできること(リソース格納)」
「メインウインドウのスタイルをコントロールできるようにすること」
「VBScriptのスクリプトブロックでもエンコードできること」


83 :hidebou:2010/03/18(木) 21:22:18
IEにはDHTML Behaviorというのがあってあまり需要はないかも知れませんが
GDIで単純な図形をスクリプトから描けたらいいかなぁと思っています。
LineTo(x, y)みたいな関数があって、描画結果をバッファリングで保持。
小学生なんかが喜んでくれるんじゃないかなぁっと思うんです。


84 :hidebou:2010/03/19(金) 04:05:36
IEにはVMLがあるのを忘れてました。あれをスクリプトで操作しやすいように
ブリッジするものを作ればいいわけですよね。

85 :hidebou:2010/03/19(金) 04:32:02
知っている人は知っているから今更なんですが、私がHTML Applicationを書く
手法を紹介します。「MSE7.EXEの活用法」です。

Microsoft Office2000以降にはスクリプトエディタが存在します。2000の場合
は確かMSE.EXEでそれ以降はMSE7.EXEですよね。ただし標準ではインストール
されないので、完全インストールしてofficeがインストールされたフォルダを
眺めると必ずいらっしゃいます。

86 :hidebou:2010/03/19(金) 04:38:43
これは単独で起動できますので、ディスクトップにショートカットを作成しま
す。また、WORDやEXCELのEXEがあるフォルダの親を見るとMseNewFileItemsと
いうフォルダがありますが、ここにはMSE7がファイルを新規作成する場合の
テンプレートが存在し、デフォルトではcharset=UTF-8のHTMLとなっています。

87 :hidebou:2010/03/19(金) 04:48:47
MSE7.EXEを起動します。新規作成->ファイル->HTMLページを行います。
HTML Page1.htmがメモリ上に作成されます。編集画面を右クリックすると
ページのプロパティーを変更するダイアログが表示されますので、私の場合
HTML3.2 -> HTML 4.0、UTF-8 -> shift-jis、VBScript -> JavaScript
に変更して先ほどのテンプレートファイルHTMLPAGE.HTMを上書きします。
一旦MSE7.EXEを終了して再度起動します。

88 :hidebou:2010/03/19(金) 04:58:10
もう一度新規作成->ファイル->HTMLページを行います。今度は先ほどテンプレ
ートを置き換えましたので、自分の望むキャラクタセットのHTMLなはずです。

HTMLの適当な位置にカーソルを置き、編集->スクリプトブロックの挿入->クライアント
を行うとスクリプトブロックが挿入されます。作成されたスクリプトブロック
内にカーソルを置きCTRL + jを押してください。知らなかった人は感動の涙
にむせぶと思います。


89 :hidebou:2010/03/19(金) 05:08:21
適当なスクリプトを書いて、ブレークポイント(停止したい位置)でF9を押し
行の左に赤丸が付いた状態とします。デバッグ->開始やF5でHTMLを開始します。
MSE7の場合は未保存だから保存しますか?ときかれるのでyesと答えます。
ソースコードはブレークポイントで停止しますので、デバッグ、クイックウォッチ
等で変数の状態や場合によってはdocumentと入力して全体の状態を確認します。
この画面を見て知らなかった人はもう一度涙を流すはずです。


90 :hidebou:2010/03/19(金) 05:14:15
忘れてましたが、IEメニューからツール->インターネットオプション->詳細設定
->スクリプトのデバッグを使用しない がデフォルトではオンですので、チェック
をオフにしないと停止しませんから事前にオフにしておいてください。

91 :hidebou:2010/03/19(金) 05:22:39
また、デバッグで停止しているソースは基本的に変更できず、デバッグを停止
又は最後まで実行しないと、他のアプリが動かないほどリソースを消費する事
に注意してください。これでwindowやdocumentから芋ずる式に全てのオブジェ
クトの状態を眺めているのと、手探りでコーディングしているのとではハイテ
ク兵器と竹やりほどの差が生まれると思います。

92 :hidebou:2010/03/19(金) 05:34:22
HTABOXコアはTABLEのIDがMENUならWIN32メニューを生成しますが、この編集
画面上ではテーブルがそのまま行列に見えるので、メニューのイメージどお
りなわけです。onclickが設定してWIN32APIを使わなければMSE7の状態でデバ
ッグできます。

実はここでHTABOXコアをActiveXObjectするとWIN32APIが使えるのですが、
当然EXECOMサーバーとしてHTABOXコアをレジストリ登録しなければなりま
せんので今のところ非公開機能としています。

93 :hidebou:2010/03/19(金) 06:07:02
IE8には標準でデバッガがついているようでしたが、自分の会社のMSDNも見れ
ないブラウザでしたので、私はIE8そのものを使った事がありません。

94 :hidebou:2010/03/19(金) 07:06:08
MSE7.EXEはHTMLをデバッグする目的で存在しますので、ADSI関連のスクリプ
トだったりするとインスタンスの生成そのものがエラーとなりますが、スク
リプトをHTML中のブロックではなく単独JSとして作成し、開けばコードヘル
パーが効いた状態となります。ブレークポイントはCSCRIPT.EXEの規則に則る
必要があるのですが、面倒なときはわざとエラー行を書くとMSE7.EXEがデバ
ッガとして起動します。



95 :hidebou:2010/03/19(金) 07:24:04
MSE7.EXEは同じofficeのバージョンでもOSやIEのバージョンで振る舞いがすこ
し違うことにも注意が必要ですから、ご自身の環境でファイルの拡張子をhta
にしてみたりして動作を確認してください。

私が「HTML Applicationは生産性が高い」と考える最大の理由はこのMSE7.EXE
が存在することなのです。「救急オフラインユーティリティー」は250Kほどの
ファイルですが、MSE7.EXEが無かったらC++で全部書いた方がメンテナンスしや
すいという判断をしたでしょう。

96 :hidebou:2010/03/19(金) 16:57:23
MSE7.EXEについて簡単な情報ページを
ttp://www5a.biglobe.ne.jp/~javajava/ari/
に作成しました。もしMicrosoft Officeをお持ちの方でMSE7.EXEを使ったこと
が無いという場合は一見していただければ概要を理解していただけると思います。

MSE7.EXEはHTML用のVisual Studioなんです。

97 :hidebou:2010/03/19(金) 22:31:04
誤解がないように「単一EXE」手法について報告します。HTABOXコアはCD等の
書き込み不能媒体で配布されても動作することをガイドラインとしています。
したがって単一EXE格納はすべてリソース格納したres://経由とする予定です。
また、この機能はエンコードを同時に行われると考えています。

98 :hidebou:2010/03/20(土) 00:01:14
どうも書き込んだあとに日本語不自由なことに気づいてすいません。

ですから旧HTABOXのように何でもかんでも格納できるものにはなりません。
SRCでパスを指定するものなら格納してリソース参照に置き換えられると考
えています。


99 :hidebou:2010/03/20(土) 07:42:08
現時点での構想では
エンコード動作時にソースHTML、画像等、アイコンをリソース格納し、
エンコード済みのHTABOXコアは著作保護の為に再利用できないという
ルールがいいのではないかと考えています。

100 :デフォルトの名無しさん:2010/03/20(土) 11:10:47
ホームページのリニュアールおめでとうございます。興味深く読ませていただき
ました。昨今、書店ではプログラムに関する書籍も減り、為になる書籍を手にす
ることが少なくなりました。hidebouさんのホ-ムページは、とても参考になりました。


101 :hidebou:2010/03/20(土) 11:32:20
>>100
ありがとうございます。
VMLで思い出したのですが現状ではエンコードすると<html>タグをHTABOXコア
で生成するためVML無効になってますね。
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns="http://www.w3.org/TR/REC-html40">
は決まり文句みたいなので出来るだけ早く対応したいと思います。

102 :hidebou:2010/03/20(土) 21:33:33
こんな小さなモジュールでもリリースした時は、私のPCの上だけで幻を見ていて
「動かないよ!」「エラー後にPCが不調だよ!」「こんなん使えないよ!」の
嵐になるんじゃないかとうなされていたのですが、暖かく見守っていただいて
ありがとうございます。

前職では若くしてお亡くなりになる方を多く見たものですから、この年まで生
きることができ、しかも私の書いたものに興味を持っていただける幸運に感謝
しております。

103 :hidebou:2010/03/21(日) 11:56:14
VML使用のHTMLエンコードに対応しました。バージョン1.30を呼称します。
ttp://kuroda.bglb.jp/htabox/htaboxcore.lzh
サーバーが返すエンコードの仕様もやや変更されましたので
バージョン1.20以前のエンコーダーはサポート外となります。

104 :hidebou:2010/03/21(日) 12:14:23
VMLはIEの独自規格のグラフィック描画規格ですが、HTML Applicationの場合
IE以外のエンジンで動かすことは無いわけですので積極的に使用すべきです。
FrontPageやMSWORDでHTMLをデザインすればワードアートやオートシェイプを
画像ファイル無しに使用することができます。

105 :hidebou:2010/03/21(日) 16:39:42
ん〜ん。せっかくFrontPageでワードアートのあるページを作成してもMSE7が
余計な変換を自動的に行うものですから痛し痒しのジレンマに陥りますね。
FronPage内のMSE7ならそれは起こらないのですが、今度はActiveXできない。
逆にMSE7でベースを作成し、最後の装飾としてワードアートを追加するのは
ありかもしれません。

106 :hidebou:2010/03/22(月) 09:53:55
バージョン1.20ではHTMLタグのinnerHTMLだけをエンコードしていたのですが、
1.30ではソースコード全体をエンコードし<html encode='true'></html>の中
に保存しています。したがってVML等HTMLタグのアトリビュートが必要な場合
でも破綻しないことになります。また、HTMLタグの外に何かが書いてあった
場合もそのまま反映されます。

107 :hidebou:2010/03/22(月) 11:29:55
いよいよ兵糧が底をついたので、しばらくビジネスに専念します。
「救急オフラインユーティリティー」はあまりにベタな名称なので
「Medical information analysis system for ambulances」の頭文字をとって
MIASAサービスと名づけました。HTABOXシステムはクライアントCPUで動く
オンラインサービスを実現できますので20K程のGETにレスポンスするだけで
250Kを超えるスクリプトを認証付きでコントロールできるはずです。

ttp://kuroda.bglb.jp/miasa/index.htm


108 :デフォルトの名無しさん:2010/03/22(月) 12:26:35
疑問なのですが、どうして html タグをエンコード時に残しているのでしょうか。
そもそも、なぜテキストベースでバイナリデータではないのでしょうか。

109 :hidebou:2010/03/22(月) 17:12:31
>>108
「html タグをエンコード時に残している」のは<html xmlns:v="....をそのま
ま再現する必要からです。
「バイナリデータではない」のはHTTP経由で破綻しないこと、HTML中のコメン
トとしても破綻しないが要求されるからです。

110 :hidebou:2010/03/22(月) 17:18:03
大変素晴らしい質問に、不自由な日本語でお答えしてすいません。
回答が的を得ていない場合は気兼ねなく質問してください。

111 :hidebou:2010/03/23(火) 10:27:44
結局VMLがらみで私のとった選択は
MSWORDにVMLを置きPNG代替オプションオンでフィルター後HTMLを出力し、
生成された画像フォルダからPNGをコピーしMSE7で<IMG>参照するという
先祖がえりした手法になりました。静的なVMLはこれが一番確実ですね。

112 :hidebou:2010/03/23(火) 23:35:19
HTABOXシステムは非力なネットワーク環境、非力なサーバーを有効活用しよう
という思想の元に開発したのですが、>>38で説明したようにHTABOXコアだけで
も自宅サーバーでビジネスができます。

私なりの小規模サーバーに対する考え方を説明します。参考になる部分もある
かも知れません。

113 :hidebou:2010/03/23(火) 23:39:26
前職では通信関係つまり119番通報を受ける部署にいたこともあるのですが、
絶対に中断が許されない業務の場合「現有」「予備」という二重体制をしき
ます。この場合「予備」は非常用ですのでやや能力が劣ってもかまいません。

114 :hidebou:2010/03/23(火) 23:46:59
自宅でサーバーを運用する場合もビジネスであるなら必ず「現有」「予備」
の体制をしくべきです。私の場合はNECが投売りした14kのサーバーを迷わず
2台購入しました。若干のオプションを加えても50kにおつりがありました。
現在は実験機と本番機という扱いですが、将来は両者を定期的に同期し、
障害がなくとも切り替えて、有事に備えることになります。


115 :hidebou:2010/03/23(火) 23:54:25
回線も二つ契約しています。ひとつは家庭用でひとつは業務用ですが、ルータ
はNTT純正のものとし、プロバイダ、回線、ルータに障害が発生した場合は
単純につなぎ変えて80番を開ければ対応できるようにしています。こういった
柔軟な対応が可能なのはダイナミックDNSを選択しているからです。

116 :hidebou:2010/03/24(水) 00:07:47
サーバーでネットワークサービスを提供する場合、障害が発生した場合の
シュミレーションは大変重要ですし、復旧にかかる時間を短縮する最も単
純で確実な手法が「安いのもを2つ用意する」ことだと考えています。

117 :hidebou:2010/03/24(水) 08:55:40
蛇足になりますが、私は古い人間なので枯れたソフトしか使いません。
具体的には非.NETであることをガイドラインとしています。
オークションでWindows2000ServerやSQL2000Serverがあったら是非確保して
情報が存在するうちにその取り扱いを研究することをお勧めします。

118 :hidebou:2010/03/24(水) 22:28:39
ついでですから、私がなぜサーバーサイドからの動的なプログラムの配布にこ
だわるのかについてお話します。テーマは「実行権は誰のものか?」です。

従来の静的に配布されたなアプリケーションの認証は、認証前と認証後のバイ
ナリを比較検討されてしまえば、必ずクラックされる運命にあります。しかも
WWWの普及によって、たった一人のクラッカーがそれを発見すれば、瞬く間に
その手法は周知の事実となってしまいます。

119 :hidebou:2010/03/24(水) 22:41:02
私が思うに、これを解決する方法は「サーバーのレスポンスがなければ完全な
実行体とならないプログラムを配布すること」だと考えます。
今までもソフトウエアの多くは「販売」ではなく「ライセンスの供与」だった
わけですが、実際にその契約形態は絵に書いた餅でライセンスを供与した側が
「今日から使っちゃだめ!」と言ったところで意味を成さなかったわけです。

120 :hidebou:2010/03/24(水) 22:53:53
「実行を許可」する権利を製作者が保持できなければ、本当の意味でのライセ
ンス契約は成立しませんから、今後のソフトウエア配布は総てHTABOXコアのよ
うなものになって行くと考えます。使う側からしてみれば息苦しく感じるかも
知れませんが、結局、いくばくかの収益が上がらなければソフトウエアは生ま
れませんし、しつこいようですが、それを目指す「人」も育ちません。

121 :hidebou:2010/03/25(木) 01:54:55
やがてコンピューターにキーボードが付いていたという事が昔話になるでしょ
う。そのこと自体は必然でしょうが、そのプログラミング環境規格は単に企業
の利害で決定されてしまうでしょう。中間言語やスクリプトでどんなに優れた
アプリケーションを書いても、直ぐにそのエッセンスを横取りされるでしょう。
私がどんなにあがいてもそんな未来がそこまで来ています。




122 :hidebou:2010/03/25(木) 22:05:52
スクリプトでアプリケーションを書くときに最も重要な情報はCOMのタイプラ
イブラリ情報です。通常はMSE7のオブジェクトブラウザでひとつの定数とか
関数を眺めるしかないわけですが、複数のオブジェクトが絡み合う場合、全体
像が見えないと混乱します。私は自分でタイプライブラリ解析ツールを書いて
結果をソースに貼り付けてスクリプトを書きます。scrrun.dllのデータです。
ttp://www5a.biglobe.ne.jp/~javajava/ari/Scripting.txt

123 :hidebou:2010/03/25(木) 22:20:56
Scripting.txtを見てもらえば解りますが、IDispatchインターフェースの継承
クラスには、GetTypeInfo(UINT as itinfo, UI4 as lcid, VOID as pptinfo) return VOID
が存在します。スクリプトからこれを呼び出すことはできませんが、C++なら
ITypeInfoポインターからこの情報を引き出すことができます。

124 :hidebou:2010/03/25(木) 22:36:58
私はこの情報ファイル無しにスクリプトを書けません。これが無いと誰かのス
クリプトを丸写ししてなんとか動くけど、その理由はさっぱり解らないという
状態になると思います。今書いているものが一段落したらタイプライブラリ解
析サービスも開始しようと考えています。
msxml3.dllです。眺めているとプログラムのアイディアが浮かんでくるかも?

ttp://www5a.biglobe.ne.jp/~javajava/ari/MSXML2.txt

125 :hidebou:2010/03/26(金) 06:34:31
この2つのタイプライブラリはほとんど総てのアプリケーションに必須な存在
だと思います。特にXMLは劇的にスクリプトを設計しやすくします。

単純な例として自分のPCの全ファイル情報を一旦取得し、あるアプリケーショ
ンがインストールされた後と比較するプログラムを書くとしましょう。

126 :hidebou:2010/03/26(金) 06:42:05
通常は情報を構造体に保持して再帰的に検索したりするわけですが、作成途中
で、構造体が正しく情報を保持しているのかを確認したくなります。

この時設計の段階から構造体ではなくXMLDOMにデータを保存すれば、saveする
だけで全情報を確認できますし、データの永続化にもなります。また、特定の
条件のファイルを検索する場合もXPathを指定した柔軟な条件設定ができます。

127 :hidebou:2010/03/26(金) 06:55:12
この辺の考え方やテクニックをこれからHTML Applicationを書き始める人向け
に解説して公開することは重要だろうと考えています。正直そういった解説が
なかったので、HTML Applicationは書きやすいはずなのに、情報が無くて使え
ない手法。悪い言い方をすればアンダーグラウンドな手法と思われているのだ
と思います。



128 : ◆grDYeooZwg :2010/03/26(金) 08:49:59
一応、dojoで3D描画とかグラフを描画できるライブラリとかあるけど・・・。
3D
http://svn.dojotoolkit.org/src/tags/release-1.4.3/dojox/gfx3d/tests/test_cube.html
ドローソフト
http://svn.dojotoolkit.org/src/tags/release-1.4.3/dojox/drawing/tests/
グラフ
http://svn.dojotoolkit.org/src/tags/release-1.4.3/dojox/charting/tests/

Flashを使わないのがミソ。たしか、VMLやShilverLightを使っていたと思った。(FFではSVG)
http://svn.dojotoolkit.org/src/tags/release-1.4.3/dojox/charting/tests/test_chart2d_updating.html
アニメーションもできるぞ。

129 :hidebou:2010/03/27(土) 04:15:39
>>128
貴重な情報をありがとうございました。参考にさせていただきます。
それぞれの分野で突き詰めた研究をしている方もいるものだと改めて感心しま
した。いつか子供たちがプログラミングに興味を持つきっかけとなるような簡
単なグラフィック命令系を追加できればと夢見ております。

130 :hidebou:2010/03/27(土) 04:28:03
小学校の図書室にプログラミング入門みたいな本があったのですが、子供たち
が数値演算や文字列置き換えなんかに興味を示すはずがありませんから、グラ
フィック系の単純なプログラムを解説していました。しかしそれは既に絶滅した
N88-BASICでのプログラミングだったのです。

131 :hidebou:2010/03/27(土) 04:34:03
私はその事実を知っていろいろな事を考えさせられました。
教員に開発言語の推移を理解する能力があるのか?必要なのか?
プログラミングという概念を理解するだけならその本は有益なのか?
しかし、どう考えても実践不可能なサンプルを目を輝かせた子供たちが見るか
と思うと、胸が痛みました。IEがあるかぎり有効な、単純なグラフィック命令
を作って子供たちに提供したいという想いはそんな動機なのです。

132 :hidebou:2010/03/27(土) 15:55:43
私は辛辣な言葉で小学校におけるコンピューター教育の現状を批判する文字列
を書いて、投稿せず削除しました。理由は投稿しても意味が無いからです。

いつか子供たちが自分で作った落ちゲーやシューティングを友達とワイワイ
言いながら書き換えている姿を見たいと思いますし、それを可能にする環境
作りも私の使命だと考えています。


133 :デフォルトの名無しさん:2010/03/28(日) 16:58:56
初心者向け新言語 Small Basic スレ
http://pc12.2ch.net/test/read.cgi/tech/1256536933/

これはまだ日本語版が無いしhidebou氏がお嫌いらしい.netベースだから難しいね

134 :hidebou:2010/03/28(日) 18:03:02
>>133
貴重な情報をありがとうございました。
いろんなアプローチがあることは大変いいことだと思います。
HTABOXコアは初心者がとっつきやすくという事と、玄人が使えるということを
両立させたいという方向性で考えています。これは難しいことなんですけれど
小窓からWIN32APIやCOMの仕組みが見える状態がいいのかなぁっと思います。


135 :デフォルトの名無しさん:2010/03/28(日) 19:25:42
昔はよかった…
ttp://kmaebashi.com/zakki/lang0003.html

いっその事この人みたいに新しい言語を作っちゃうのも面白いかも

136 :hidebou:2010/03/28(日) 21:07:17
>>135
とても興味深いサイトですね。
「言語から」という発想は魅力的ですが、最後はC++やってもらいたいなぁっと
いうのが私のスタンスになるでしょうか。HTABOXコアの特色はWEBプログラミン
グとローカルなプログラミングを融合させようという試みでもあります。
HTMLとJavaScriptを習得すればWEBページも書けますよね。最もずるい方法が
これじゃないかなぁっと思うんです。

137 :hidebou:2010/03/29(月) 09:35:45
HTML Applicationは「ずるい」よりも「反則技」という表現が適当かも知れ
ません。初期XPの「アプリケーションの追加と削除」はこれで書かれていた
ほどOS機能の一部だったわけですが、書きやすく強力なものですから悪用さ
れて今日に至っているわけです。

138 :hidebou:2010/03/29(月) 09:49:24
HTABOXコアはEXEの起動を基点としますが、「書きやすく強力」が再び「悪用」
につながる可能性が無いとは言い切れません。その場合Windows環境全体に及
ぼす被害は甚大なものになるだろうと予測されます。その意味からエンコード
動作は私のサーバーで制御できる状態としていますし、今後はアカウント登録
したユーザーのみが利用できるサービスとなる予定です。

139 :hidebou:2010/03/29(月) 14:38:21
また話題が変わってしまいますが、多くの書籍でC++を紹介する場合iostream
を使ったプログラミングを行うわけですが、あれは入門者に混乱をもたらすだ
けで、むしろ入門者を蹴落とすトラップに思えてしまいます。

C++は演算子を再定義して自分が使いやすい言語を作れる言語と表現すること
ができると思います。iostreamの構造は確かに対称的で美しいのですが、私は
必要だと思った事はありません。誰かが作った一つの例とて眺めるだけです。

140 :hidebou:2010/03/29(月) 14:49:25
オブジェクト指向の解説に至っては殆どの書籍が間違っています。入門者が
抽象クラスを最初から設計できるはずがありません。まず「猫」というクラス
を書き、次に「犬」というクラスを書きます。そこで同じ事を二度書いている
部分に気づくはずです。つまり複数の具象クラスを書いて、そのメンテナンス
が容易ではないことを理解できれば、共通点である「哺乳類」クラスの必要性
を感じるはずです。

141 :hidebou:2010/03/29(月) 15:24:48
抽象化とは単に同じ事を何度も書かない工夫と捕らえて差し支えないと思い
ます。「哺乳類」クラスがあれば新たな「虎」クラスは最小限のコーディング
で済みますし、すべての具象クラスに新たなメソッドを追加する場合でも基底
クラスが知りえる情報で処理可能ならば「哺乳類」クラスに追加するだけで
済むからです。


142 :hidebou:2010/03/29(月) 15:34:12
今は貧乏暇無しで、そんな余裕はないのですが、仮称「逆説C/C++解説」みた
いなサイトを書いてみたいと思っています。ちょっとした言い回しの違いで
本来労力やミスを軽減するために存在するC++の規格が難解で使いにくいもの
と誤解されているケースがあるように思うからです。

143 :hidebou:2010/03/29(月) 19:53:41
どうも読み返すと意味が変なこと書いちゃってますね。
140:は「オブジェクト指向の解説」->「クラス継承の解説」です。
お詫びして訂正いたします。

144 :hidebou:2010/03/30(火) 09:24:55
話のついでですから「オブジェクト指向」についてなんですが、これは難しく
考える必要は全く無くて「単にコピペしやすから」と考えれば素直に受け入れ
られると思うんです。

個人のプロジェクトでクラス定義をヘッダファイルにして本体と分ける必要は
ありませんからclass hoge{};の中に全部を書けば貼り付けることが容易です。

145 :hidebou:2010/03/30(火) 09:47:04
JScriptの場合、例えばファイル入出力オブジェクトを作れば、こまごまとし
た関数を選んで貼り付けるよりもオブジェクトをコピペしてReadとかWriteな
んていう直感的な名前のメソッドを呼んだ方が可読性が向上しますし、
オブジェクトのバグが発覚して修正を行った場合も、それを使用する他のプロ
ジェクトへ貼り付け易いわけです。

146 :hidebou:2010/03/30(火) 10:05:10
プログラマーは「どれだけ横着ができるか」という事に貪欲でなければなら
ないと思うんです。そうでないとコーディングテクニックは向上しませんし、
結局、長大なプロジェクトになった時、自分が作ったスパゲッティーで具合
が悪くなってしまいます。(多分に自戒の意味を込めて)

147 :hidebou:2010/03/31(水) 15:49:24
HTMLダイアログの表示でダイアログ自体の生成に時間がかかる場合、IEアイ
コンがそのまま表示されてしまう現象を認識しました。サンプルにあるよう
なそっけないダイアログでは発生しないようです。これはちょっと原因の
究明に時間がかかるかもしれませんが次のマイナーアップデートで対応した
いと考えています。


148 :デフォルトの名無しさん:2010/04/01(木) 17:13:19
C++はさぁ、一番最初に

#include ...
#include ... // この辺は簡単に理解できる

using namespace std; // まったく理解不能

int main() // Cで関数の知識が無いと理解不能
{
 cout << "Hello World!" << endl; // いきなり行儀の悪い演算子オーバーロード、まったく理解不能。
                  // しかもまともな説明なしであっさり通り過ぎる
}


初心者は拒絶反応起こすって

149 :デフォルトの名無しさん:2010/04/01(木) 17:20:24
jsから入ったからmainとかはわかる
includeも、そこにそのファイルの中身を挿入するんだろ?

でもusing namespace std;はさっぱりわからんわ。

150 :デフォルトの名無しさん:2010/04/02(金) 22:26:26
JavaScriptでWindowsアプリ作成というのはNILScriptと似てるな
http://pc12.2ch.net/test/read.cgi/tech/1270139718/

151 :hidebou:2010/04/03(土) 08:40:44
test

152 :hidebou:2010/04/03(土) 08:56:34
いつもの接続プロバイダがアクセス禁止対象となっていたので面食らってし
まいました。

using namespaceは文字通り「名前空間を使いますよ」なわけですが、私は本
番ソースコードでこれを使いません。例えばstd::stringと書いた方が読みや
すいからです。名前の衝突が起こらなければそもそも名前空間を使う必要も
ないわけですが、Cで大きなプロジェクトを書くと変数や関数に直感的な名前
を付けたつもりが、既に使われていて、新たな名前を作ることが可読性を低
下させる場合は便利な規格です。


153 :hidebou:2010/04/03(土) 09:18:40
>>150
私の欠点は自分が興味を持った事へはとことんダイブするんですが、他の方が
何を書いているのかを全く知らないことです。ここでこういう貴重な情報を教
えていただけると大変助かります。ありがとうございました。
NILScriptについてはこれから勉強させていただきます。

HTABOXコアのスタートはMSHTA.EXEの置き換えな訳ですが、歴代のMSHTA.EXE
はそのサイズから想像できるように「Hello World」程度のことしかしていま
せん。ならば「Hello World」プラスアルファ程度のコードでHTML Application
をより自由なものにできるという実に横着な発想なわけです。

154 :hidebou:2010/04/03(土) 09:36:26
この横着には私なりの戦略がこめられていて、OSが変移しようがIEが存在すれ
ば動くことを意味します。プログラムをリリースして、それがミドルウエアで
ある場合、サポートする総てのOSを手元においてテストする必要があるわけで
すが、MSHTA.EXEの為に用意されている環境プラスアルファなら枕を高くして
眠れるだろうという安直さで書かれています。

155 :hidebou:2010/04/03(土) 22:42:38
今回はbiglobe山形がアク禁になった代わりにASAHIがアク禁解除になったので
こうして書き込みできていますが、両方アウトならダンマリになってしまいま
すね。私は携帯電話という物が大嫌いですから息子にでも頼んでここに事情を
報告するしかないでしょうね。

でもこうして他人のサーバーに好き勝手なことを書いて、多くの方が目を通し
ていただけること自体には感謝しています。2chって素敵な文化だと思います。

156 :hidebou:2010/04/04(日) 23:49:42
これからWindows上でプログラミングを書こうと思っていらっしゃる方向けに
私が思う最短経路を説明したいと思います。勿論、遠回りがいけない事である
とは思いません。私自身何年も遠回りをしたのでこういう意見を持つことがで
きたのは事実ですから、いろいろな手法を体験し早期にその長所、短所を見抜
く事が理想ですが、老いぼれの独り言とお許しください。

157 :hidebou:2010/04/05(月) 00:02:13
アプリケーションはユーザーの操作を認識する手段を持たなければなりません。
そうでない物も存在しますが、多くの場合操作対象のファイルパスやURLや処理
におけるオプション等を実行前に指定してもらうためのユーザーインターフェ
ースが必要です。これは皆さんが見慣れているメニューやボタンです。

これは多くの開発環境で見た目通りに部品をドラッグして作成できますが、一旦
作成したデータを再利用しようとすると、使いにくい事に気づきます。最悪の
場合、自動的に生成された位置情報データがクラッシュし、最初から作り直さ
なければならない状況に陥ります。


158 :hidebou:2010/04/05(月) 00:11:18
かと言って、総てのコントロールをソフトウエア的にソースで生成しようとす
ると一旦実行して見た目を確認し、数値を変化させてまた見た目を確認すると
いう作業を総てのコントロールについて行わなければならず、これも非効率的
です。
HTMLエディタでWEBページとしてユーザーインターフェースを設計すればこの
問題をスマートに解決できます。

159 :hidebou:2010/04/05(月) 00:25:14
HTMLに関する知識は貴方が世界に向かって何かを発信する時に必ず必要になる
知識でもあります。なぜなら、貴方の作ったプログラムを実行する前にそれを
紹介する貴方のWEBページが評価されるからです。

HTMLに関する情報を収集する場合、情報の発信用に他のブラウザを対象とする
のかアプリケーション用にIEのみを対象とするのかの判別をすることは重要で
す。officeが完全インストールしてあれば\1041\HTMLREF.CHMが存在しますから
ディスクトップにショートカットを作成して常に参照できるようにすべきです。

160 :hidebou:2010/04/05(月) 00:36:42
アプリケーションの動作を記述するのは多くの場合スクリプトで足ります。
「scd56jp.exe」で検索しWindows Script V5.6 ドキュメントを入手してく
ださい。これも即座に参照できるようディスクトップにショートカットを
作成すべきです。

スクリプトに関する情報を収集する場合、HTTP経由の制約されたセキュリ
ティー環境なのか、HTAやHTABOXコアのように自由にファイル入出力が許
されている環境なのかを認識することは重要です。

161 :hidebou:2010/04/05(月) 00:52:28
スクリプトはWindowsに存在するCOMコンポーネントを呼び出す事によって多く
の複雑な処理を簡潔な記述で行う事ができます。ファイル入出力、XML、HTTP
データベース、ADSI、メール送受信....etc この時、是非COMのタイプライブラ
リを俯瞰してください。その情報を提供する努力を私も行います。

162 :hidebou:2010/04/05(月) 01:06:05
最後に既存のCOMコンポーネントでは実現できない機能を必要とした場合、
オリジナルなCOMDLLをC++で作成してください。HTABOXコアの場合はレジス
トリに登録する必要のないプライベートコンポーネントのDLLでも機能します。

C++のソースコードを不安なく書けるようになるには確かに時間が必要かも
知れませんが、速度や柔軟性の面において最良のパフォーマンスを発揮する
ことができます。既存のCOMでは逆に考えれば「こういう機能が必要」と予測
されている領域から出ることができませんが、WIN32APIを探検すれば誰も
見たことの無いマジックを披露することもできるでしょう。

163 :hidebou:2010/04/05(月) 01:39:09
最後に今後はアプリケーションをリリースする場合、サーバーをコントロール
するテクニックが問われる時代となります。従来は一旦リリースしてしまえば
駟馬も追う能わずで製作者側が不利なものでも取り消しは効きませんでしたが
サーバーに紐を付けた状態でリリースすれば、リアルタイムでコントロール可
能です。

164 :hidebou:2010/04/06(火) 09:14:06
毎度の事ですが読み返すと不自由な日本語ですいません。
私ごとですが、スランプに陥っています。ただただ休みたいというのが本心で
すが、それでは干上がってしまいますのでエンコード後のデバッグという辛い
作業をしなければなりません。何か私が考える以上にエンコード後には制約が
存在するようです。解りしだいご報告します。




165 :hidebou:2010/04/06(火) 11:10:13
まず、エンコード後にdocument.charsetがunicodeになってしまう問題の解決
策ですが、非エンコードスクリプトブロックで明示的にshift_jisを指定して
ください。

<script language="javascript" onreadystatechange="">
document.charset = "shift_jis";
</script>

166 :hidebou:2010/04/06(火) 11:19:03
この問題を考えながら気づいたんですが、document.charsetはなぜか公式解説
であるHTMLREF.CHMには存在しませんね。この場合IE7のタイプライブラリを
確認することになりました。ちょとサイズ大きいのですがIE7のタイプライブ
ラリを置きます。

ttp://www5a.biglobe.ne.jp/~javajava/ari/MSHTML.txt

167 :hidebou:2010/04/06(火) 14:03:12
このタイプライブラリにおける
「MSHTML.HTMLDocument」がdocumentのディスパッチです。ここに
PROPERTYPUT HTMLDocument.charset return BSTR
PROPERTYGET HTMLDocument.charset return BSTR
が存在するので読み書き可能な文字列プロパティーとしてcharsetが存在する
ことがわかります。 




168 :hidebou:2010/04/06(火) 22:22:41
エンコードスクリプトのデコード完了をソースでどう認識するかについて考
えました。onreadystatechangeで非同期にデコードしていますので内部から
イベントを発生させるには荷が重いので、デコード完了の証としてonreadystatechange
に空文字がセットされる規則としたいと思います。結果的に以下のソースで
デコードの完了を認識できる事になります。
<script language=javascript onreadystatechange="">
document.charset = "shift_jis";
window.onload = function()
{
//いずれかのスクリプトタグのonreadystatechangeにSYSTEM文字列が存在すれば0.5秒後に再検定
for(var c = 0; c < document.scripts.length; c++)
{
if(new String(document.scripts.item(c).onreadystatechange).indexOf("SYSTEM") != -1)
{
setTimeout("window.onload()", 500);
return;
}
}
alert("ok");
}
</script>

169 :hidebou:2010/04/06(火) 22:31:53
現バージョンではデコード前にonreadystatechange=""を実施していますので
デコード後に実施するように変更します。上記ソースのalert("ok");の部分を
エンコードスクリプトブロック中の任意関数呼び出しに置き換える事ができる
わけです。これによりユーザーの操作を待たずともグローバルに参照するオブ
ジェクトを無警告でActiveXObject生成することができます。

170 :hidebou:2010/04/07(水) 16:17:14
現状のエンコード規則は生成されたオブジェクトのvtが9の場合関数呼び出し
以外のInvokeを禁止しているのですが、これだと自由度がなくてコーディング
しにくいですね。typeofでfunctionが返された場合のみ厳格にして全体に緩い
規則に変更しようと思います。

ところでVBScriptはmainという関数があってもalert(main)とできませんから
もともとソース見えにくいという認識でよろしいのでしょうか?

171 :デフォルトの名無しさん:2010/04/07(水) 17:04:17
>>160
WSHの最新バージョンは5.8なのにドキュメントが更新されてないって変だよなぁ

172 :hidebou:2010/04/07(水) 19:19:26
>>171
まったく個人的な推測ですが強力すぎるからWSHを使って欲しくないと考えて
いるんだと思います。もっとおとなしい方法を使ってほしいんでしょうね。


173 :hidebou:2010/04/08(木) 10:51:21
ですからcscript.exe、wscript.exe、mshta.exeがWindowsに付属しなくなる日
が来てもおかしくないと考えています。HTABOXコアはその日に備えた対策という
意味もこめられています。

174 :hidebou:2010/04/08(木) 16:15:29
隠蔽コード関数中にwindow.showModalDialogという表現をするとエラーとなり
windowを省略したshowModalDialogという表現だとエラーとなりません。
美しくない仕様ですが、今のところ許容していただくしか無いようです。

175 :hidebou:2010/04/09(金) 06:30:18
ダイアログのスクリプトをエンコードした場合dialogArgumentsの扱いにミス
がありました。再構築時に読み取り専用であるdialogArgumentsを退避させて
別名参照させる時に同名大文字変数としていましたが、この局面では大小の
文字は区別されていないので読み取り専用への書き込みと判断されて致命的
なエラーで停止します。ちゃんと別名にすることで解決できたようです。

176 :hidebou:2010/04/09(金) 06:46:39
ダイアログに関してもうひとつ注意点ですが、メインウインドウが非アクティブ
になった原因がHTMLダイアログの表示であった場合HWNDを捕捉して制御すると
いうアルゴリズムですから、ダイアログ中のActiveXで警告ダイアログが表示さ
れた場合は非アクティブになった原因が警告ダイアログとなるので制御しません。
現時点でこれは仕様ということにします。


177 :hidebou:2010/04/09(金) 22:33:45
174:の問題はIDispatchExのまま制御することで解決できそうです。
関数をIDispatchExのまま制御すればオブジェクト内の関数も同じ扱いで制御
できるので、従来オブジェクトの参照や列挙まで制限していたものを緩め、
関数コードのみを保護できそうです。

178 :hidebou:2010/04/10(土) 10:03:14
隠蔽スクリプトブロックは隠蔽という目的以外にもActiveX警告ダイアログ
を表示させない目的でも使えます。例えばエンコードスクリプトグローバル
var FSO = new ActiveXObject("Scripting.FileSystemObject");
が評価されても警告ダイアログは表示されず、初期化された変数FSOへの参照
はあらゆるスコープから有効です。

ただし、button等のHTMLエレメントonclickで直接代入を行う変数は遅延出現
する前に解決されるので非エンコードブロックで宣言しなければなりません。
関数呼び出しの場合こういった配慮は必要ありません。

179 :hidebou:2010/04/10(土) 13:25:38
VBScriptはJavaやC++と同時に眺めるとめまいがするので一切書かない人だっ
たのですが、改めて言語仕様を眺めてみるとなかなか興味深いですね。
特にClassのTerminateイベントは魅力的です。JScriptではデストラクタが書
けないのでこれは羨ましい。VBScriptにはソースを暴露するtoString()も無い
わけですから私自身VBScriptを再評価すべきかもと思っています。

180 :デフォルトの名無しさん:2010/04/10(土) 17:27:56
VBScriptのクラスはプライベートメンバーが使えるのもいいよね
継承をサポートしてないのが糞だけど元になったVBにも無いから仕方ない
(VB.NETなら継承使える)

JScriptは
delete Function.prototype.toString;
を最初に入れとけばソース表示されないよ

181 :hidebou:2010/04/10(土) 17:45:11
>>180
「継承できない」なるほど気づきませんでした。
delete Function.prototype.toString;も大変賢い方法だと思います。
別インスタンスからtoStringを復元されないかを実験したいと思います。


182 :hidebou:2010/04/10(土) 18:14:27
delete Function.prototype.toStringは宣言したHTML中では有効ですが攻撃者
がダイアログを追加し、有効なtoStringを追加するとソースを見ることができ
るようです。実験に使用した用本体側HTMLとダイアログ側HTMLを書き込みます。

183 :hidebou:2010/04/10(土) 18:15:12
<html>
<head>
<meta name="vs_targetSchema" content="HTML 4.0">
<meta name="vs_defaultClientScript" content="JavaScript">
<title></title>
<meta NAME="GENERATOR" Content="Microsoft Visual Studio">
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=shift_jis">
</head>
<body>
<INPUT type="button" value="main" ID=Button1 onclick="main()">
<INPUT type="button" value="crack" ID=Button2 onclick="crack()">
<script language=javascript>
delete Function.prototype.toString;
function test()
{
alert("naisho");
}
function main()
{
alert(test);
}
function crack()
{
window.showModalDialog("crack.htm", test);
}
</script>
</body>
</html>


184 :hidebou:2010/04/10(土) 18:16:22
<html>
<head>
<meta name="vs_targetSchema" content="HTML 4.0">
<meta name="vs_defaultClientScript" content="JavaScript">
<title></title>
<meta NAME="GENERATOR" Content="Microsoft Visual Studio">
<meta HTTP-EQUIV="Content-Type" content="text/html; charset=shift_jis">
</head>
<body>
<script language=javascript>
var func = dialogArguments;
func.toString = Function.prototype.toString;
alert(func);
</script>
</body>
</html>


185 :デフォルトの名無しさん:2010/04/10(土) 19:49:44
それって本体側HTMLも改変しなきゃいけないんじゃ?
そんなことができるならdelete文を削除したほうが速そう

関係ないけど.htaってなんでコンテキストメニューに編集が無いの?
うっかり項目を追加するスクリプトを作っちまった
new ActiveXObject("WScript.Shell").RegWrite("HKCU\\Software\\Classes\\htafile\\shell\\edit\\command\\", "Notepad.exe %1", "REG_EXPAND_SZ");

186 :hidebou:2010/04/10(土) 19:49:59
ここでのポイントはダイアログ側での
func.toString = Function.prototype.toString;
な訳ですが、これをできなくしているのがHTABOXコアの隠蔽原理です。
toStringを踏み潰した後にDISPATCH_METHOD以外は無視するよう言い聞かせて
おけばプロパティーの追加は不可能になるからです。



187 :hidebou:2010/04/10(土) 19:55:39
>>185
確かに実際には「delete文を削除」は有効ですが、エンコードされた後にと
いうイメージで実験させてもらいました。ダイアログの追加は改編というよ
り単なる追加で可能だからです。

188 :hidebou:2010/04/10(土) 20:03:14
>>185
HTABOXコアでは右クリックを無視していますが、右クリック動作を書いて
メニューを表示させるというアイディアは思いつきませんでした。今後の
課題としたいと思います。

189 :デフォルトの名無しさん:2010/04/10(土) 20:17:42
これってプロセスをサスペンドして全メモリ領域からスクリプトっぽい文字列を検索すればソースが読めちゃったりしないの?

190 :デフォルトの名無しさん:2010/04/10(土) 20:41:15
>>188
HTML5はmenu要素でコンテキストメニューを作れるらしいね
いつIEで使えるようになるかは知らないけど

http://www.html5.jp/tag/elements/menu.html

191 :hidebou:2010/04/10(土) 20:53:36
>>189
とてもいい質問だと思いますが、詳しくお答えできないという立場をご理解
ください。
>>190
HTML5ならIE9で可能となるのかも知れませんね。私の眠っているVISTAを復活
させる必要があります。

192 :hidebou:2010/04/11(日) 09:54:26
エンコードスクリプトからダイアログを呼び出す場合、引数に具体的オブジェ
クトを渡すよりもdocument全体を渡した方が安全のようです。
ダイアログ側で引数オブジェクトを変数格納する場合非エンコードブロックで
var OBJ = dialogArguments.Script.OBJ;
とScriptを介した参照で変数を作成し以降は当該変数への操作とするとエラー
となりません。

193 :デフォルトの名無しさん:2010/04/11(日) 17:07:19
プログラムのことはさっぱり分かりませんが、旧HTABOXを以前から見ていた者です。

スレが伸びているのを機に、HTAをゼロから覚えたいと思います。


194 :hidebou:2010/04/11(日) 17:47:40
>>193
HTML ApplicationはHTMLを書くという最も重要な技術をアプリケーションに
発展できる素晴らしい手法です。楽しみながら学習してください。

何か解決できない事があったらttp://kuroda.bglb.jp/の掲示板にでも書き込
んでいただければ、お力になれるかも知れません。

195 :hidebou:2010/04/11(日) 18:03:22
エンコーダー以外の実践的アプリケーションを書いていなかったものですから
実際にダイアログを使ったり、ソース内にオブジェクトがあったりするケース
での煮詰めが甘かった事を痛感する日々でしたが、ここに呟いた留意点をドキ
ュメントに追加してバージョン1.40をリリースする予定です。
1.40は「実践的なエンコードルールの確立」と位置づけています。

196 :hidebou:2010/04/11(日) 23:36:58
ダイアログのスクリプトグローバルに
var SYSTEM_MENUE = true;
が宣言されていた場合、最大化最小化ボタンを付加することとさせてください。
これをダイアログのスクリプトスコープから行おうとすると複数のWIN32関数
を追加しなければならず、取り扱いが煩雑になるという理由からです。



197 :hidebou:2010/04/11(日) 23:40:50
タイプミスがありました。
SYSTEM_MENUE -> SYSTEM_MENU
です。いつもよく確認もせず書き込んですいません。

198 :hidebou:2010/04/12(月) 16:07:31
MSE7.EXEによるタイプライブラリの確認方法とActiveXドラッグによる自動
コード生成方法についての説明を追加しました。officeをお持ちでまだ利用
したことがない方は是非ご覧になってください。

ttp://www5a.biglobe.ne.jp/~javajava/ari/Page0002.htm

199 :hidebou:2010/04/12(月) 16:27:37
実は今日の午前中はtdc.ocxが特定のパターンの時だけハングする現象に悩ま
されました。原因はCharSetプロパティーはデフォルトで空であり適確な設定
例えば"shift_jis"が設定されていないと不安定であるという事実でした。

MSE7.EXEでコードをドラッグ生成するとデフォルト値を確認できますので原因
の究明がスムーズだったというわけです。

200 :hidebou:2010/04/13(火) 12:00:41
本日中には1.40のドキュメントを書き上げてリリースしたいと思います。
モードレスダイアログをアプリケーションウインドウのように扱えますから
よりプログラミングの自由度が増すのではないかと考えています。

しかし、毎回思うのですがプログラミングは楽しいのに説明を書くのは苦手
です。くどい説明がいらないようなプログラムを書くというのは理想ですが
なかなかそうもいきません。解りにくかったらどんどんダメダシしてください。

201 :hidebou:2010/04/13(火) 15:53:02
バージョン1.40の準備が整いました。
ttp://kuroda.bglb.jp/htabox/htaboxcore.lzh
ドキュメント(取説)が長くなってきたのでメニューを追加しました。変更点
は「ダイアログの表示」「ソース隠蔽実験」「エンコード時の留意点」を
ご覧いただければ判るかと思います。また、sampleのtest4.htmにダイアログ
へのシステムメニューを追加したデモがありますので是非ご覧ください。


202 :デフォルトの名無しさん:2010/04/13(火) 17:13:53
>>200
仕様をあれこれ考えてる時も楽しいけど
実装する時にはいろいろ妥協が必要なこともあったり

203 :hidebou:2010/04/13(火) 17:42:05
>>202
自分のためのツールだったらとことん尖がっていてもいいんですが、リリース
して使っていただくとなるとその妥協点を見出すことの連続になりますね。
こういったツールって「独りよがり」が一番の敵だと思っています。

204 :hidebou:2010/04/13(火) 19:36:12
XPのIE7環境で実験してるんですが、親のキャプションにモードレスを重ねて
ダイアログをクローズすると親のキャプションの色が抜けてしまいますね。
WM_CLOSEで親へ再描画を促す処理を加えてみたいと思います。

205 :hidebou:2010/04/13(火) 20:11:29
逆ですね。ダイアログが表示されても親がアクティブなのでおかしくなるとい
う解釈が正しいようです。解決のためにすこし実験プログラムを書く必要があ
りそうです。

206 :hidebou:2010/04/13(火) 20:29:11
ダイアログの加工が終わるまで一旦SW_HIDEしてSW_SHOWしていた事が原因でし
た。気づいてみれば本来アクティブなダイアログを非表示としてしまえば親が
アクティブになるという単純なミスでした。まもなくファイルを更新します。

207 :hidebou:2010/04/13(火) 21:11:14
ファイルを更新しました。結果としてダイアログの構築がもたつくと若干ちら
つく事になりますが、その対策についてはまた考えたいと思います。

208 :hidebou:2010/04/13(火) 22:43:31
再度ファイルを更新しました。ダイアログは構築後に表示されます。
一時的にWS_VISIBLEを剥奪するという手法が円満解決のポイントでした。

209 :hidebou:2010/04/14(水) 07:14:12
ダイアログにシステムメニューを付けるということはメニューも付ける可能性
があるわけで、WS_EX_CLIENTEDGEを付加しないとメニューとクライアント領域
がのっぺりしてしまいますね。将来は自由にウインドウスタイルを設定可能に
したいとは思いますがダイアログのSYSTEM_MENUが宣言されていた場合に関し
ては自動的にWS_EX_CLIENTEDGEを有効とさせてください。

210 :hidebou:2010/04/14(水) 07:38:10
ファイルを更新しました。SYSTEM_MENUが宣言されたダイアログはアプリケー
ションウインドウとほぼ同じ3Dで窪んだ外観となります。アプリケーションの
ように扱えますが、HTA用ウインドウではなくHTML Dialogですのでセキュリテ
ィーの取り扱いに若干の制約があったと記憶しています。

211 :hidebou:2010/04/14(水) 09:55:02
呼び出されたダイアログでのActiveX生成時の警告ダイアログについて実験し
ていて気づいたのですが、フレーム構成でないアプリケーションはHTA扱いで
すから、そこから呼ばれたダイアログもHTA扱いなんですね。

ただしフレーム構成とした場合は子がHTMLでなければなりませんから、そこ
から呼ばれるダイアログもHTML扱いになりエンコードしないと警告が出ると
いうごく自然な展開なわけです。

212 :hidebou:2010/04/14(水) 10:03:31
もしHTAが子フレームで構成されていて、子もHTA扱いとさせることができれば
さらに自由度が上がることは明白ですが、今後の課題としたいと思います。

213 :デフォルトの名無しさん:2010/04/14(水) 20:03:16
application属性は無効なの?
http://msdn.microsoft.com/library/ms536474.aspx


214 :hidebou:2010/04/14(水) 21:10:46
>>213
<HTA:APPLICATIONという書き方でエラーとはなりませんがMSHTA.EXEと同様の
機能しか提供できません。作った本人も残念なのですがHTA:APPLICATION中で
使用する機能があれば実装しますので気兼ねなく書き込んでください。


215 :デフォルトの名無しさん:2010/04/14(水) 21:34:45
いや、frameタグのセキュリティ属性のほうです。

<FRAME SRC="SUBFRAME.HTML" APPLICATION=YES >

216 :hidebou:2010/04/14(水) 21:43:16
>>215
すいません別の意味でしたね。恐らく
The APPLICATION attribute can be used only in HTAs.
という記述からすると同じ扱いになろうかと思いますが、初めて見る書き方
なので調べてみます。




217 :hidebou:2010/04/14(水) 21:59:33
理解できました。有効ですね。子フレーム宣言を
<frame name="top" src="page1.htm" APPLICATION="yes">
でセキュリティーがHTA扱いとなるのですね。こんな便利な機能を私はまった
く知りませんでした。教えていただいてありがとうございました。



218 :hidebou:2010/04/15(木) 00:49:57
極めて今更なんですが、HTA扱いだと何やっても警告出ないんですね。
実は長い間HTMLダイアログベースで同じ事をやろうと研究していた時期があっ
たものですから頭こんがらがっていました。結局一人で出来ること、気づくこ
とには限界がありますし、私は特にその容量が小さいので今回のようなご指摘
は値千金です。今後ともよろしくお願いします。

219 :hidebou:2010/04/15(木) 09:31:30
HTABOXコアのダウンロードファイルを更新しました。
exeはそのままですが、ドキュメントとサンプルの誤りを訂正しました。

お礼に差し上げるものも無いのでウインドウスタイル変更についてプロトを
作成したいと思います。HTML系のウインドウはFrameとDocumentにそれぞれ
HWNDを持っていますので使いようによっては斬新なことができると思います。

220 :hidebou:2010/04/15(木) 09:47:41
まずHWNDの取得ですがダイアログの場合取得しにくいので一律に
window.FRA_HWND、window.DOC_HWNDで常に参照できるものとします。
GetWindowLong、SetWindowLong、GetSystemMenu、SetWindowPos
をWIN32名前空間に出現させればスタイルの変更が可能になるはずです。

221 :hidebou:2010/04/15(木) 13:14:36
ウインドウスタイルを変更するAPIを追加したサンプルを置きます。
ttp://www5a.biglobe.ne.jp/~javajava/ari/style_test.lzh
機能の追加は単純作業でしたが、適当なサンプルページを作るのに手間取り
ました。サンプルではシステムメニュー上の最小化、最大化機能を制御して
います。透けてるウインドウとかをサンプルにしたかったのですが、改めて
ウインドウスタイル設定の難しさを思い知らされた格好となりました。

222 :hidebou:2010/04/15(木) 13:23:00
補足ですが、当初window.FRA_HWNDとしていましたが、単にグローバル変数
FRA_HWND、DOC_HWNDとしています。
GetWindowLong、SetWindowLong、GetSystemMenu、SetWindowPos
の各引数は本物と同じです。ただしスクリプトからのプロシージャ取得設定
は危険なのでWindowLong系のGWL_WNDPROCは無視しています。

223 :hidebou:2010/04/15(木) 18:29:32
ShowWindow関数を追加しその定数もサンプルスクリプトに加えました。

224 :デフォルトの名無しさん:2010/04/15(木) 21:45:10
SetLayeredWindowAttributes もクレクレ

225 :デフォルトの名無しさん:2010/04/15(木) 23:29:28
自分はスキルが無いから、身体に気をつけて頑張って!という感謝の言葉しか思いつかない・・・


226 :hidebouの代理:2010/04/16(金) 00:02:21
ついに両回線ともアク禁になってしまいました。1週間くらいは
ROM状態でしょうか。書き込みに対するレスは
ttp://kuroda.bglb.jp/post/index.htm
に書きます。ご迷惑おかけします。hidebou

227 :デフォルトの名無しさん:2010/04/16(金) 11:08:41
p2でも無理なの?

228 :デフォルトの名無しさん:2010/04/16(金) 23:30:48
ブログでやればいいのに

229 :デフォルトの名無しさん:2010/04/17(土) 15:06:06
書き過ぎでアク禁食らったんじゃないかな。
もうちょっと抑えて書くといいね。
待ってます。

230 :デフォルトの名無しさん:2010/04/17(土) 15:21:27
過疎板だからといって、200レス/月でアク禁になるのかよw

231 :hidebou:2010/04/18(日) 11:33:16
test

232 :hidebou:2010/04/18(日) 11:41:07
ご迷惑おかけしました。片方の回線で書けるようになったようです。
ttp://www5a.biglobe.ne.jp/~javajava/ari/style_test.lzh
のプロトタイプでは以下のAPIが使用可能です。

GetWindowLong、SetWindowLong、GetSystemMenu、SetWindowPos、ShowWindow
SetLayeredWindowAttributes、AnimateWindow

また、右クリックでのポップアップメニュー機能も追加してみました。特に
このメニューの仕様についていいアイディアがありましたら助かります。

233 :hidebou:2010/04/18(日) 11:54:51
通常メニューについてもポップアップメニューについても将来は構造化した
定義をスクリプトから行えるようにする予定ですが、HTMLタグによる宣言の
場合は単純で使いやすい仕様が望ましいと考えています。

プロトでは新たにTDのinnerTextが-(マイナス記号)だった場合セパレータと
する規則を導入しましたが、これでいいのかな?と迷っています。

234 :hidebou:2010/04/18(日) 21:37:08
HTABOXコアという器も改良を続けて行くでしょうが、器の中の料理の作り方
を紹介する事にも力を入れていかなければと思っています。今のところHTML
Applicationは知る人ぞ知るという情報であって、肝心のこれからプログラム
を学習しようという人へ情報をいかに広報してゆくか、導けるかが課題にな
ろうかと思います。

235 :デフォルトの名無しさん:2010/04/19(月) 01:57:31
>>230
同一IPから連続で書くと、一日でアウトになるよ


236 :デフォルトの名無しさん:2010/04/19(月) 20:25:13
>>235
1日じゃなくて1ヶ月だってばよ。

237 :hidebou:2010/04/19(月) 22:04:25
本来なれば私のサイトで意見交換するというのが本筋なのですが、私として
も何かと目に留まりやすい2chをあてにしてしまっていることろが悪いのです。

昨日、今日とFrontPageやASPとにらめっこして気軽にご意見をいただけるシス
テム作りを行っております。書いた本人は直後にコメントを消せるルールなら
書き込みやすいかなぁーとか思っています。

238 :hidebou:2010/04/19(月) 22:29:42
もっと本質的な問題を言うとSEOに優れている2chのような場では逆に失言が未
来永劫残る危険性があって発言にブレーキがかかる気がするんです。かと言っ
てメーリングリストのように閉鎖的なのは前時代的ですし、ブログやtwitter
もいいでしょうけれど話題がプログラミングだけにソースをきれいに表示でき
ることを考えると自分でそいう目的のシステムを作った方がいいかなぁっと考
えています。

239 :hidebou:2010/04/20(火) 05:54:09
従来HTAやWSHは個人的に使うツールだった訳からとても趣味性の高い奥まっ
た情報の交換が主だったと思うんです。「過去ログ見てから物を言え」的
ムードが参入者にとって障壁となっているのではと。これからという人が気
兼ねなく発言できる場が絶対に必要ですし、私自身その中で気づいてゆくこ
とが多いと思っています。

240 :hidebou:2010/04/20(火) 06:04:39
とりあえずFrontPageのスレッド形式掲示板を使いやすく改良してそういった
ニーズに答えられる努力をしていますが、HTABOXコアは特化されたブラウザと
して使用することも出来るわけですから、twitterのように緩い結びつきで、
コミュニティーが形成されてゆく情報交換ルールを作ることも夢ではないと
思います。

241 :デフォルトの名無しさん:2010/04/20(火) 16:49:17
プログラミングをしてみない?
http://www.nicovideo.jp/mylist/7143440

こういう動画のHTA版があると面白いかもしれんが
WSHと違ってHTMLの説明も書かなきゃいけないから大変そう

242 :デフォルトの名無しさん:2010/04/20(火) 17:16:33
>>200
>プログラミングは楽しいのに説明を書くのは苦手です。


http://www.ruby-lang.org/ja/man/html/Ruby_CDD1B8ECBDB8.html#Document
ソースがドキュメントだ。バグも完全に記述されている

243 :hidebou:2010/04/20(火) 18:44:19
>>241
まさしく情報の範囲として実に広範なものになりますから、細部までとなると
一人がどうこうしても追いつかない情報量になろうかと思います。
それぞれの分野で興味を共有しあって助け合える仕組みが必要だと思います。

244 :hidebou:2010/04/20(火) 18:49:50
自身サイトの掲示板を改良しました。
ttp://kuroda.bglb.jp/post/index.htm
せっかく訪れていただいてもお土産がないと失礼ですのでタイプライブラリス
レッドを用意しました。タイプライブラリスレッドにリクエストをいただけれ
ば可能なかぎりお答えしたいと思います。

245 :デフォルトの名無しさん:2010/04/20(火) 19:56:07
OLE/COM オブジェクト ビューア
http://msdn.microsoft.com/ja-jp/library/d0kh9f4c(VS.80).aspx

これでよくない?
と思ったけど定数は表示されないのかな

246 :hidebou:2010/04/20(火) 20:26:20
>>245
C++で利用するならおっしゃる方法も素敵ですし、私は#importした後に生成
される.tlhや.tliファイルを直接眺めたりもします。要はスクリプトにコメ
ントとして貼り付けて必要な部分をコピペしやすい形式のファイルとしてい
るだけです。


247 :hidebou:2010/04/20(火) 20:48:55
またCOMの全体像を把握したい場合も整形されたタイプライブラリが便利です。
FileSystemObject.CreateTextFile(.......) return ITextStream ですから
今度は後方からITextStream.で検索をかけITextStreamのメソッドやプロパテ
ィーを確認するといった具合です。

248 :hidebou:2010/04/20(火) 23:45:30
HTML Applicationという手法の最大のメリットは「省力化」だと思っています。
生涯のテーマとして少数のアプリケーションを維持するだけなら全部C++で書く
のが正解ですが、行きずりのテーマをささっと短時間でアプリケーションに
仕上げてしまうような状況でこそ本領を発揮するはずです。それを可能にして
いるのが他人の褌であるCOMの利用なわけですから、その構造を短時間で理解
する工夫がなければHTML Applicationのメリットが削がれてしまうと感じてい
ます。

249 :hidebou:2010/04/21(水) 09:57:57
個人的には1週間で1本のアプリケーションをリリースする体制を目標にしています。
つまり年間で52本をリリースするわけです。「下手な鉄砲数打ちゃ当たる」を実践
するためにHTABOXコアを書きましたし、HTABOXコアを知らない人も短時間にどんど
んリリースしてくる不思議な人間がいることに気づいてHTABOXコアの存在に気づく
という展開になるんじゃないかと思います。

250 :デフォルトの名無しさん:2010/04/21(水) 17:15:26
ゲーム作るのに joyなんたら〜な API がラップされると嬉しかったり。
http://www.geocities.jp/rasuxo/win32.html#mm_joy

251 :hidebou:2010/04/21(水) 17:51:32
>>250
ジョイスティック系のAPIがあることすら知りませんでした。
今後勉強して喜んでいただけるよう努力します。



252 :hidebou:2010/04/21(水) 18:27:25
>>250
ちらりとMSDN見たんですが、いよいよ構造体がらみになりそうですね。
いつかは構造体をスクリプトで定義、参照できる規格を決めなければと思っ
ていましたので良いきっかけをいただいたと思います。JScriptならイメージ
が沸くのですがVBSriptのclassインスタンスがC++からIDispatchExに見える
のかというような実験を繰り返す必要がありますので、お時間をいただくこと
になります。

253 :デフォルトの名無しさん:2010/04/22(木) 00:55:48
全くゼロから覚える場合、何をやったら良いか教えていただけますか?

とりあえず、教育用言語とアルゴリズムは学生時代に習いました。
HTMLはスタイルシート以外は分かります。


254 :デフォルトの名無しさん:2010/04/22(木) 01:05:47
やはり最初は Hello, World からでしょう。

ttp://msdn.microsoft.com/ja-jp/library/ms536496.aspx

255 :hidebou:2010/04/22(木) 03:16:39
>>254
HTMLでユーザーインターフェースを作ることを理解されていらっしゃるので
したら自分の興味がある機能を提供してくれるCOMを使ったスクリプトを書い
てみてはいかがでしょうか?私の知識の範疇にあれば使えそうなCOMを紹介し
て簡単な導入部を書けるかも知れません。
HTML、Script、COM、C++と広範な技術を活用できますが、最も重要なのは書い
てて得してる気分とか、楽しいとかだと思います。

256 :hidebou:2010/04/22(木) 03:37:42
>>254
私の経験で恐縮ですが、HTMLは単に表示されるだけと思っていた時に、結果を
ファイルに書き出せるだけでとっても感動した記憶があります。scrrun.dllに
存在する"Scripting.FileSystemObject"はテキストファイル入出力機能を提供
してくれるCOMです。クォート内のワードで検索すれば数十万件ヒットしますの
でサンプルは沢山あるはずです。


257 :hidebou:2010/04/22(木) 12:44:56
ねぼけまなこで書き込んだものですから>>254ではなく、>>253でした。
すいませんでした。

258 :hidebou:2010/04/22(木) 13:12:52
>>253
スクリプトを書くときにJScriptかVBScriptかで悩むかもしれませんが、HTML
中には両方書いてそれぞれグローバルな要素を参照できますので、両方を齧っ
て自分のスタイルに合った方を使えばいいと思います。

JScriptはJavaScriptの拡張ですので、他のブラウザ用にHTMLを書くときにも
知識が生かせます。VBScriptはIE限定ですがoffice系のVBAをスクリプトへ移
植する際には僅かの書き換えで済みますから便利だと感じています。

259 :hidebou:2010/04/23(金) 10:07:56
HTML Application用いてMSWORDやEXCELを操作するメリットはマクロのセキュ
リティー設定に関わりなくマクロと同等の動作を実行できることです。一見
回りくどいように思われるかも知れませんが、VBAをVBScriptでの外部呼出し
に替えることは簡単ですし慣れればJScriptへの翻訳も問題ありません。


260 :hidebou:2010/04/23(金) 10:20:01
ひとつ面倒な点があるとすればMSWORDやEXCEL固有の定数をスクリプト環境で
定義しなければならない事ですが、この問題を解決する目的でタイプライブ
ラリ解析システムが生まれたと言っても過言ではありません。
//WdNewDocumentType type enum
var wdNewBlankDocument = 0;
var wdNewWebPage = 1;
var wdNewEmailMessage = 2;
var wdNewFrameset = 3;
と宣言しておけばVBAでの定数名を書き換えることなくスクリプトへ移植でき
るからです。

261 :hidebou:2010/04/23(金) 10:32:37
HTABOXコアはまだVBScriptを使用したスクリプトブロックのエンコードに対
応していませんが、対応後はマクロの記録でVBAを自動生成させ、少ない労力
でスクリプトへ移植し、1本のアプリケーションとしてリリースできる事をご
理解いただけると思います。これぞ究極の他人の褌でとる相撲だと思います。

262 :デフォルトの名無しさん:2010/04/24(土) 18:49:51
>>252
>VBSriptのclassインスタンスがC++からIDispatchExに見えるのか

Windows スクリプト コンポーネント
http://msdn.microsoft.com/ja-jp/library/cc392140(v=MSDN.10).aspx
これとは違うんだよね よく分からん

263 :hidebou:2010/04/24(土) 19:59:18
>>262
C++側から見た場合、スクリプトから呼び出されたCOMの引数はVARIANTですが
JScriptのObjectの場合はIDispatchExポインターを保持しています。VBSript
のclassインスタンスもそうなら....という話です。

264 :hidebou:2010/04/24(土) 20:09:54
もしそうならC++側で要素を列挙できますから構造体の代わりに使えます。

265 :hidebou:2010/04/25(日) 01:08:36
「柔軟に扱える」の方が適切な表現かも知れません。うまくいけば必要な要
素のみを宣言した「省略構造体」を引数として渡せばC++側が要素を追加して
「完全構造体」を返すというルールが作れるかも知れません。

266 :hidebou:2010/04/25(日) 22:10:59
従来スクリプトから呼ばれるCOMを作成するためにはレジストリに登録する
パブリックコンポーネントを作成しなければなりませんでした。全くのスク
ラッチでこれを書くこともできますが事実上VC++のATLがないと困難でした。
HTABOXコアはその面倒を内部で処理し単純なDLLでもスクリプトから呼び出さ
れるルールを実現しています。ATLなしでも書けるということは無料の2008で
十分だということです。

267 :hidebou:2010/04/25(日) 22:21:55
HTABOXコアのサンプルで使用しているCONSOLE.DLLのC++ソースを置きます。
単にWIN32DLLの環境を作りビルドしてください。
ttp://www5a.biglobe.ne.jp/~javajava/ari/sample.txt
スクリプトとは何か?を理解する最も有効な方法はもっと低水準な観点から
スクリプトを眺めてみる事です。

268 :hidebou:2010/04/27(火) 21:45:39
最近ASPばかり眺めててHTABOXコアに手を付けられずせっかく作ったプロトも
リリースしていなくてすいません。ASPを眺めていて不思議な現象を発見した
ので話の種にさせてください。#include virtualで別WEBにあるASPを参照し
被参照側のグローバル変数を呼び出し側で<%=HOGE%>すると見えないんです。

269 :hidebou:2010/04/27(火) 21:53:55
いろいろ設定を変えてもだめでIIS5.0でもIIS5.1でも同じ状態なのです。
でも、ひょんな事からその対策を発見しました。両方同じ言語な場合のみこの
現象が発生しているのです。JSとVB又はVBとJSならこの問題は発生しません。
引き換えにユーザー定義系クラスは参照できませんが、改めてVBScriptの
存在に感謝したしだいです。

270 :hidebou:2010/04/28(水) 11:50:39
という訳でMSE7.EXE(Microsoft Script Editor)でVBScriptを書く機会が多く
なっているのですが、複数行を一度にコメントアウトする場合面倒だったり
します。VBA環境の場合はその機能があるのですがMSE7.EXEにはありません。
これは検索置き換えで正規表現を使えば簡単に解決できます。コメントアウト
したい範囲を選択して行頭「^」を「'」に置き換えればいいのです。


271 :hidebou:2010/04/28(水) 12:10:05
正規表現という手法はとっつきにくくて、各環境で微妙な差異があったりし
ますが、使ってみると劇的に作業が楽だったり、ソースコードが簡潔になっ
たりします。特にJScriptのreplaceでは置き換え文字列生成に関数を指定で
きますので柔軟な置き換え結果を生成できます。

272 :hidebou:2010/04/29(木) 01:07:48
HTABOXコアではなくHTABOXサーバーの話題なのですが、IISで独自認証システ
ムを構築する場合ISAPIフィルタDLLが必須となります。ASPは画像等のGET要
求を知り得ないからです。しかしISAPIフィルタDLLとASPはASPがIISインプロ
セスで動作していない限り交信できません。つまりISAPIフィルタDLLはASPの
セッション情報にアクセスできないというのが通説です。

273 :hidebou:2010/04/29(木) 01:24:50
HTABOXサーバーのアドバンテージはそれを実現している事です。IISプロセス
とASPプロセスでそれぞれCOMをインスタンス化し、IISの保護されたプロセス
境界を突破する通信手段をCOM内に構築することでDLLとASPは連携できます。
勿論ASPは勝手気ままに消滅するかも知れませんから、DLL側のXMLインスタン
スへ動作を報告し、DLL側は必要に応じてXMLを読むというからくりです。

274 :hidebou:2010/04/29(木) 01:42:49
ネットでプログラミング系の情報を見ている時に
「○○では○○したくてもできない」
というフレーズを見つけた時はチャンスだと思うんです。なぜならそれを実
現すれば確実にアドバンテージを得ることができると教えてくれているから
です。

275 :hidebou:2010/04/29(木) 11:30:20
プログラミング業界の格言に「人のやっていないことはやるな」というのが
あります。これは「万人がチャレンジしてだめな手法へチャレンジするな」
という意味です。決まった納期に仕様どおりの製品を納める仕事なら当然の
ことですが、フリーランスプログラマーの場合は逆だと思います「人ができ
ないからチャレンジする」でなければ新しいものは生まれません。

276 :hidebou:2010/04/29(木) 23:52:24
なんとかHTABOXサーバー側のシステムも営業稼動できる状態に漕ぎ着けたよ
うです。技術的に可能か?が判明すると興味を失って実装部を煮詰めないの
が私の欠点なのですが、霞を食って生きてはゆけないので睡眠時間の少ない
日々をすごしました。最終的に販売動作はサーバーが自動的に行い、私はコ
ンテンツの充実のみに集中できるはずです。


277 :hidebou:2010/04/30(金) 00:19:56
プログラミングに限って言えばスキルとは頭の良さと無関係なものです。
要は「知っている」か「知らない」かの違いだけだと痛感しています。
私の家族に霞ではなくお米を食べさせなければならないので総てを無料閲覧
可能にはできませんが、実践的で理解しやすい情報を提供してゆく予定です。

278 :hidebou:2010/05/01(土) 03:33:49
朝4時からですから24時間耐久になりましたがFrontPage Server Extensionsが
管理するDBと独自認証系DBとの良好な位置関係に結論をだすことができました。
これによって書きかけだった救急隊用医療情報分析システムをサーバーに組み
込む作業も終了し一般公開へ大きく前進できたと思います。

279 :hidebou:2010/05/01(土) 03:58:45
こいつはソースで250Kくらいになる退屈な構造のプログラムなのですが、HTA
BOXコアがきちんと大きなボリュームに耐えられるのかのテストでもありました。
勿論パース中は若干もたつきますが、サーバーからの認証ダイアログに答える
必要があるので、それに気をとられてあまり気にならないという素敵な誤算も
あるようです。


280 :hidebou:2010/05/08(土) 23:39:03
いまだサーバー側の独自認証システムコードから抜け出せずにいます。
FrontPageが生成するVBScriptコードを再利用するという発想がいやらしすぎ
るらしく、最後に蹴られるという展開を何度も繰り返してしまいました。
まさに「策士策に溺れる」の展開なので、初心に帰って朴訥なコードを書き
HTABOXコアのほうに手をつけれるようにしたいと思っています。

281 :デフォルトの名無しさん:2010/05/14(金) 18:43:04
<script language="VBScript">
Class HelloWorld
  Sub Print
    document.write "Hello, World"
  End Sub
  Function toString
    toString = "見せられないよ☆"
  End Function
End Class
Set hello = New HelloWorld
</script>
<script language="JScript">
alert(hello instanceof Object); //=> false
alert(typeof HelloWorld); //=> "undefined"
alert(typeof hello); //=> "object"
alert(typeof hello.Print); //=> "unknwon"
alert(typeof hello.toString); //=> "unknwon"
alert(hello); //=> "[object]"
alert(hello.toString()); //=> "見せられないよ☆"
</script>

VBScriptは難しすぎ

282 :281:2010/05/14(金) 18:55:11
間違えた
×unknwon → ○unknown

283 :hidebou:2010/05/14(金) 21:37:14
>>281
私も同じような実験コードを何度か書きました。
Class HelloWorldが直接JScriptから参照できればもっと有機的な絡み方がで
きるんですが、あくまでもNewしたインスタンスしか見えないようでした。

JScriptにVBという名前空間を、逆にVBScriptにJSという名前空間を出現させ
異なる言語の標準関数を使えるようにしたら面白いかも?という構想を持って
います。



284 :デフォルトの名無しさん:2010/05/14(金) 22:00:41
VBSは撲滅すべき

285 :hidebou:2010/05/14(金) 22:08:33
>>284
私はVBS初心者なんですが、どうも一旦ばかばかしいミスのコードを実行する
と、その後正しいコードを書いてもエラーとなる気がしています。ひょっと
するとVBSはJSよりWindowsシステムに近いところで動くのかも知れません。
だとすればJSよりちょっと高速に動くという推理をしています。

286 :hidebou:2010/05/27(木) 01:28:59
本番サーバーの最終調整とセットアップドキュメント作成をやっています。
ひとつの目標として、私が書いたものでないHTABOXコアプラットホームの
アプリケーションを販売できる体制作りを掲げています。そのためには認証
や登録を軽量でありながらも堅牢なものにしなければなりません。

287 :hidebou:2010/05/27(木) 01:40:47
私のような年になると、未来への沸き立つ希望などは消えうせて、何かを次
の世代へ伝えられればという想いだけになります。これからこの世界を担う
方たちが希望をもって生きてゆける材料をひとつでも作っておければと、し
ょぼくれた目をこすりながらIISと格闘しております。

288 :デフォルトの名無しさん:2010/06/11(金) 18:33:20
UNLHA32.DLLの開発停止、作者がLHA書庫の使用中止を呼びかける
http://slashdot.jp/security/article.pl?sid=10/06/07/0335205

289 :hidebou:2010/06/14(月) 18:56:41
>>288
情報ありがとうございます。
今後は単純にZIPにしようと思います。

290 :hidebou:2010/06/24(木) 02:03:40
サーバーリニューアルの前に足元を固める意味でCOMについて再学習しました。
従来は他人様のレジストリに触りたくないのでサイドバイサイドにこだわって
きましたが、エンコードを必要としないスクリプトの場合HTABOXコアが提供
するプライベートCOMの生成を待つのが面倒だと自分でも感じています。

291 :hidebou:2010/06/24(木) 02:11:58
従来パブリックCOMを書く場合はVC++のATLを使っていたのですが、いわゆる操作
手順でのプログラミングになるものですから、何かのきっかけでプロジェクトが
クラッシュした場合のことを考えると大胆なチャレンジができませんでした。
本来はどんな事が起こっても単純にソースをコピーしてビルドすれば新しいプロ
ジェクトが完成するべきなのですが、手順に頼った分複雑になるのです。

292 :hidebou:2010/06/24(木) 02:24:28
改めて完全なスクラッチでパブリックCOMDLLとパブリックCOMEXEのスケルトンを
書いてみて、今まで思っていたより簡潔な記述ができることに気づきました。
さすがに50行で1画面とはゆきませんが、150行で3画面くらいあればレジストリ
への登録部分も含めた全体を記述することができます。どうもCOMの解説にはC++
以前の情報がちらりと見えて学習者を混乱させているように思えます。

293 :hidebou:2010/06/24(木) 02:46:09
特にEXECOMサーバーの場合、プロセス境界を超えてポインターを認識する仕組み
が必要になりますが、IClassFactoryとIDispatchで構成されるモジュールなら
ole2disp.dll {00020424-0000-0000-C000-000000000046}に任せるだけという
あっけない展開に拍子抜けしてしまったくらいです。サイトを新しくしたらCOMの
セクションを設けて詳しい解説ができればと考えております。

294 :hidebou:2010/06/24(木) 02:58:43
近い将来のバージョンアップ時に開発者がそれを望めばHTABOXコアをレジストリに
登録し、冒頭から拡張機能を利用できるオプションをつけたいと思います。また、
GUIを持たないツールとしてのスクリプト用に同等の機能を持つCOMDLLを提供できる
と思います。VC++の操作手順から完全に離れた形でCOMを記述することによって
COMそのもののポータビリティーを向上させることができたからです。

295 :hidebou:2010/07/08(木) 01:33:54
自分なりに突き詰めてディスパッチ機構を見直した結果。ActiveScriptにしても
HTML中のScriptにしてもルートにある(若しくはグローバルな)スクリプトディ
スパッチは極めて軽量にラップすることができるという結論に達しました。
このラップ層にWIN32による低水準関数を置くことで本来はActiveXObject要求
である部分をHTABOXコアからのディスパッチ提供にすりかえることができます。

296 :hidebou:2010/07/08(木) 01:42:10
で何がどう変わるかというと。開発者はHTABOXコアをEXE形式のCOMモジュールと
してレジストリに登録します。開発中のスクリプトには通常のCOMのように
var WIN32 = new ActiveXObject("HTABOX.Application");
と記述して普通にデバッグできるわけです。

297 :hidebou:2010/07/08(木) 01:50:54
完成したスクリプトはHTABOXコアの内部リソースとして格納し配布します。
HTABOXコアは内部リソースを実行する際
new ActiveXObject("HTABOX.Application");という要求を見つけた場合
GetHtabox();という単純な関数呼び出しに置き換え、Invoke要求で当該
ディスパッチを返します。これにより配布形式ではレジストリ登録せずとも
同一の動作を実現できるわけです。



298 :hidebou:2010/07/08(木) 02:06:34
従来はもっと込み入った手法なので生成タイミングがどうたらこうたらという制約
があり、自分自身この規格でばりばり開発したいかというと???だったのですが
今回の研究で本当に足元をしっかり固めることができ、すっきりとしたルールを
確立することができそうです。

299 :hidebou:2010/07/08(木) 02:18:08
蛇足ですが、私がCOM開発する場合の環境についてお話します。多分これからCOM
プログラミングにチャレンジする方には参考になると思います。これが明確になっ
ていないのでCOMは敷居が高い分野だと誤解されている気がします。要は何が起こっ
ているかを逐次確認できる環境こそ最も大切なのです。

300 :hidebou:2010/07/08(木) 02:32:51
まず、EXE形式なWIN32アプリケーションで徹底的にIDispatch若しくはEx継承
クラスをテストします。ウインドウは作成せず、AllocConsole();でコンソール
を生成し必要な情報がすべて表示されるようにします。また全体をcatch(...)で
捕捉しどんなに軽微な異常も見逃さないようにします。

301 :hidebou:2010/07/08(木) 02:48:34
呼び出し側として同一EXE内にActiveScriptを生成し、試験するディスパッチを
AddNamedItemで追加、スクリプトをパースしてディスパッチの挙動を監視します。
具体的にはAddRefやReleaseによるrefカウンターの推移等をコンソールへ出力
するのです。この段階でスレッドモデル、デバッグビルド、リリースビルド、
あらゆるチャレンジを行い、仕様を決定してゆきます。

302 :hidebou:2010/07/08(木) 03:06:54
十分な検証が行われたとしてもディスパッチ冒頭の関数は単にMessageBoxを表示
するような単純なものとします。これは実際にIClassFactoryを実装しCOMとして
外部からの呼び出し行った結果が期待通りでない場合、問題の切り分けを容易に
する目的です。あらゆるプログラミング環境で共通な事ですが、特にCOMの場合
動かない原因をいかにすばやく特定できるかが鍵になると思います。

303 :hidebou:2010/07/10(土) 22:59:12
今日は新たなHTABOXコアのロジックを試験していたのですが、今まで勘違いして
いた部分に気づきました。documentの構築直前のタイミングで独自ディスパッチ
をScriptへ送りつけることはできないと認識していたのですが、何の問題も無く
可能であることがわかりました。なんか得したような損したような複雑な気分です。

304 :hidebou:2010/07/10(土) 23:06:16
HTABOXコア2.0(仮称)はスクリプトを起動起点とすることができます。つまり
WIN32.CreateWindow(html);で任意のHTMLコードをHTA実行できます。これは
最初に生成したWindowを破棄し、新たなWindowを生成できることを意味します。



305 :hidebou:2010/07/10(土) 23:19:49
また、実行関数はすべて起動スクリプト側に記述し生成されたHTAインスタンスへ
転送する形で実行可能です。結果的にHTMLコードはボタンやメニューなど外観に
関する事柄のみとなり、ビューとドキュメントの分離が可能です。また、ソース
隠蔽は起動側スクリプト全体というルールを設ければ、より堅牢な隠蔽ができます。


306 :hidebou:2010/07/10(土) 23:31:34
自分でこのHTABOXコア2.0用スクリプトを書いて笑ってしまったのですが、
HTMLからコールされる関数を2,3宣言しwhile(IsWindow(hwnd))で待機する
スクリプトの構造はWIN32APIで書いたWindowsプログラミングのミニチュア版
のようでとても愛らしいものになります。近日中に実験器を公開したいと思います。

307 :デフォルトの名無しさん:2010/07/12(月) 19:36:53
<html>
<script language="javascript">
window.close();
</script>
</html>

何かこのようにウインドゥを閉じるとエラーダイアログが出るのですが



308 :hidebou:2010/07/12(月) 20:30:30
>>307
貴重なご指摘ありがとうございます。直後にcloseすることは想定しておりません
でした。現状では操作すべきウインドウが無いのでウインドウクラスのアドレスを
登録できないという内部エラーメッセージが表示されます。次期更新時にはウイン
ドウ実体が存在するかのチェックルーチンを追加しますので今後ともご指導お願い
いたします。

309 :デフォルトの名無しさん:2010/07/17(土) 17:01:47
mhtafile
ttp://www.vector.co.jp/soft/winnt/util/se408592.html
> HTMLは、HTMLファイルと埋め込みコンポーネントを「Web アーカイブ、単一のファイル」のMHTMLファイルにできますが、
> HTAには、そういうファイル形式がありません。
> なので、HTAファイルと埋め込みコンポーネントがばらばらで持ち運びや管理が面倒です。
> そこで、HTAもMHTMLファイルのように単一のファイルにして実行する方法です。

HTABOXコアでもmhtmlドキュメントを実行ファイルとして扱えると有難いです。
↑自体はレジストリの操作が必要なので……

310 :hidebou:2010/07/21(水) 00:04:56
>>309
手元のMSWORDでmhtを作ってみたところ画像等がメールの様にBASE64エンコード
されているのがmhtであると認識しました。技術的には可能だと思いますし、今後
総てをリソース格納するさいに個別のリソースとせずこの形式を利用すればとても
スマートな処理が可能だと考えます。大変貴重なご意見ありがとうございます。

311 :hidebou:2010/07/21(水) 00:13:50
HTABOXコア2の基礎検証が終了しました。デモ版を明日公開できるかと思います。
起動はJS又はVBSファイルとなります。従来のWIN32にHTAを生成する機能を付加
しましたので、何度でもdocument.writeしてHTAを更新する事ができます。
HTABOX2.EXEをレジストリ登録すればwscript.exeで実行可能ですから//Dでデ
バッグできますし、HTABOX2.EXEへのドロップ実行ではレジストリ登録無しに実行
可能です。

312 :hidebou:2010/07/21(水) 00:40:28
これでひとつ自分の考えていた理想が実現できた気がします。最も高級な言語と最
も小回りの利くC++の連携で従来のアプリケーション構築に対する概念を根底から
変革する提案ができると思います。これもひとえに愚かな私を暖かく見守ってくだ
さる皆様のおかげと感謝しております。まだまだ改善すべき点が発見されると思い
ますので気兼ねなくご指摘ください。

313 :hidebou:2010/07/23(金) 23:22:56
HTABOX2.0のデモンストレーションバージョンを公開します。
ttp://kuroda.bglb.jp/htabox/demo.zip
含まれるファイルはdemo.js、demo.vbs、HTABOX2.EXEです。
デモの手順はHTABOX2.EXEを起動しヘルプからご覧になれます。
スクリプトからHTMLオブジェクトを扱う感覚は慣れないうちは戸惑いを感じるかも
知れませんが、HTMLは外観の構成に専念し演算部分を隠蔽しながら起動側スクリプト
に置けることをご理解いただけると思います。


314 :hidebou:2010/07/23(金) 23:32:00
demo.jsのソースについて説明をさせていただきます。

var WIN32;
//#define WIN32 //
WIN32 = new ActiveXObject("HTABOX.Application");
WIN32.ScriptFullName = WSH.ScriptFullName;
//#undef WIN32

WSH環境では当然ActiveXObject生成が必要ですが、HTABOX2環境ではエラーとなりま
す。そこでプリプロセッサー命令を追加しました。#define op1 op2 はHTABOX環境で
単純にオペランド1文字列をオペランド2文字列に置き換えます。したがって#undefまで
の2行先頭はコメントアウトされます。JSには条件コンパイルにより処理できる問題です
がVBSとの統一した扱いを目的に追加しました。

315 :hidebou:2010/07/23(金) 23:41:16
var HTA = WIN32.CreateHtaWindow();
var DOC = HTA.document;
var WIN = HTA.window;
var SCR = HTA.Script;
var HWND = HTA.FraHwnd;

CreateHtaWindow()関数は非表示な空のHTAインスタンスを生成し、HTAへの操作を
提供するディスパッチを返します。スクリプトを毎回HTA.Scriptと記述しても間違い
ではありませんが、そのつどDISPATCH_PROPERTYGETによるInvokeが発生するわけで
すから変数でインスタンスを握った方が得策です。

316 :hidebou:2010/07/23(金) 23:53:59
var html = WIN32.FindSourceMark("#" + "BEGIN_HTML" , "#" + "END_HTML");
HTA.Open(); HTA.Write(html); HTA.Close(); HTA.Show();

FindSourceMark(op1, op2)関数はソースコード中にop1文字列を検索しop2文字列
との中間文字列を返します。スクリプトソース中にHTMLを書いた場合クォーテーション
問題が発生します。コメント中であればHTMLをそのまま貼り付けても文法的に破綻
しませんから、/*.....*/のコメント中に開始マークと終了マークを置いて抽出する
わけです。関数の引数が"#" + "BEGIN_HTML"なのは"#BEGIN_HTML"と書くとこの位置
が開始と認識されることを防ぐためです。


317 :hidebou:2010/07/24(土) 00:07:31
function ButtonFunc() {WIN.alert("ButtonMsg");}
SCR.ButtonFunc = WIN32.HideFunc(ButtonFunc);

JSの場合
SCR.ButtonFunc = function(){.....}と直接追加も可能ですが、ここではtoString()
を拒否する加工を行ってからHTAのスクリプトインスタンスへ関数を追加しています。
もし、HTML構築時に必要な関数である場合はHTA.Open(); とHTA.Write(html);の
間にこの追加を行うことで対応可能です。尚、alert()のようにHTA側コンテキストに
しか存在しない関数呼び出しには配慮が必要な事に注意してください。

318 :hidebou:2010/07/24(土) 00:21:06
WIN32.WiteForWindow(HWND);

現在の仕様ではWiteForWindow(op1)関数はop1を引数にIsWindowVisibleが真である
条件で待機します。この待機が無く母艦スクリプトが終了した場合、生成した関数
実体を提供するスレッドが無くなりますのでHTA側からの呼び出しは失敗します。

319 :hidebou:2010/07/24(土) 00:34:52
今回公開するデモはHTABOX2.EXEをレジストリ登録してdemo.js,demo.vbsを
wscript.exeで実行後、HTABOX2.EXEをレジストリ登録解除してアイコンへの
ドロップ起動を行う訳ですが、実際のリリースバージョンでは旧HTABOXと同様
にドロップされたスクリプトは暗号化してEXE内に格納される予定です。

320 :hidebou:2010/07/24(土) 01:15:31
蛇足なのですが同じ動作のJSとVBSを書いて「なぜVBSの方がクイックに動くのか」
について納得できる要素を見出すことができました。JSと同じ感覚で
set SCR.ButtonFunc = GetRef("ButtonFunc")
と書いてもVBSではエラーです。ということはVBSは左辺へIDispatchExのQueryInterface
を行わないという推理ができます。あくまでもIDispatchを基本ルールとして動作
しているとすれば「速いのはあたりまえ」という事になります。

321 :hidebou:2010/07/24(土) 01:56:25
従来HTA:APPLICATIONは私の生成手法では禁忌と考えていたのですがHTABOX2では
普通に使えるという実験結果でした。さらに考えてゆくと起動起点をスクリプトに
した場合HTAにこだわる必要はまったく無く、むしろセキュリティー制限がHTAと
同等のHTMLインスタンスを生成した方が自由度が高いという結論に達しました。
HTABOX2.EXEを強引にメモ帳で眺めるとヘルプウインドウをCreateDlgWindow();
で生成している部分が見えるとおもいますが、HTAがプロセスと同じ寿命を持つの
に対しこのウインドウは何度でも生成消滅できますし、複数が同時に存在しても
問題とはなりません。


322 :hidebou:2010/07/24(土) 10:43:51
HTABOX2は外から見ると何も新しい技術ではなくHTML系ウインドウを操作できるCOM
なわけですが、内部は結構チェレンジングな構成となっています。まずODL、MIDLを
使用せず動的にTypeInfoを生成して引数チェック付きのDispatchとしています。
したがって関数名や引数の変更、ディスパッチ相互の関係等はソースコードを変更
してビルドするだけで完結します。このごくあたりまえに思える操作がATLに依存
するとMIDLがらみで大変気の重い作業になります。

323 :hidebou:2010/07/24(土) 11:03:45
また、ディスパッチを構成する段階でスクリプトディスパッチとWIN32APIによる
低水準ディスパッチの有機的な関係を実現していますから、ここは正規表現で楽
をしたいという局面でパース済みのスクリプトディスパッチを高速に利用すること
ができますし、逆にスクリプトをパースする時点で低水準ディスパッチを呼ぶこと
も可能です。

324 :hidebou:2010/07/24(土) 11:23:58
new ActiveXObject("HTABOX.Application"); で生成されるルートディスパッチ
にはMotherという愛称がついていて彼女だけはIDispatchExです。この母なる存在
は子ディスパッチを乗せるコンテナとして機能しています。ですからJSなら
WIN32.hoge = .....
で新たな機能を追加することもを可能です。

325 :hidebou:2010/07/25(日) 16:37:15
以前からの宿題であったVBSのclassはIDispatchExなのか?について検証して
みました。結果はIDispatchExなんですがGetDispIDで新たな要素のDISPIDを
要求しても知らんぷりする頑固者です。ですから構造体代わりに使うためには
全メンバーが既存でなければならないということになります。まぁそれでも
JOYINFOEX構造体の代わりに引数が13個ある関数を作るよりはましでしょう。

326 :デフォルトの名無しさん:2010/07/25(日) 16:51:54
確かにスクリプトとHTMLを別記するのには戸惑いが……
BEGIN_HTMLからEND_HTML中に従来のHTA文法で記述したスクリプトも作動するようですが、
自分の書き方だとたまにInvoke〜ダイアログが出たりしたので、
正式版リリースの際にはエラーメッセージのリファレンスが欲しいところです。

それとHP掲示板にスパムが溜まっているようです

327 :hidebou:2010/07/25(日) 23:52:40
>>326
実に本質をついたご意見です。HTABOX2では単純にHTMLをドロップ格納するモード
があって、その場合ソースは隠蔽されず、JSやVBSを使ったスクリプトがドロップ
された場合隠蔽というルールがいいかもと考えています。
格納後(デモではドロップ)でエラーが発生した場合どこまでランタイムエラー情報
を表示すべきかで若干の悩みを持っています。隠したいという目的ならこのソースの
ここがエラーですという表示はおせっかいになるわけです。

328 :hidebou:2010/07/26(月) 00:26:22
HTMLドロップの場合は旧HTABOXと同じく名前つきパイプでexecScriptでもデバッガ
でプロセスを捕捉する部類のカジュアルクラックには対抗できると思われまますから
皆さんのご意見を十分うかがってHTMLドロップとスクリプトドロップの使い分け、
その仕様については練り上げていかなければならないと考えています。そのために
どんな小さな事でも結構ですので、「こういうルールがいい」というご意見をお待ち
しております。
サーバーについてはご指摘のとおり「放置したらどうなるのか」の実験を行っている
状態となっておりまして近日中に全リニューアルを計画しております。

329 :hidebou:2010/07/26(月) 01:34:23
頭の中を整理してみると旧HTABOX手法+IHTMLDocument系参照拒否は十分な隠蔽に
なりえるかも知れません。今だから話せますが旧HTABOXの最大の弱点はmshta.exe
という名前のダミーを作られた場合、本物かの判断が難しいことでした。今はその
mshta.exeを使わずに自プロセス内に同等のインスタンスを生成できているわけで
すからそのアドバンテージを活用しない手はないかも知れません。

330 :hidebou:2010/07/26(月) 01:49:40
HTABOXコア用に書かれたC++ソースコードは正直言って成り行きで書かれていまし
たので、この手の機能追加はストレスによる食欲不振を伴ったでしょうが、HTABOX2
用のC++ソースコードは内部もCOMで形成されていますので、まるでスクリプトを書く
感覚で動作を拡張できます。つまりAクラスはBクラスより前で宣言されていなければ
ならないというスパゲッティーの要因から開放されているからです。

331 :hidebou:2010/07/26(月) 02:15:53
話があっちこっちになってしまいますが、スクリプト起動には大きなメリットがあ
ると推察しているんです。アプリケーションにとって起動時のレスポンスは全体の
印象を決める大きな要因ですが、全部をHTMLパーサーに任せた場合もっさりした印
象をぬぐえないんです。実際にサイズの大きなアプリケーションでテストは行って
いなのですが、ボタンやメニューでの操作を起点に必要とされる関数ならHTML構築
とは別スレッドのスクリプトエンジンでパースすればクイッキーな初期ウインドウ
構築が可能なのではないかという意味合いもあります。

332 :デフォルトの名無しさん:2010/07/26(月) 20:42:34
JSまたはVBSをリソースとした場合の利点については上で述べられているのでさて置くとして
(個人的にはミニWIN32APIの将来的な拡張に期待。エラーメッセージもここで操作するとか)、
HTML(またはmshta.exe用のHTA)をリソースとする利点はプログラミング初心者向けに、
HTABOXコアの敷居を下げることに尽きるかと愚考。
JS・VBSリソース時の隠蔽はHTABOXコアの新手法、HTMLリソース時の隠蔽は
>>329の旧HTABOX手法+IHTMLDocument系参照拒否というのは充分に有用だと思います。

333 :hidebou:2010/07/27(火) 00:33:45
>>332
ご意見ありがとうございます。HTMLドロップとスクリプトドロップの使い分けとい
う方向性で考えてゆこうと思っております。スクリプトドロップは細かな制御を必
要とする場合、単にHTMLの場合は細かな事を考えずにすむというのが理想ですよね。

今日は早速HTMLドロップで何が起こるかを検証していたのですが、ちょっと壁にぶ
つかりました。about:blankで生成して後からdocument.writeする手法に統一した
いというのが大きな方向性なんですが、HTMLドロップの場合逆に実ファイルを生成
して読ませないとデバッガが後付けのexecScriptの内容まで追跡してくるんです。

334 :hidebou:2010/07/27(火) 00:44:54
旧HTABOXの場合はスクリプト抜きのHTMLファイルを瞬間的にHDに書き込んでいたの
で、デバッガはそのファイルに気をとられexecScriptを追跡できないという微妙な
バランスの上に成り立っていたことに気づきました。当初は単純に考えていたので
すが、もう一ひねり必要なようです。

335 :hidebou:2010/07/27(火) 18:00:49
HTMLドロップの対応を決定しました。単にスクリプトタグに hide="true"を検出
した場合当該スクリプトブロックコードは内部エンジンでパースされ外見的には
WIN32.ScriptParse("{C8357EDC-0303-44E7-BC27-8332D5D4810E}", document.Script);
というソースしか見えないということになりそうです。改めてスクリプトブロッ
ク単位の内部パースを見直してみると構築タイミングがどうのこうのという件は
私の考えすぎで、スクリプトエレメントのイベントではなく直にパースしなさい
と書くことでwindow.onloadより前にパースは完了するようです。

336 :hidebou:2010/07/27(火) 18:15:57
ですから何も考えずに「これはちょっと見せるのもったいない」と感じた部分を
隠すことができます。ただし現時点では内部パースする部分に
window.onload = function(){....}自体を書いてもスルーされるようです。
内部パースブロックで関数を定義し、その後の通常パースブロックのグローバル
スコープで直に関数を呼んでも関数の構築は完了しているという望ましい結果で
したので、window.onloadを書いて関数を呼ぶことに問題はありません。

337 :hidebou:2010/07/27(火) 18:26:12
デモのファイルそのものを差し替えるのは説明文等を整理してからになりますので
すこしだけ時間をいただきます。ただ勘違いが無いようにお願いしたいのはHTMLや
HTAファイルをHTABOX以外で実行した場合メニューはただのテーブルに見えます。
例えば外部実行用にMSHTA.EXEをDLLでフックしてWM_COMMAND拾ってメニューを
動かすことはできるのですが、そこまではご容赦願いたいということです。

338 :hidebou:2010/07/27(火) 23:20:24
HTML中のスクリプト独自パースはVBSだと失敗しますね。JSの関数はそれだけで単独
ディスパッチですから搬送できるんですが、VBSの関数は本当に関数なんでそれだけ
引き剥がすわけにいかないんですね。クラスを作ってインスタンス化してもらえば
搬送可能でしょうが、VBSにはガベージ・コレクションが無いので誰がReleaseする
の?ということになってしまいます。


339 :hidebou:2010/07/27(火) 23:45:57
この壁は崩せないと思いますのでVBS使いでソース見せたくない派の方はスクリプト
起動を使用していただくことになると思います。勿論隠蔽の必要が無いならばHTML
にVBSを書いても問題ありませんし、両言語を混在させて隠蔽部分だけJSでもいいと
思います。どうしてもという要望があれば昔のHTMLのみ一時ファイル出力後名前付
パイプでスクリプト転送というモードを付け加えることはできますが、ファイルの
生成を必要としないというガイドラインを守りたいと考えますのでご了承ください。


340 :hidebou:2010/07/28(水) 09:41:36
HTABOX2.EXEを強引にメモ帳で眺めると内部で使用しているスクリプトのコードが
いといろ見えると思うんですが、C++クラスの中でスクリプトコードをパースして
いつでも利用できるディスパッチメソッドを形成しているんです。これだとWIN32
で書いた低水準メソッドとの混在が自然に記述できて生産性が劇的に向上します。

ただJSを採用した場合単なる関数もディスパッチを形成しますからそこでオーバー
ヘッドが生じます。VBSを採用すればオーバーヘッドが生じない高速なものとなる
はずです。ただVBSで唯一痛いのが名前の大文字小文字を区別できないことです。
Dispatchという機構そのものがそうなのでしかたがないのでしょうが、VBSの場合
コードを考えているより衝突しない名前を考えている時間の方が長いという笑えな
い状況が生まれがちです。

341 :hidebou:2010/07/28(水) 13:39:20
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました。demo.htaを追加しました。
HTABOX2.EXEがレジストリ登録されていればmshta.exeで実行できます。拡張子を
htmにすればMSE7.EXEでいつもの様にデバッグできるわけです。

HTABOX2.EXEへドロップした実行の場合メニュー構築、スクリプトブロック隠蔽が
有効となります。demo.htaでは<script language="jscript" hide="true">で
隠蔽を指定していますから、スクリプトのソースは
WIN32.ScriptParse("{2692E0BE-08C4-4FDE-9B61-7F7107EF18BD}", document.Script);
というような関数呼び出しにしか見えなくなります。GUID風の文字列はCoCreateGuid
に生成させていて単に予測不能で再現性のない文字列という意味で使っています。

342 :hidebou:2010/07/28(水) 13:53:02
デモではwindow.onloadに隠蔽関数が間に合うことを証明するためにHTMLウインドウ
生成前にMsgBox表示を行っています。その関係上暫定的にウインドウをHWND_TOPMOST
指定で表示し裏に隠れないようにしていますが、これはあくまで暫定的な措置です

HTABOX2.EXE全般にいえることですが、動的document.writeですから画像等を相対
参照する場合のベースパスはありません。これはカレントディレクトリの参照規格
を明確にした後に個々で処理していただくことになると考えています。

343 :hidebou:2010/07/28(水) 17:39:09
どんな分野でもそうでしょうが、既存の物を壊さないと新しい物は創造できません。
C/C++でのプログラミングもしかり、どんなに巧妙に書いたつもりでも3日も経てば
改善すべき点が見えてきて全部をぶち壊したくなります。考えてみれば私の3年半
はその繰り返しでした。C++とは自分なりの言語仕様を作る言語なわけで、自分が
納得できる仕様を確立することができなかった時間と表現できます。

344 :hidebou:2010/07/28(水) 17:52:07
今回自分がたどり着いた結論は単純です。冒頭のコメントにこう書くだけです。
//クラスは原則としてIDispatch継承とし、IDsipatchExのコンテナに乗せること
このルールによりコンテナのポインターさえ入手できればプログラムの全域で
総ての関数を自由に呼ぶことができるというごく当たり前なものでした。


345 :hidebou:2010/07/28(水) 18:11:43
結果としてIClassFactory継承クラスをひとつ用意すればそのままパブリックCOM
サーバーとして機能するという副産物を生み出します。特にEXEの状態でCOMサーバ
ーを形成すれば、DLLとは違い主体的に動作をコントロールできます。自身がスタン
ドアロンの状態で起動された場合は内部実行メモリ空間へレジストリとは無関係に
COMインスタンスを提供できることをHTABOX2.EXEは利用しているわけです。

346 :hidebou:2010/07/28(水) 18:54:19
自身のサーバーをチェックする気がおきないほど熱狂し、失望し、疲弊した1ヶ月
でしたが、私は私の問いに回答を見出せたと安堵しております。ちょうど1ヶ月前
我が家に来てくれた子猫は私の傍らの椅子で寝そべりながらその愛らしいしぐさ
で私を慰めつづけてくれました。今回の仕事はその子猫に捧げたいと思います。


347 :デフォルトの名無しさん:2010/07/28(水) 19:51:37
JSがまるでだめなVBS初心者としては、mshta.exe用HTA→HTABOXコア用VBSへの整形を補助する
スクリプトを書きつつ正式版リリースに備えるべきですかね

デモ版で試させていただいた結果では、まず
dim Document: set Document = HTA.document
dim Window: set Window = HTA.window
としておいてHTAのスクリプトには行末に:を追加、
FunctionまたはSubのプロシージャを抜き出して関数の定義に押し込んでGetRefでイベントと接続、
残ったHTAは行頭に'を追加して'#BEGIN_HTMLと'#END_HTML間に送れば
なんとなく動きました(省略しすぎ)。

それと一仕事終えたところの要望で申し訳ないですが、今回のデモ版で使われているHWND_TOPMOSTを
<body topmost="true">のような感じで呼び出せると有難いです。まあ他にも、
独自コンテキストメニュー
ttp://www.kiku-net.com/webcraft/TIPS/TIPS-003.html
を使いたいのでHTAタグのcontextmenu="yes"復活とかきりがないんですが……

348 :hidebou:2010/07/28(水) 23:14:07
>>347
うちわのC++ルールがひと段落なだけでHTABOXについてはこれから本腰をいれさせ
ていただきます。力不足でファイルを出力しない形式でHTMLがドロップされた場合
VBSを隠蔽できていませんが、引き続き努力しようと考えております。

TOPMOSTについてはSetWindowPosをスクリプトスコープへ提供することでの対応に
なる予定です。HTAタグのcontextmenuは知りませんでした。現状では右クリック
イベントをメッセージループで独占していますから、余計なお世話になってしまっ
ているわけですよね。今後の課題とさせていただきます。

概ね技術的なチャレンジも終了し、方向性も決まってきたので、できれば複数のオフ
ィシャルユーザーで中枢部分を合議しなから開発してゆくという手法がとれないか
と考えています。今後ともご指導お願いいたします。

349 :hidebou:2010/07/29(木) 02:59:25
HTML中のVBS隠蔽なんですが、dim, sub, function 宣言されたものについては
隠蔽転送に成功しました。単にDISPATCH_PROPERTYGETが失敗したらGetRefという
ロジックです。ただしclass宣言はNGです。はたしてclass宣言だけで実体の無い
状態が何者なのか今のところつかみかねています。

350 :hidebou:2010/07/29(木) 03:21:43
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました。
DEMO.HTAには隠蔽VBSブロックが存在しHTABOX2.EXEへのドロップ実行ではソース
がJS同様に隠されることを確認できると思います。私は活きたVBSコードを書けない
のでVBS使いの方にこのスクリプトブロックへさまざまなコードを書いていただいて
不具合をあぶり出せれば大変助かります。classには未対応ということをご理解いた
だいたうえで。

351 :hidebou:2010/07/29(木) 10:49:30
VBSの隠蔽ブロック内でclassを定義しそのインスタンスも同一ブロックで生成すれ
ば隠蔽可能というルールにはできそうです。今のところ set Obj = New Hoge
で何が起こっているかを推察した場合class定義部分のコードを再評価してディス
パッチを形成しているとしか思えません。現実的に定義だけを隠蔽して非隠蔽ブロ
ックで実体を宣言することは無いと思いますので十分実用に耐えるのではと考えま
す。

352 :hidebou:2010/07/29(木) 11:33:55
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました
DEMO.HTAの隠蔽VBSブロックで単純なclassを定義、インスタンス化しています。
隠蔽VBSブロックでclassを扱う場合は宣言したブロックで変数にsetしてください。
class宣言そのものはHTMLスクリプトスコープに出現していませんから別ブロック
からnewしようとしても「クラスがありません」と警告されますがこれは仕様です。

353 :hidebou:2010/07/29(木) 12:00:39
VBSは速度の点で魅了的なのですが、大文字小文字の件と翻訳単位が「行」という
概念に縛られているのが気になります。でも文句があるならvbscriptのインター
フェースをラップしてParseに前処理を加えることでカスタマイズできるかも知れ
ませんね。99%他人の仕事で1%だけの労力なのに自分で作ったふりができるところ
がCOMの恐ろしさでもあります。

354 :hidebou:2010/07/29(木) 12:40:01
スクリプト起動とHTML起動の違いについてまとめます。
スクリプト起動のメリットは
...HTAの表示タイミングそのものをコントロールできる。
...必要によっては何度でもdocument.writeで内容を置き換えられる。
...デバッグ時のメニュー外観がリリース時と同じである。
HTML起動のメリットは
...通常のHTMLアプリケーションをそのまま実行可能である。
...ディスパッチ転送を意識することなくコードの隠蔽が可能である。

思ったより後者の出来が良かったのでコンパクトなものなら後者で書きたいですね。
ちなみにHTMLドロップ時にC++内部で行われていることはスクリプト起動動作の手
順とまったく同じです。HTA生成後は"WiteForWindow"で待機しています。


355 :デフォルトの名無しさん:2010/07/29(木) 18:22:33
<html>
<script language="vbscript">
Set xmlHttp = CreateObject("Microsoft.XMLHTTP")
xmlHttp.open "GET", "http://headlines.yahoo.co.jp/hl?c=flash", False
xmlHttp.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
xmlHttp.send

Set DataFile = CreateObject("Scripting.FileSystemObject").CreateTextFile("./Res.txt")
DataFile.Write xmlHttp.responseText
DataFile.Close
CreateObject("WScript.Shell").Popup "OK"

Set xmlHttp = Nothing
Set DataFile = Nothing
Window.Close
</script>
</html>

デモ版全てのバージョンで上記コードでは4行目、
xmlHttp.open "GET", "http://headlines.yahoo.co.jp/hl?c=flash", False
のようなXMLHTTPオブジェクトのopenメソッドがHTAとWSHのどちらからの起動でも
IEスクリプトエラーとなるのを確認しましたので、ご報告いたします。

……ソース隠蔽を検証する能力はないんです済みません

356 :355:2010/07/29(木) 18:29:15
あ、デモ版の機能制限によるものという可能性を失念していました。
もしそうでしたら>>355はスルーしてくださると幸いです

357 :355:2010/07/29(木) 21:18:35
XMLHTTPオブジェクトをMsxml2.XMLHTTPまたはMsxml2.ServerXMLHTTPの4.0以降にすると
エラーはでないのですが、>>342のカレントディレクトリ絡みからかRes.txtが同一フォルダに保存されないですね

358 :hidebou:2010/07/29(木) 23:30:10
>>357
詳細な動作報告をしていただいてありがとうございます。まずはっきりしているの
は、あらゆるパスは絶対パスで処理していただく事になります。これはabout;blank
で生成後document.writeする事が要因なのですが、拡張機能が遅延構築される従来
の欠点を克服できるという大きなメリットの代償ですのでご了承ください。

XMLHTTPまわりのエラーについてはこれから検証してみたいと思います。今後とも
ご指導よろしくお願いいたします。


359 :hidebou:2010/07/30(金) 00:30:22
エラーを確認しました。
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.open "GET", "http://headlines.yahoo.co.jp/hl?c=flash", False
「書き込みできません」が当環境Windows2000Serverで発生します。document.write
だからセキュリティー的に蹴られることはないと思うのですが、スレッドモデルが
原因だとすれば、貴重な勉強の機会をいただいた事になるかと思います。

360 :hidebou:2010/07/30(金) 01:29:15
クロスドメイン問題かも知れません。HTTP系はURL上のHTMLなら同一ドメインでしか
有効ではありませんよね。特例としてローカルファイルであることを条件に別ドメイ
ンへのリクエストが許可されるとしたら、about;blank生成のHTMLだと蹴られると
いうストーリーはありそうな話だと思います。

実ファイルを指定してHTMLを形成しながら生成前にWIN32ディスパッチを送り込む
方法がひとつだけあります。WIN32API的にHTMLダイアログを表示する方法です。

HTMLダイアログの引数オブジェクトとして指定したディスパッチは当然の事ながら
HTML構築時に参照可能だからです。HTAタグによる修飾は無効ですがHTMLダイアログ
ベースの方が自由度が高いと評価する理由はこの辺にあります。CreateDlgWindowの
引数として実パスを指定するオプションを追加したいと思います。

361 :hidebou:2010/07/30(金) 03:06:10
基礎的な検証は終了しましたが実装は後日となります。実ファイルを指定した場合
HTTP系のリクエストは成功しますし、格納後はres://に変換することで実ファイル
扱いになると考えます。こんな小さな変更でも予期しない事態が複数発覚し、その
都度アンドキュメントな部分の学習をさせていただいていることをありがたく感じて
おります。

362 :hidebou:2010/07/30(金) 04:31:22
今回のHTABOX2デモには「スクリプトからコントロールできるHTMLオブジェクトが
あれば、それがHTAでなければならない理由は希薄なのではないか」というテーマ
を持っています。「実ファイルでなければエラー」という事態は想定内で、そうい
う要求のために親を持たないHTMLダイアログをHTAと対等な機能を持つクラスとして
用意していた次第です。


363 :hidebou:2010/07/30(金) 12:52:33
実際にHTMLダイアログにWIN32ディスパッチを組み込んで生成過程を眺めるとなか
なか興味深い動きをします。好意的に解釈すれば「そいういう使い方を想定してい
ない」になりますし、そうじゃない見方をすれば「そういう使い方をして欲しくな
い」になります。改めてプログラミングとは終わりの無い推理ゲームだと痛感しま
した。この技術よりスケルトンHTMLファイルを読ませ、レジストリに依存しない形
で注入したディスパッチ経由で内容を自由に操ることができます。

364 :hidebou:2010/07/30(金) 14:21:10
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました。
暫定的にCreateDlgWindowはひとつの文字列引数をとります。従来の引数無しと等価
な呼び出しはCreateDlgWindow("about:blank")となります。

HTTP GETを実験するためのソースを提示します。c:\http.htmを以下の内容で作成します。
<html>
<head><title></title></head>
<INPUT type="button" value="Button" ID=Button1>
</body>
</html>


365 :hidebou:2010/07/30(金) 14:25:23
以下の内容のVBSを実行します。
dim WIN32
'#define set '
set WIN32 = CreateObject("HTABOX.Application"):WIN32.ScriptFullName = WSH.ScriptFullName
'#undef set
'HTAインスタンス、主要ディスパッチ、HWNDを変数に保存しています。
dim DLG: set DLG = WIN32.CreateDlgWindow("c:\Http.htm")
dim SCR: set SCR = DLG.Script
dim HWND : HWND = DLG.FraHwnd
sub GetHttp()
Set xmlHttp = CreateObject("MSXML2.XMLHTTP")
xmlHttp.open "GET", "http://headlines.yahoo.co.jp/hl?c=flash", False
xmlHttp.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
xmlHttp.send
Set DataFile = CreateObject("Scripting.FileSystemObject").CreateTextFile("c:\Res.txt")
DataFile.Write xmlHttp.responseText
DataFile.Close
WIN32.MsgBox "OK"
Set xmlHttp = Nothing
Set DataFile = Nothing
end sub
set SCR.Button1.onclick = GetRef("GetHttp")
call DLG.Show()
call WIN32.WiteForWindow(HWND)
call WIN32.MsgBox("正常終了")
set WIN32 = nothing
set DLG = nothing
set SCR = nothing

366 :hidebou:2010/07/30(金) 14:31:47
dialogArgumentsにWIN32インスタンスがある場合のメニュー構築部分を書いてな
いので現状ではあまりHTABOX2で実行するメリットがないことを謝らなければなり
ませんが、HTTP系のように実パスによるHTML生成が必要な時はCreateDlgWindow
で対応してゆこうと考えております。

367 :hidebou:2010/07/30(金) 15:16:01
364に<body>が抜けていました。お詫びして訂正いたします。
<html>
<head><title></title></head>
<body>
<INPUT type="button" value="Button" ID=Button1>
</body>
</html>

8月からサーバーを営業運用できるように整備する作業に入りますのでしばらくレ
スポンスが悪くなるかも知れません。自身のサーバー管理スクリプトをHTABOX2の
上で書いてコモンダイアログやWIN32APIを追加してゆくつもりです。この場が無か
ったら皆さんから励まされてプログラミングすることも無かったでしょうからこの
サーバーを管理してらっしゃるスタッフの方にも感謝申し上げます。

368 :hidebou:2010/07/31(土) 06:06:47
久しぶりに人間らしい睡眠時間を取ることができました。少しだけ本音を吐露させ
てください。私のやっていることはスクリプトをスクリプトの知恵の輪で解決しよ
うとすることを楽しみとしてきた方たちにとって大変興ざめな事だと思います。

従来でもオリジナルのCOMを使えば何でもありでしたが、逆にそういたことをせず
に知恵だけで問題を解決してゆくゲームがスクリプトだという捕らえ方もできると
思いますし、私自身それに興じてきました。

369 :hidebou:2010/07/31(土) 06:18:20
HTABOXコアそしてHTABOX2はEXEへのドロップまたは引数実行という起動手段をと
ることによりレジストリに登録していない形でのCOM拡張を実現していますから
従来の「COMを使わずに」が「何もインストールせずに」だとすれば単に置くだけ
で機能するHTABOXは「COMを使わずに」に含まれる反則技ということになります。

370 :hidebou:2010/07/31(土) 06:32:29
でも私が目標としているのは「スクリプトによるアプリケーション開発」なんです。
スクリプトを単に知恵の輪を楽しむルールではなしに実際に運用し、販売できる
アプリケーションを開発する手段として昇華させる為にコードを書いています。
「スクリプトは所詮個人のツール用」という嘲笑はいつまでも存在すると思いますが
私は私の夢を実現するために愚直にもがき続けようと思っています。

371 :hidebou:2010/08/01(日) 11:23:54
HTABOX2は新たな可能性を秘めています。現状ではGUIを持つスタンドアロン
アプリケーションを格納して配布することを目的としていますが、パブリック
COMサーバーとしてDLLまたはEXEを構築する手順をすべてスクラッチコード
で実装していますので、ドロップしたスクリプトをCOMDLLやCOMEXEとして
配布することに技術的障壁は存在しません。

372 :hidebou:2010/08/01(日) 11:35:44
したがって標準装備されたWIN32APIをコールするスクリプトコードをドロップ
するだけでなんらCOMに対する知識なしにオリジナルのCOMコンポーネントを
生成できる機能を提供することができます。従来スクリプトを使ってもらう
ということはコードを使ってもらうということでしたが、パース後のディス
パッチのみを使ってもらうという選択肢ができるわけです。

373 :hidebou:2010/08/01(日) 12:10:56
当然のことながら上記COMコンポーネントはオートメーションをサポートする
あらゆる言語環境から利用できることになります。動作環境がWindowsである
ことを公表する必要はあるでしょうが、内部がスクリプトであることを公表
する必要はまったくありません。

374 :hidebou:2010/08/01(日) 15:12:05
同じことがHTABOX2のリリース後に生成されるEXEにも言えます。
EXEを実行するユーザーはそのウインドウがCreateWindowExで生成されたのか
CreateHtaWindowで生成されたのかを知る必要はありませんし知らせる必要も
ありません。単にそのEXEが代価を支払うに足るものであるかどうかが評価
されるべきです。



375 :hidebou:2010/08/01(日) 15:35:04
私が抱いている夢の目的は単に技術的なことではありません。
「汗をかいた人間が報われるフェアーなルール」を実現することです。
資本や信用が無くてもそのアイディアと情熱でひとつのプロジェクトを完成
させ、それが正当に評価される世界を思い描いているのです。

376 :hidebou:2010/08/01(日) 15:56:33
いつかHTABOX2が国境を越えて、たとえ貧しい境遇に生まれた若者でもその
知恵と努力で世界を相手にアプリケーションを発表できる。そんな未来を
見るために、消えようとする蝋燭に油を継ぎ足すような日々をすごしています。

377 :hidebou:2010/08/02(月) 13:17:09
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました。
HTTPGETサンプルのhttp.jsを追加しています。http.jsは実ファイルを指定した
HTMLダイアログベースのウインドウでメニューを利用する簡単な例となっています。
また、可変長引数部分をきちんと書いてInvokeとInvokeExの速度を向上させました。

378 :hidebou:2010/08/02(月) 17:26:05
スレ違いという声を回避する為に「プログラミングにBGMは重要」という言い訳
を用意して愛聴しているラジオサイトを紹介します。ttp://www.dr.dk/radio/
128kですが極めて安定していますしコマーシャルも入りません。DR Worldという
チャンネルは各国の民族音楽を主体としていて日本代表は沖縄音楽の場合が多い
ようです。

379 :hidebou:2010/08/02(月) 19:09:49
プログラミングは精神的消耗戦の様相をていする場合があります。自分では
完璧と考えるソースコードがエラーの場合、それを解決できるのはさっきま
での自分とは別人の自分でなければなりません。そうでなければ永遠に間違
いに気づかないことなります。そんな状況を続けていればどうなるかは目に
みえていますよね。音楽は人間が作り出した最高の芸術形態だと思います。
時間と言う刹那から逃れることのできない悲しさもその楽しさも音楽に凝縮
されている気がします。食うに困らない状態になれたら一日ピアノを弾いて
暮らしたいと思っています。

380 :デフォルトの名無しさん:2010/08/02(月) 21:01:34
これならばHTMLから相対パスでの指定ができますね
……スクリプトでスケルトンHTMLを書き出し、起動後に削除という使用法を咄嗟に思いつきましたが、
>>339のファイル生成が不必要というガイドラインに抵触するようでもあり。

381 :hidebou:2010/08/03(火) 08:47:42
>>380
HTABOXそのものは一時ファイルを生成しないことを約束したいという意味での
ガイドラインですので開発者が必要とすればHTMLダイアログ用のHTMLファイル
を一時出力してパスの解決を簡略化するという手法は多いに活用されるべき
だと考えます。スケルトンHTML+スクリプトという手法は最も柔軟性のある手段
としてHTABOX2の主たる開発手法となるかも知れません。

382 :hidebou:2010/08/03(火) 09:31:06
HTAとHTMLダイアログの違いを理由も含めてまとめておきます。

HTAは実パスを指定して生成した場合onloadに間に合うような形のでディスパ
ッチ注入ができません。結果としてHTABOXコアのように注入を待ってWIN32を
使用する必要が生じます。これを回避するためにHTABOX2ではabout:blankで
生成->WIN32注入->HTMLのwrite->メニュー構築とcloseという手順にしたいと
考えています。

実パスを指定しないと動作しない、または書きにくいケースがあります。
HTABOX2では親の無いHTMLダイアログをHTAと同等に操作でき、実パスを指定
した生成を行ってもダイアログの引数としてWIN32が与えられていますから
開始当初からWIN32は存在します。WIN32を有効にするには実パスHTMLのスク
リプト冒頭で var WIN32 = window.dialogArguments; を宣言していただく
必要があります。

383 :hidebou:2010/08/03(火) 10:31:43
親の無いHTMLダイアログをウインドウとして採用した場合、これはほとんど
何の制約も無いウインドウとなります。プロセス中に複数生成させても何ら
問題は発生しません。HTABOXコアを発表する前にHTMLダイアログでこれを実
現しようとしていたとお話したことがありましたが、HTMLダイアログの場合
EXCELのように親ウインドウに子ドキュメントが複数存在するというMDI状態
を作れるのです。今後の研究課題ではあるのですがMDI関連のAPIをスクリプ
トへ公開してコントロールすることも可能だと考えています。

384 :デフォルトの名無しさん:2010/08/03(火) 19:53:39
デモ最新版だとMicrosoft.XMLHTTPでも大丈夫なので、
HTABOXコア本体と同じくIE5.5以上を動作条件とすることができますね。
ただ、
HTAをもっと流行らせる計画 Part2
http://pc12.2ch.net/test/read.cgi/tech/1220874815/48-51
あたりで触れられているXMLHTTPオブジェクトの種類によってはリファラにHTAのフルパスが含まれる、
というのがHTABOXコアではどうなるのかちょっと気にはなります。
まあ自力で検証する技量はないんですが……

あとhttp.htmウインドウのサイズと位置をどう指定されているのかご教示いただきたく。
やはりHTAをデスクトップアプリケーションらしく見せるにはこの記憶が欠かせないと思いまして。

385 :hidebou:2010/08/03(火) 22:39:26
>>384
考えてみるとHTABOXコアも一旦難読化したHTMLをdocument.writeしていますか
らローカルファイルからのHTTPリクエストは「書き込めません」がでます。
ただしフレーム形式としてサーバー上のHTMLの場合はdocument.writeにもかか
わらず成功していたので不思議です。勉強が足らないと痛感しています。

HTMLダイアログの初期サイズなんですが、リリース時にはデフォルトのアプリ
ケーションウインドウサイズにしようと考えています。勿論非表示な状態から
表示する段階でSetWindowPosにより自由なサイズとすることもできるようにな
ります。現状はまったくずさんなことにHTAが事前にCreateされていればその
サイズをデフォルトとして記憶、Createされていなければ640*480というのが
真実です。



386 :hidebou:2010/08/03(火) 22:58:53
正直Windowsのデフォルトサイズを取得する方法が解からなくてCW_USEDEFAULT
を指定したWindowを無駄に生成して取得することになるんですが、例によって
基本的な知識が抜けている結果の愚行ではないかと不安です。どなたかもっと
スマートな方法をご存知の方そっと教えてください。

387 :hidebou:2010/08/03(火) 23:56:02
位置についてもリリース時はCW_USEDEFAULTで生成した空振りウインドウの値
をそのまま採用するつもりです。それが一番普通のアプリケーションらしく
見えるのではないかと考えているからです。現状のHTMLダイアログはサイズが
決定された後にスクリーンサイズを取得しセンタリングされています。

388 :hidebou:2010/08/04(水) 01:04:34
どうも私のプログラムとBrowseForFolderの相性が悪いことに気づいてはいた
のですがほったらかしにしていました。フォルダダイアログをズリズリする
とソリティアのクリア画面状態だったんですが、なんとか打開策が見つかり
そうです。これで最低限の条件はクリアできたかなぁっと思っています。

389 :hidebou:2010/08/04(水) 18:07:35
ttp://kuroda.bglb.jp/htabox/demo.zipを更新しました。
コモンダイアログを使用する例としてDialogs.jsを追加しました。あくまでデモン
ストレーションですからリリースまでに仕様の変更があるかもしれませんが若干の
説明をさせていただきます。

SCR.Func1 = function()
{
var Fold = WIN32.BrowseForFolder(HWND,"タイトル",0x0010,"c:\\");
var Path = (Fold != null)? Fold.Items().Item().Path : "";
WIN32.MsgBox(Path);
}
SCR.Func2 = function()
{
var Path = WIN32.GetOpenFileName(HWND, "開く", "ALL(*.*)\\0*.*\\0TEXT(*.txt)\\0*.txt\\0", "c:\\", 0);
WIN32.MsgBox(Path);
}
SCR.Func3 = function()
{
var Path = WIN32.GetSaveFileName(HWND, "保存", "ALL(*.*)\\0*.*\\0TEXT(*.txt)\\0*.txt\\0", "c:\\", 0);
WIN32.MsgBox(Path);
}


390 :hidebou:2010/08/04(水) 18:14:47
WIN32.BrowseForFolderはSHELL32形式のフォルダオブジェクトを返しますので
上記例のようにItems....でパス文字列を取得する必要があります。第3引数は
オプションの数値です。オプションフラグの詳細についてはMSDN等で確認できる
と思います。

391 :hidebou:2010/08/04(水) 18:23:23
WIN32.GetOpenFileNameとWIN32.GetSaveFileNameはほとんど同じなのでまとめた
説明をします。まず第3引数のフィルターですが、本物のWIN32APIは区切りとして
\0を用いますが、スクリプトからの呼び出しでは文字列中に\0を表現することが
できません。そこで\\0を代替とすることにより内部で\0に変換しています。
終端は\0が二つ必要ですが文字列終端には自動的に一つ付加されますのでスクリ
プトコードからは\\0を終端とすればいいわけです。

392 :hidebou:2010/08/04(水) 18:34:17
最終引数はオプションです。OFN_OVERWRITEPROMPT 0x00000002なんかは保存時
に便利なオプションかも知れません。これを書きながらこのオプションの部分を
コメントアウトしてビルドしていたことに気づきましたので数分後に再度更新し
たいと思います。デモなんですがこれで少し遊べるようになったかと思います。

393 :hidebou:2010/08/04(水) 18:56:24
ダイアログの枠にマウスを持っていってそのまま親ウインドウへ持っていく
と<-->になってしまうのはちょっと美しくない点なんですが、これを解決す
るためにはダイアログで親のアクティブを奪ってからその子としてコモンダ
イアログを...というような手法しか成功していないものですから今後の課題
とさせていただきます。


394 :hidebou:2010/08/04(水) 20:05:40
HTABOXコアからHTABOX2へ移行で最大のテーマとしているのがツールとしての
透明性です。従来HTABOXコアが内部で処理している事をそのままCOMとして公
開すれば、書いている私も楽だし開発する側もメカニズムが見えて利用しや
すくなるはずだという発想からスタートしています。事実、現状でのソース
ボリュウムはHTABOXコアの半分にも満たない量ですんでいます。

395 :hidebou:2010/08/04(水) 20:21:06
今後もっと重要な課題と考えているのがWIN32APIの動的呼び出しです。
現状では私が用意しないといかなるWIN32APIも使えないわけですが、例えば
MessageBoxという名前要求があった場合にuser32.dllの当該モジュールを
動的にコールできるようにしなければならないだろうと考えています。


148 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)