• 締切済み

SHBrowseForFolderに関する質問

WinAPIを使ってプログラムを作成中です。 SHBrowseForFolder関数でフォルダを選択するようにしていて、それは成功したのですが、一つ問題が出てきました。 プログラムの用途上、フォルダを選択する時にUSBドライブの差し替えが必要になります。ところがSHBrowseForFolderで表示されたフォルダ一覧は、USBドライブを抜いたり差したりしても一切更新されません。BROWSEINFO.lpfnに指定したプロセジャーにイベントでも送られてくれれば対処もできるのですが、それも無いようです。 何か良い対処方法はないでしょうか?

みんなの回答

回答No.1

WM_DEVICECHANGEというメッセージがUSBの挿抜を契機に通知されませんか? これを使うことは出来ないでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SHBrowseforfolderについて質問です。

    こんにちは。 Access2000で作成しているプログラムのなかで、リストの作成先を指定するために、SHBrowseforfolderというAPIを使用しています。試行錯誤の末、フォルダを選択するところまではできたのですが、細かい設定が分からないのです。 ネットワークドライブの選択はできないようにする、とかファイルも選択できるようにする、とかモジュールに書いているのに、全然できていません。 あと、フロッピードライブやMO、CD-ROMなどの指定はできないようにしたいのですが、それは不可能なんでしょうか。自分でも指定されたパスが正しいか、チェックをかけているのですが、フロッピードライブやMO、CD-ROMなどを指定すると、エラー番号「52」で帰ってきて、そのあとに、自分が出しているメッセージ(「パスが間違っています」)が出てしまうのです。 エラー番号を拾えばいいのかもしれませんが、それ以外にエラーが出てしまうと困るので、それならいっそのこと、最初から指定できないようにしたいのです。 どなたかよい方法をご存知の方、回答よろしくお願いします。

  • 【C#】 あるイベントから別イベントを呼び出す。

    タイトルの通り、あるイベント内から別イベントの処理を呼び出したいと 考えています。ですが、方法がわかりません。 【質問投稿に至った経緯】 現状は、検索から一覧を表示し1つを選択、選択した内容の更新を行なうプログラムを作成しています。選択した内容を更新するところまではできました。ただ、更新内容を確認できるよう一覧画面に前回検索した内容を一覧表示させたいと考えています。この時、検索イベントを呼び出し、一覧を再表示させようと思っています。

  • ファイルを開くプログラムが異常

    症状はマイコンピュータ→Cドライブをクリックすると「ファイルを開くプログラムの選択」が登場します。 本来は、ドライブ内のフォルダが表示されるはずですが。 「ファイルを開くプログラムの選択」の一覧の中にも該当プログラムが見当たりません。色々調べてウイルスチェックでUSBからウイルス感染していましたので駆除はしました。 しかし、元には戻りませんでした。 正常に修復できる方法を教えてください。

  • windows updateの不具合について

    自分のPCではないので詳細は分からないのですが、2010年の6月くらいからwindows updateで 更新プログラムをインストールすると再起動時に「修正プログラムは正しく構成されませんでした。変更を元に戻しています。」というメッセージが出て更新ができないようです。私が軽く見たのですが、そのエラーのせいで40個近く更新プログラムが貯まっています。 更新プログラムの一覧からいくつか選択して更新すると成功する場合と失敗する場合があるので、失敗する場合のほうになんらかの問題があるのかと思ったのですが、成功の場合でも再起動時に 「修正プログラムは正しく構成されませんでした~~」というメッセージが出ました。 この不具合の対処方が分かる方は教えてください。 よろしくお願いします。

  • SHGetPathFromIDList によるパス取得

    IShellFolder によって、ある LPCITEMIDLIST から SHGetPathFromIDList を利用してパスを取得しようとしているのですが、意図したパス情報が返されないので困っています。 詳細 SHBrowseForFolder で呼び出せるフォルダ選択ダイアログのような フォルダ選択画面を作成しています(諸事情がありフォルダ選択ダイアログが使えません)。 そこで次のサイト http://hp.vector.co.jp/authors/VA016117/winsdk.html を参考に、ユーザーが選択したフォルダのパスをSHGetPathFromIDList を呼び出して取得しようとしているのですが、なぜか例えば "D:\test" は "C:\Documents And Setting\user_name\デスクトップ\test" として返されるため、次の段階のディレクトリのオープン処理(FindFirstFile)に失敗してしまいます。 SHBrowseForFolder のようにドライブレターから始まるパスを取得するにはどうすればいいのでしょうか。

  • ウィルス駆除後の不具合

    ウィルスを駆除した後、マイコンピュータからドライブを開こうとクリックすると、プログラムを選択するよに一覧が表示されます。 どのように対処したらよいでしょうか?

  • データをDドライブに移行、内容が見られません。

    昨日「Dドライブに新フォルダを作る方法」を質問し、回答を得てDドライブにMAILフォルダを作成し、OEのデータをDドライブに移行しました。 DドライブのMAILフォルダを開くと内容別アイコンが出てきますがどのアイコンをクリックしても「このファイルは開けません。開くには作成元のプログラム名をインターネットで自動的に検索するか、コンピューターにあるプログラム一覧から手動で選択して下さい。」と表示され内容が見られません。 このままでも支障はないように思われますが、何方か解説をお願いできませんか? なおコンピューターにあるプログラム一覧にはそれらしきものはありません でした。  

  • USBが開きません

    おそらく、ウイルスに感染したみたいなのですが、 USBが開きません…。 同じ質問が過去にも投稿されているのですが、 お勧めのHPを見てもよくわからず…。 念のため、状態としては、 USBを差し込むと「ファイルを開くプログラムの選択」 という表示がでて、プログラムの一覧がでてきます。 ちなみに、Vistaではどうもないのですが、XPでこの状態になります。 また<http://blog.pc-helpdesk.jp/2007/04/usb_1.html> を参考にしてみたのですが、「修理、解決策」のところで、 <C:\Windows\Explorer.exe>を選択するとあるのですが、 <C:\Windows\Explorer.exe>が見当たりません…。 また、マイドキュメントから行くとファイルを開けたのですが、 「ドライブが開いたところで、ドライブのルートフォルダ (DドライブならD:\の真下 一番上の階層)の、 AutoRun.infを削除します」のところで、 <AutoRun.inf>が見当たりません。 最後に、解決したとして、 その後もこのUSBを使い続けていてもよいのでしょうか? PCにあまり詳しくないので、すいませんが、 簡単な方法を教えていただけると助かります。 よろしくお願いします。

  • C言語でDOS画面のプログラム(できるなら、メニュー方式で関数ポインタとか使ったものがいいです)

    いまどきあるかわかりませんが。。 C言語をだいぶ勉強したので本格的にプログラムを作ってみたいです(趣味プログラマーです)。 そこで、DOS画面(というかコマンドプロンプト)で、メニューを選択して色々な処理を行うプログラムを作ってみたいです。私は、関数ポインタが気に入りましたので、関数ポインタがあると尚いいです。 いまどき、こんなプログラムがあるか知りませんが、ご存知の方はおしえてください。よろしくお願いします。WINAPIとかは、なしの方針で・・

  • USBメモリーに空のファイルフォルダやファイル

    使用中のUSBメモリーの1つに、空のファイルフォルダが3個、空ファイル3個が作成され、 更新日時はまだ先の2014./03/20や 2016/04/13であったり、まったくなかったり、 フォルダ名は「4td2台.2.td」や記号の組み合わせ、 開こうとすると「利用できない場所を参照・・・」「アクセスできません・・・」「開くプログラムの選択・・・」「このファイルは開けません・・・」、 削除しようにも「削除できません・・」となります。 このUSBメモリー以外には、このような事例は今のところ生じていません。 対処方法をお教えください。