|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第477回 デスクトップフォルダ取得 発行 2004年7月21日(水曜日) 発行数 約2800 {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンは、主にまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・横60文字で作成し、インデントは大抵半角スペース4つです。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、メルマガのホームページでお願いします。 ・過去ログはバックナンバー(下欄参照)を活用して下さい。 ・内容は私が感じたもので、最新の技術も、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 ・セキュリティ突破のため、暗号化された単語があります。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 先日、投網に行ってきました。 久しぶりです。 ひょいっとなげたら、 ★45センチのボラが2匹、 ★いや、あえて言おう、トドであると!(総帥演説風) ゲットできました、一度にです。 あ、これでいいやーっと、その日は帰りました。 大収穫です。 お刺身おいし〜 /*========================================================*/ 株日記 /*========================================================*/ 野村のバーチャル株式投資倶楽部 http://www2.nomura.co.jp/vstock/VirtualServlet? (ゲストでログインして Ayusya を探せば成績を参照できます) ★ここ一週間の Ayusya の成績 火曜日 1,009,650円 27,809番 水曜日 1,005,528円 30,458番 木曜日 996,284円 64,399番 土曜日 988,185円 68,938番 月曜日 988,185円 69,599番 火曜日 988,185円 69,953番 手を入れ始めると1時間はかかるので放置。。。 {magclick} /*========================================================*/ 今回のお題 << デスクトップフォルダ取得 >> /*========================================================*/ デスクトップフォルダは、特殊フォルダと呼ばれる集団の一員 です。 特殊フォルダのアドレスは、SHGetSpecialFolderLocation 関数 を使用して取得します。 // 特殊フォルダの取得 CString GetSpecialDirectory( HWND hWnd, int type ) { CString dir; LPMALLOC pMalloc = NULL; LPITEMIDLIST pItemList = NULL; char buff[ MAX_PATH + 1 ]; memset( buff, 0, sizeof( buff ) ); SHGetMalloc( &pMalloc ); if( pMalloc ) { SHGetSpecialFolderLocation( hWnd, type, &pItemList); if( pItemList ) { SHGetPathFromIDList( pItemList, buff ); pMalloc->Free( pItemList ); dir = buff; } pMalloc->Release(); } return dir; } このような関数を用意しましょう。 そして、 // デスクトップフォルダを取得 CString GetDesktopDirectory( HWND hWnd ) { return GetSpecialDirectory( hWnd, CSIDL_DESKTOPDIRECTORY ); } という感じで呼び出すと、デスクトップのディレクトリが CString で取得できます。 /*========================================================*/ 中身はドーデもいいのです。Global系は良くわかりません。 /*========================================================*/ これだけでは不十分です。 なぜならば、先に紹介した方法は、ユーザのデスクトップを 取得するものであり、 共通デスクトップを取得するものではありません。 // 共通ユーザのデスクトップフォルダを取得 CString GetCommonDesktopDirectory( HWND hWnd ) { return GetSpecialDirectory( hWnd, CSIDL_COMMON_DESKTOPDIRECTORY ); } これも一緒に使いましょう。 通常、デスクトップとしてみているものは、いろいろな設定が 複合されたものです。 今回のデスクトップショットの目的は、デスクトップにある ショートカットやファイルやフォルダを取得し、それを フローティングポップアップメニューで表示しようというもの ですから、 この2種類を取得するだけで十分です。 マイコンピュータなどもあると便利ですけど、まぁいいじゃん。 {magclick} /*========================================================*/ さいごに /*========================================================*/ SHGetSpecialFolderLocation を調べると、他にもいろいろと 特殊なフォルダがこれで取得できることが分かります。 ちなみに、API の先頭に :: を書く習慣がよくありますが、 これはあまり良くありません。 :: は API を意味しているわけではないからです。 なので、単に SHGetSpecialFolderLocation で OK です。 ただし、クラスの内部では API と同名の関数などがあると、 インテリジェンスシステムやコンパイラが混乱する時があるので、 それらと区別する意味で :: をつけることはあります。 {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は7月23日(金曜日)に、第478回をお送りします。 お題は「新型木構造」 ファイル検索で取得されるファイルの順番は、ファイルの名称の 順番なのですが、 微妙に違います。 これを修正しないと、違和感が生じます。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されていますか? このメールマガジンの内容に文面の引用はありませんか? めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容の、転用、流用、宣伝、リンク、 SetDlgItemText は64k限界突破機能付 なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ ホームページ::あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp まぐまぐ::アイディー 0000020674 まぐまぐ::登録と解除 http://www.mag2.com/m/0000020674.htm まぐまぐ::バックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 めーらっくす::アイディー MM3E1AEE285AB4F めーらっくす::登録と解除 http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F めーらっくす::バックナンバー★最近のものならこちらが便利★ http://www.mailux.com/mm_bno_list.php?mm_id=MM3E1AEE285AB4F |