質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3427閲覧

デスクトップに追加されたファイルのアイコンを右端へ移動したい

twyujiro15

総合スコア217

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/02/03 03:29

Windows7 32bit SP1、Visual Studio 2013 Pro にてデスクトップアプリケーションを開発しています。

タグが C# と C++ になっているのは、
最終的には C# での実装を考えているためです。

やりたいことはタイトル通りで、
デスクトップにファイルが追加されると通常は
アイコンが左上に詰めるように自動的に配置されますが、
これを右上に詰めるように変更したくて調査しています。

デスクトップアイコンを持つリストビューのウィンドウハンドルの取得と、
アイコンの移動自体は簡単に実現できました。

C++

1// hWnd はリストビューのウィンドウハンドル 2// index は何番目のアイコンなのかを指定 3// lParam は移動先の座標 4SendMessage(hWnd, LVM_SETITEMPOSITION, index, lParam);

やりたいことは「追加されたファイルのアイコン」を移動することなので、
上記コードの index を確定する必要があります。
そこで、次のような手順を考えました。

  1. デスクトップフォルダを監視
  2. ファイルが追加されたらそのファイル名を取得
  3. LVM_GETITEM メッセージを投げてファイル名が一致する index を確保
  4. LVM_SETITEMPOSITION でアイコンを移動

LVM_GETITEM メッセージを投げることで lParam に
リストビューのアイテム情報が返ってきます。

C++

1// vPointer にアイテムの情報が返ってくる 2SendMessage(hWnd, LVM_GETITEM, 0, (LPARAM)ptr);

ところがここで問題が。
デスクトップのリストビューに関して LVM_GETITEM メッセージで情報を取得するには
WriteProcessMemory を使用する必要があります。
デバッグ実行時には問題ありませんが、
リリースして単体で実行すると、ウィルス対策ソフトによってその実行が妨げられ、
プロセスが抹殺されてしまいます。
さらに残念なことに、自分はウィルス対策ソフトの管理権限がないため、
こちらの設定を変更するなどの対処ができません。

WriteProcessMemory を使用せずに
この機能を実現する方法はないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PineMatsu

2017/02/03 08:29

管理者権限で起動してもダメなんでしょうか?
twyujiro15

2017/02/05 22:53 編集

おぉ!ナイスなヒントでした!できました!単純に管理者権限で実行するのではなく、Program Files フォルダに入れてから実行したらプロセスが抹殺されなくなりました!おそらくウィルス対策ソフトの設定かと思われますが、システムフォルダから実行されるプロセスは無視するようになっているようです。ありがとうございます。
PineMatsu

2017/02/05 23:25

よかったですね。回答欄に書けばよかった(笑)
guest

回答1

0

自己解決

デスクトップ上にプロジェクトファイルを置いて開発をしていたので、
そのサブディレクトリに含まれる Release フォルダから実行される
発行元不明のプロセスの不穏な挙動は
ウイルス対策ソフトによって抹殺されるような設定になっていたようです。

Release ビルドしたアセンブリを
C:\Program Files\ のサブディレクトリに入れてから実行すると
問題なく動作するようになりました。
ウイルス対策ソフトのセキュリティの甘さを垣間見た気がしますが、
とりあえず解決とします。
考えていてくれた方、ありがとうございました。

投稿2017/02/05 22:58

twyujiro15

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問