プロが教える店舗&オフィスのセキュリティ対策術

 今、API関数GetOpenFileNameで「ファイルを開く」コモンダイアログを出して、
 そこから選んだファイルのフルパスをテキストボックスに入れています。
 さらにそのテキストボックスの中に入ったフルパスをAPI関数ShellExecuteで起動
 させようとしているのですが、起動してくれません。
 ちゃんとフルパスは入っています。
 試しに新しいフォームを作ってShellExecute単独で、直接フルパスを
 指定してやってみたところ起動できました。
 問題は、パスではなく他の引数でしょうか??
 ちなみに第1引数   : me.hwnd
     第2引数   : "open"
     第3引数   : フルパス
     第4・5引数 : vbNullString
     第6引数   : SW_SHOW
と指定しました。
 第4と5の引数はvbNullCharや""と指定してみました。

 よろしくお願いします。

A 回答 (4件)

ShellExecuteの戻り値は?



参考URL:http://www.vbvbvb.com/jp/gtips/0951/gShellExecut …

この回答への補足

 戻り値は2でした。
 参考URLへ行ったんですが、2なので
 ERROR_FILE_NOT_FOUNDってことですよね??
 ShellExecuteのみではちゃんと起動するんです・・・。
 
 まだ、そのURLのプログラムを動かしていないのでこれから
 やってみます。
 引き続きおつきあいお願いします。

補足日時:2003/06/13 14:18
    • good
    • 0

[仮説その1]


GetOpenFileName の処理で、文字列バッファからNull文字を取り除いていない。(Len関数で文字列長を検証可能)

修正例は、下記。

Dim lngRet As Long

lngRet = InStr(ofn.lpstrFile, vbNullChar)

Select Case lngRet
Case 0
strFullPath = ofn.lpstrFile
Case 1
strFullPath = ""
Case Is > 1
strFullPath = Left$(ofn.lpstrFile, lngRet - 1)
End Select


[仮説その2]
パスをダブルクォートで括っている。

ファイルのパスを扱うルーチンでは、スペースを含むパス、DOSの8.3形式を超える(いわゆるLongFileName)パスはダブルクォートで括るのが定石ですが、ShellExecute関数は例外で、ダブルクォートなしで動作します。

※ ダブルクォートがあると、NT4.0環境で動作しません。(Win9x環境および、Win2000以上の環境では問題なし)


いまどき、NT4.0でもないので、仮説(1)が有力だと思われます。
    • good
    • 0
この回答へのお礼

 詳しいご説明ありがとうございました☆
 実は・・・自分で解決いたしました。
 報告が遅くなってしまって、お手数をおかけしました。
 やっぱり問題になっていたところはパスの指定の仕方でした。
 変数の中にフルパスが入ってたんですが、パスの中ではなく、後ろの方に
 スペースが入ってたようです。
 trimして入れたんですが・・・。
 

お礼日時:2003/06/14 01:50

いや カレントドライブの変更したら、いけないかなぁー


という希望的観測から、ChDriveと言ってみた
    • good
    • 0

ChDriveとか?

この回答への補足

 ヘルプでChDriveを調べてみましたが、いまいち私の質問との関連性が
 わかりません・・・。
 申し訳ありませんが、詳しく説明していただけませんか?
 よろしくお願いします。

補足日時:2003/06/13 14:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!