DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

なぜ.vbsファイルはドラッグ&ドロップを受け付けるんだろう。


   ?
  ∧,,∧
 ミ,,゚Д゚彡
 ミ,,cっ,,ミ
 ミ,,,,,つ,,ミ  なんでやねん



DSHを作成していて、ふと、気がつきました。
作成した、.dsファイル(=DelphiScriptファイル)はクリックすると内部でコンパイルしてexe化して動作しますが、
この.dsファイル自体へのドラッグ&ドロップが受け付けないんですよ。


これだと、.dsファイルはバッチファイルやExeファイルなどに比べて使い勝手が悪いのです。

WSHも1.0までは同様の問題を抱えてたみたいです。


こちらをみると、わかるかな。

> Windows Scripting Host Laboratory
> http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/index.html
> 3.ドラッグアンドドロップのサポート

これがWSH2.0になって改善されたそうですが、この仕組み、どうなってんじゃろか。


これがOSを作っている会社の強みですかしらぁ~?
参りますな。こういうの。
vbsファイルのレジストリ設定を利用したら、dsファイルも同じような事ができるのか?


Windowsは通常、.txt、テキストファイルのアイコンや
そのショートカットファイルのアイコンに対して
他のファイルを.txtファイルへのアイコンにドラッグ&ドロップしても
ドラッグ禁止マークがでます。

VBSのドラッグドロップ画像
vbs_DD.png

こちらはOK

TXTのドラッグドロップ画像
txt_DD.png

こちらはダメ。

もちろん、ファイル⇔ショートカットファイル
どっちにやっても、出来る出来ない、は変わらずです。

今日まで、知らなかった。

まあ、ドラッグ&ドロップファイルを引数として取得できないとしても
とりあえずWSH1.0もそうなのだから
気にせず、さっさとDSHの配布はしてしまいましょう。

DSHは、かなりおもしろ機能だと思うので
とにかく、D2007所有者...というかDelphi所有者向けに
使ってもらえるように、自作インストーラーでもつくりますよ。

それなら、ライセンスに微塵の後ろめたさもないわけですから。


インストーラで、あなたのお手持ちPC内のdcuファイルやdcc32.exeをゲットしてDSHに組み込める形にもっていってみましょうかしらね。

しばしお待ちを。

...Delphi7以前って、どこにDCC32EXEやdcuがあったのかしら、
もうわすれてしまいましたな。。
スポンサーサイト

| 未分類 | 01:22 | comments:8 | trackbacks:0 | TOP↑

COMMENT

DropHandler が要るですよ。
exefile や VBSFile のレジストリキーの DropHandler の枝をコピペするだけいけるかも。
ダメだったら DropHandler を自作する必要があるかと。

| 道化師 | 2007/07/21 16:25 | URL | ≫ EDIT

ttp://homepage3.nifty.com/yamakox/DropOnScript/index.html
こういうソフトもあるようです

| tk | 2007/07/22 04:13 | URL |

すっげー!
情報サンクスコ!

DropHandlerがなんなのかよくわかんないです。
このプログラム自体をDelphiで作る事はできんもんじゃろですか?

| ミ・д・彡 | 2007/07/22 04:45 | URL |

いま、DSHをちまっと弄ってみたんだけど、まだコマンドラインベースでの引数渡しも実装していない・・・という認識であってる?
これをやるにはまずdsh.exe自身が全ての引数を受けとらにゃ話にならんので、.ds の関連付けで DelphiScript\shell\open\command キーのデフォルト値を "ほげほげ\dsh.exe" "%1" %* みたいに %* を加えて全てのコマンドライン引数を dsh.exe に渡るようにしてやるですよ。そんで、%* で受け取った引数リストを dsh.exe でパーズして .ds をコンパイルした結果の .exe を実行する時に渡してやる必要があるとですよ。

# ここだとタイムラグがでかいんで、メッセでもおk。

| 道化師 | 2007/07/22 14:53 | URL | ≫ EDIT

めっせでも、Delphi製のスカイープでもいいんですが、もっと、いいのは、漏れがDesktopVPNサバを用意するので、それを操作してもらったりなどしたらあらゆる意味で便利っすかね。(w
あ、操作専用のPCを接続用意しないといけないな。自宅サバ予定のヤツです。

何にせよ、改造自由です。公開自由です。非公開も自由です。ガツガツやってくださいまし。

ご存じのとおりかとも思いますが、漏れは地道系の人みたいなので最高な技術力はないかもなので、俺をおいてけぼりにして開発進んでもいいですし、コミュニケーションのタイムラグは見捨てておいて、勝手に改造していただいたコードをみて語るコミュニケーションもいいかもしれません。

無責任になるつもりはないですが、最高なお力にはなれそうにもない。そんなところを知った上で、面白いネタで遊び、使い、してみましょう。


>DelphiScript\shell\open\command キーのデフォルト値を "ほげほげ\dsh.exe" "%1" %* みたいに %* を加えて全てのコマンドライン引数を dsh.exe に渡るようにしてやるですよ。

これは、了解。
付属のAssociationFunction.dsの
> Reg.WriteString('','"'+DSHFilePath+'"'+' "%1"');
この行を
Reg.WriteString('','"'+DSHFilePath+'"'+' "%1" %*');
にすればいいのね。

でも、これをしたことの効能がわからない。
引数つけた呼び出しのテストコードがあるとよさそうね。


今日は、寝ますん。おやすみなさい。

| ミ・д・彡 | 2007/07/23 00:33 | URL |

うぉっし、俺が一肌脱いでやる! まかせろ、Delニャン!

Pascalのコードなんて1行も書いたことはないけど、
何度かPascalのコードを見たことはあるから、きっと大丈夫!

# 一応、いまはやる気まんまんだけど、明日の朝になったら
# Delphi? ・・・ああ、海生哺乳類の・・・( ゚Д゚)ノ そりゃDolphinや!
# などと独りでお寒いボケとツッコミをやってそうないい加減なヤツなんで
# 真に受けんでね。

| 道化師 | 2007/07/23 01:12 | URL | ≫ EDIT

ごめん、Delにゃん。 C++Builder 2007 しか持ってない俺の環境じゃぁ、SystemUnit.dcu (+他)がなくて dsh.dpr がコンパイルできねぇ。orz

んでも、とりあえず・・・
dsh.dpr の
ParameterText: String;
って、行の下に
DshParameterText: String;
を加えて、同じく
ParameterText := StringReplace(CmdLine, '"'+ParamStr(0)+'" ', '', [rfIgnoreCase]);
って、行の下に
DshParameterText := StringReplace(ParameterText, '"'+ParamStr(1)+'"', '', [rfIgnoreCase]);
を加えて、最後に
EasyShellExecuteCmdLine(ExecuteFilePath, True);
とかって行を
EasyShellExecuteCmdLine(ExecuteFilePath +DshParameterText, True);
にすればコマンドラインベースで引数渡しはいけると思う。
で、これができたらあとは DropHandler のレジストリの記述を vbs からパクればファイルのドロップも受け付けるようになると思う。

| 道化師 | 2007/07/28 13:52 | URL | ≫ EDIT

いつもありがとうございます。お返事もとどこおる、忙しさ....スマソン。
といいつつ、DelFusaFloorの更新をがんばったりしてみたのですが。

DSHは、TurboDelphiなどをお使いになられると、スキーリするかもしれません。
C+Bはモテないので、試すことはできないっす。

ぼちぼち、がんばっていきましょう。

| ミ・д・彡 | 2007/07/31 01:40 | URL | ≫ EDIT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/64-1c59e215

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。