Windows7 32bit SP1、Visual Studio 2013 Pro にてデスクトップアプリケーションを開発しています。
タグが C# と C++ になっているのは、
最終的には C# での実装を考えているためです。
やりたいことはタイトル通りで、
デスクトップにファイルが追加されると通常は
アイコンが左上に詰めるように自動的に配置されますが、
これを右上に詰めるように変更したくて調査しています。
デスクトップアイコンを持つリストビューのウィンドウハンドルの取得と、
アイコンの移動自体は簡単に実現できました。
C++
1// hWnd はリストビューのウィンドウハンドル 2// index は何番目のアイコンなのかを指定 3// lParam は移動先の座標 4SendMessage(hWnd, LVM_SETITEMPOSITION, index, lParam);
やりたいことは「追加されたファイルのアイコン」を移動することなので、
上記コードの index を確定する必要があります。
そこで、次のような手順を考えました。
- デスクトップフォルダを監視
- ファイルが追加されたらそのファイル名を取得
- LVM_GETITEM メッセージを投げてファイル名が一致する index を確保
- LVM_SETITEMPOSITION でアイコンを移動
LVM_GETITEM メッセージを投げることで lParam に
リストビューのアイテム情報が返ってきます。
C++
1// vPointer にアイテムの情報が返ってくる 2SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)ptr);
ところがここで問題が。
デスクトップのリストビューに関して LVM_GETITEM メッセージで情報を取得するには
WriteProcessMemory を使用する必要があります。
デバッグ実行時には問題ありませんが、
リリースして単体で実行すると、ウィルス対策ソフトによってその実行が妨げられ、
プロセスが抹殺されてしまいます。
さらに残念なことに、自分はウィルス対策ソフトの管理権限がないため、
こちらの設定を変更するなどの対処ができません。
WriteProcessMemory を使用せずに
この機能を実現する方法はないでしょうか。
回答1件
あなたの回答
tips
プレビュー