デスクトップのメッセージの取得について – プログラミング – Home

デスクトップのメッセージの取得について
 
通知
すべてクリア

[解決済] デスクトップのメッセージの取得について


SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

例えばデスクトップのアイコンをシングルクリックした時、
あるいはマウスメッセージ自体のイベントを取得するにはどうしたら良いのでしょうか?
一応
HWND hWnd = GetDesktopWinodow()
でデスクトップのハンドルを取得し、デバッグモードでhWndをみた所、0x00010014が
入ってました。
これをスパイで検索してメッセージログを見ようとした所、
「指定のウィンドウはスパイできません。Windowsは、このウィンドウに関するメッセー
ジストリームへのアクセスを許しません。」と出てしまいます。
考えられるやり方としてデスクトップをSetWindowLongPtr()でサブクラス化してしまい、
新たにセットしたウィンドウ関数からメッセージを取得すればいいかとも思ったのです
が、これってやってもいいのでしょうか?

とりあえず欲しい機能はアイコンのクリックとその対象アイコンのファイル名(アイコン
自体のファイル名じゃないですよ)の取得という機能です。

・・・ドラッグアンドドロップは簡単なんですけどね。


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

SunPacさんが言うデスクトップは、
GetDesktopWindow()が返すハンドルが指すものとは異なると思います。
Spy++でウィンドウのツリーを表示し、
メニューから[検索]-[ウィンドウの検索]から
ファインダーツールを使ってデスクトップに照準を合わせてください。
GetDesktopWindow()が返すハンドルが指すウィンドウとは異なるものが
検索されるはずです。


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

おや?
スパイ++でもツールバーのウンドウボタンを押して表示される一番上のデスクトップの
ハンドルは00010014となっておりますよ。

・・・どうなっているのでしょう?
では逆にGetDesktopWindow()の返り値は何なのでしょうか?

おっと、書き忘れましたが環境はVC6++Sp5でMFCは使っておりません。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> ・・・どうなっているのでしょう?
> では逆にGetDesktopWindow()の返り値は何なのでしょうか?
>
この件については以前から私も疑問に思っていることで、
色々ネットで検索をしてみたこともあるのですが、
明確に記述されたドキュメントは見つけられませんでした・・・。

例えば色々なアプリケーションの持つウィンドウも
ウィンドウ(コントロールも含む)が幾重にも重なっているように、
デスクトップもそのような構造になっていて、
GetDesktopWindow()は、そのトップレベルウィンドウ(に相当するもの)を
返しているのかなぁ、と。
これは私の推測に過ぎませんが。


返信引用
suzuka
 suzuka
(@suzuka)
ゲスト
結合: 23年前
投稿: 46
 

他のプロセスに干渉できるのは dll だけだからのような気がします。
これが参考になるかもしれないです。

http://homepage1.nifty.com/kazubon/progdoc/tclock/gaiyo.html


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

デスクトップのアイコンなどを持っているウィンドウは、Spy++ では一番下の Progman以下に
あるリストビューではないでしょうか。
コイツをサブクラス化するには、(他プロセスが作ったウィンドウなので)グローバルフックを
インストールしてやらねばならないと思います。
詳しくは↑のsuzukaさんのURLにて。


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 22年前
投稿: 105
Topic starter  

皆さん、ありがとうございます。
なるほど、グローバルフックが必要なわけですね。
ProgramManagerのメッセージをスパイ++で見たところ、たしかにマウスイベントを
確認できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました