ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 19:06

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 9 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年6月21日(火) 22:26 
いつもお世話になっております。

たとえばmp3プレーヤーで、
プログラムアイコンやショートカットアイコンに、ファイルをドラッグ&ドロップして、起動した時に、ドロップしたファイルのパスを入手するには、どうすればいいんでしょう。

特別なハンドルでもあるのかと、オフィシャルユーザーズガイドや、ウェブ検索で彷徨いましたが、見つけられずにおりますm(__)m


通報する
ページトップ
   
投稿記事Posted: 2005年6月21日(火) 22:46 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
プログラムアイコンやショートカットアイコンへのドラッグアンドドロップはコマンドライン引数として渡されます。
つまりGetCommandLine()で取得できますが、これには頭に自分自身のパスが含まれているのでこれを除去する必要があります。

しかしこれはSHLWAPI.DLLにPathGetArgv()というのがあるので、
結局PathGetArgv(GetCommandLine())とすればいいわけです。

ちなみに関連付け起動もコマンドライン引数で渡されるので、これをやれば関連付けにも対応することになります。


通報する
ページトップ
投稿記事Posted: 2005年6月21日(火) 23:14 
> プログラムアイコンやショートカットアイコンへのドラッグアンドドロップはコマンドライン引数として渡されます。

なんとargvとは(^_^; DOSのCと格闘していた頃を思い出しました。ありがとうございました。


通報する
ページトップ
   
投稿記事Posted: 2005年6月21日(火) 23:32 
オフライン

登録日時: 2005年5月31日(火) 09:34
記事: 141
お住まい: 北海道
> プログラムアイコンやショートカットアイコンへのドラッグアンドドロップはコマンドライン引数として渡されます。
> つまりGetCommandLine()で取得できますが、これには頭に自分自身のパスが含まれているのでこれを除去する必要があります。

かなりの隠しワザですね。
MSDNでもヒットしないですし,Googleですらもヒットしない関数ですし(爆)

_________________
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================


通報する
ページトップ
投稿記事Posted: 2005年6月22日(水) 12:30 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
> しかしこれはSHLWAPI.DLLにPathGetArgv()というのがあるので、
> 結局PathGetArgv(GetCommandLine())とすればいいわけです。

とりあえずAscii関数だろうという推測の元、次のように宣言してみました。

Declare Sub PathGetArgv Lib "shlwapi.dll" Alias "PathGetArgvA" (ByVal p As BytePtr)

しかし、これではうまくインポートできませんでした。
そこで少し調べたところ、僕の環境では、SHLWAPI.DLLにPathGetArgv、またはこれに類似のエクスポートは存在しませんでした。
DLLを16進ダンプして検索したところ、PathGetArgvはかすりもしませんでした。

SHLWAPI.DLLのバージョン情報は、次の通りです。
ファイルバージョン:6.00.2900.2668 (xpsp_sp2_gdr.050430-1553)
製品バージョン:6.00.2900.2668
製品名:Microsoft(R) Windows(R) Operating System

なんと、OSの一部だったんですね。こんなDLL知りませんでした (^^;
それはいいとして、資料が少なすぎ(というか、皆無)なのでどういう事かさっぱりわかりません。
あれば便利な関数だけに、惜しいものです。


通報する
ページトップ
投稿記事Posted: 2005年6月22日(水) 14:45 
オフライン

登録日時: 2005年6月01日(水) 23:27
記事: 82
お住まい: 北海道札幌市
ノッチです。

> DLLを16進ダンプして検索したところ、PathGetArgvはかすりもしませんでした。

僕の環境でダンプすると"PathGetArgv"はありませんでしたが、
"PathGetArgsA"という関数が見つかりました。
Googleで検索しても出てきますので間違いないと思います。
(ヒット数は少ないですが)

関数の宣言は、
コード:
Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (ByVal p As BytePtr) As Long
と、こんな感じでしょうか?
戻り値は、正常時は引数部分のアドレス。
それ以外はNull文字のアドレスらしいです。


通報する
ページトップ
投稿記事Posted: 2005年6月22日(水) 15:16 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
> > DLLを16進ダンプして検索したところ、PathGetArgvはかすりもしませんでした。
>
> 僕の環境でダンプすると"PathGetArgv"はありませんでしたが、
> "PathGetArgsA"という関数が見つかりました。

まさか、Argの複数形とは・・・orz


> 関数の宣言は、
>
コード:
Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (ByVal p As BytePtr) As Long
> と、こんな感じでしょうか?
> 戻り値は、正常時は引数部分のアドレス。
> それ以外はNull文字のアドレスらしいです。

じゃあ、正確には
コード:
Declare Function PathGetArgs Lib "shlwapi.dll" Alias "PathGetArgsA" (ByVal pszPath As BytePtr) As BytePtr
と、こうなるわけですね。(戻り値の型が変わっただけ)
失敗時の戻り値が特徴的ですね。引数がない場合は終端のNull文字へのポインタが返り、関数が失敗すればNULLが返るそうです。なんともややこしい。

それから、MSDNライブラリ(日本)には掲載されていませんでしたが、MSDN Library(英語)のほうにはちゃんとありました。
(旧)C++のサンプル付きです。(coutとか使われているあたりがC++。ヘッダのインクルードに拡張子 .h が付いているあたりが旧式。)
ご参考まで↓
http://msdn.microsoft.com/library/defau ... etargs.asp


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年6月24日(金) 00:19 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
曖昧な記憶でPathGetArgvと書いてしまってお騒がせしてしまいました。どうも済みません。

さてSHLWAPI.DLLはとっても便利なんですけど、Win95/NT4には初めから入っていないのが玉に瑕です。(自分で振っておきながらですが)
最低でもIE4、関数によってはIE5を要求してきます。(しかも再配布不可)
PathGetArgsはSHLWAPI.DLLのバージョン4.71(IE4)以上に搭載されています。

あまり問題にはならないでしょうけど一応念のため。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年6月24日(金) 00:52 
オフライン

登録日時: 2005年5月31日(火) 07:49
記事: 162
>> イグトランス様

ついでなのですが、他にも WaitForSingleObject を WaitForSingleHandle と記述されたことがありました。
いつか忘れたのですが、そのとき気づいたにもかかわらず指摘しませんでした。すみません。
はて、いつだったかな・・・たぶん新掲示板に移行した後だと思いますが、それでも結構な量ですので、探していません。物臭ですから。


[追記] 6月25日 01:36
実は、このページには検索ボックスがあったのですね。気づきませんでした。
それで検索してみたところ、簡単に見つかりました。便利~♪
http://www.discoversoft.net/forum/viewt ... ngleHandle


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 9 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Semrush [Bot] & ゲスト[9人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean