ページ 11

特殊フォルダの取得

Posted: 2008年8月02日(土) 07:54
by 三毛CAT
デスクトップやマイドキュメントなどの、特殊フォルダのパスを取得する方法はありますか?
マイドキュメントに自動保存などの機能を付けたいのでできたら教えてください。

Re: 特殊フォルダの取得

Posted: 2008年8月02日(土) 13:02
by M.S.
> デスクトップやマイドキュメントなどの、特殊フォルダのパスを取得する方法はありますか?
> マイドキュメントに自動保存などの機能を付けたいのでできたら教えてください。

ほとんどコピペですが…

SHGetSpecialFolderPath() というのを使います。
他の定数は参考の二つ目のサイトに載ってますので、
知りたい場合はそちらをご覧ください。

参考:
SPIRIT さんの WinTips
WinAPI Database for VB Programmer

お礼

Posted: 2008年8月02日(土) 14:48
by 三毛CAT
ありがとうございます!!!
でも、
ダイアログボックスを取得させるウィンドウハンドル
とは何ですか?

Re: お礼

Posted: 2008年8月11日(月) 15:53
by M.S.
> ありがとうございます!!!
> でも、
ダイアログボックスを取得させるウィンドウハンドル
とは何ですか?

スイマセン、間違いです
「取得」ではなく、「所有」です

すいません

Posted: 2008年8月14日(木) 16:00
by 三毛CAT
それで、その、
「ダイアログボックスを所有させるウィンドウハンドル」
とは、何のことで、何を指定したらいいのですか??

Posted: 2008年8月14日(木) 17:19
by konisi
ダイアログボックスより上に来るのがまずいウインドウのハンドル という感覚で指定してます。間違ってるかもしれませんが・・・

「使い方」にあるように、GetDesktopWindow()でもいいと思いますし、
プロジェクトならhMainWnd等でいいと思います。

でもこの「使い方」のString型の使用方法はAB3時代の物のように思えます・・・
このまま流用する時は引数bufをStrPtrでくくるか、
自信があるようならString型を使わずに*Byte型やByte型配列を用いるほうがいいと思います。

Posted: 2008年8月14日(木) 21:34
by イグトランス
GetDesktopWindowはだめです,絶対。hMainWndなど渡すものがなければNULLです。

この引数のウィンドウハンドルを使うときというのは,つまり親にしてダイアログを表示するときです。そのダイアログが表示されている間,親のウィンドウは無効化(操作できないように)されます(例えばProjectEditorでオプションや名前を付けて保存を表示している間,ファイルの編集ができないのもこのためです)。

もし,GetDesktopWindow()を渡してダイアログを表示しようとすると,デスクトップが操作できなくなる,つまり表示されているすべてのウィンドウが操作できなくなるという結論が導き出されてしまうのです。

現実には,誤ってGetDesktopWindow()を渡すプログラムが多かったため,GetDesktopWindow()が渡されたらNULLが渡されたかのように振る舞うようになっているのでそういうことにはなりませんが,だからと言ってGetDesktopWindow()を渡すことが正当化されるわけではありません。

参考: The Old New Thing : What's so special about the desktop window?

Posted: 2008年8月14日(木) 23:57
by SPIRIT
自分で書いておいてなんですが、イグトランス様のおっしゃるとおり、GetDesktopWindow() はいけません(^^;)

今回質問されている関数に関わらず、DialogBox 関数なども、親ウィンドウが無い場合は NULL を指定するほうが良いです。

今からしてみれば全く分かっていない頃に書いたもので、しかも内容が古くて申し訳ありません(_ _)

ちなみに「The Old New Thing」は翻訳されて本にもなっているので、手にとってみるのもいいかと思います。
今回のことに限らず、非常に役に立つことがたくさん書いてありました。おススメです!