• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WIN32APIについて質問です。)

デスクトップウィンドウハンドルを取得する方法とは?

このQ&Aのポイント
  • C++を用いてデスクトップにフォーカスを与えるプログラムを作成するために、GetDesktopWindow関数を使用します。しかし、この関数は実際にはデスクトップのウィンドウハンドルを返していないことがわかりました。
  • 他の方法も試してみましたが、デスクトップを操作することができず困っています。デスクトップウィンドウハンドルを取得する良い方法はありますか?
  • 質問の詳細とテストソースコードも添付しました。ご協力よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

MSDNでSetFocusについて調べてみましたが、自プロセス以外のウィンドウに対しては失敗するようですね…。

ClickHere
質問者

お礼

ご回答、ありがとうございます。 1度MSDNで調べたことはありますが、確かにスレッドをアタッチ云々の記述がありますね。 しかし…アタッチするためにはシステム以外のスレッド、と制限が設けられていますね。 もしかしたら失敗する可能性も…。 スレッドのアタッチは使った事がないので、時間に余裕があるときにでもゆっくりと 調べていこうと思います。 ありがとうございました。

その他の回答 (4)

回答No.4

失礼しました。(汗) リンク貼りなおします。 http://okwave.jp/qa/q5664072.html

ClickHere
質問者

お礼

ご回答、ありがとうございます。 今度はページを確認できました。 ハンドルの子供の子供とややこしく、ぱっと見では何をしているのか まったく分かりませんが、質問内容よりシステムかexplorerあたりの ウィンドウハンドルを取得している風ですね。 デスクトップのメニューなんたらを弄っているようですので、 迂闊に試す気はありませんが、リファレンスでAPI関数を 辿っていこうと思います。 興味深い情報、感謝です。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

具体的に何にフォーカスを与えたいのでしょうか? 今のWindows(Windows95以降)は、Windows本来のデスクトップウィンドウの上に、見かけの(アイコンなどが並んでいる)デスクトップが被さった形になっていたと思います。 なので、アイコンなどを操作したいのであれば、「見かけ」のほうを操作しなければならなかったと思います。

ClickHere
質問者

お礼

ご回答ありがとうございます。 デスクトップとexplorerの関係が未だに不透明ではあるのですが、 フォーカスを与え、デスクトップ上のアイコンのどれかが 選択されている状態、または矢印キーによってアイコンが選択できる ようになっている状態に持っていく事が目的です。 要はWinVistaや7でのAlt+Tabキーでデスクトップを選択した状態ですね。 よろしくお願いします。

回答No.2

「デスクトップを操作」とは具体的にどのような内容でしょうか? アイコンの操作であれば ↓のQ&Aが参考になるかもしれません。 http://m.oshiete1.goo.ne.jp/answer/detail/q5664072/a16355184.html?page=1&sid=878fae90e37f284765bb88a26c9be5982c977104&uid=NULLGWDOCOMO

ClickHere
質問者

お礼

ご回答、ありがとうございます。 残念ながらPCでの閲覧は不可なようでした。 また、1番の目的はデスクトップのウィンドウハンドルの取得です。 ついでにできたら~、程度の優先度ですので、前者の方をお願いいたします。 参考になりそうなサイトがありましたら、またご回答頂けると幸いです。

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

デスクトップが”ウィンドウ”ではないので、フォーカスを設定する事が出来ないのではないでしょうか? 今、環境が無いので、調べる事が出来ないのですが、 Spy などを使って、Windowsメッセージを見ながら、デスクトップにフォーカスを移すときに、流れているメッセージをフックして見て、その通りにプログラムを流し込んでいけば出来るように思えます。 状況から見て、デスクトップを操作って事を言われているので、フォーカスを当てるのが目的ではなくて、違うメッセージ処理をおkなうのの奈良、それを書いた方がより実践的な事が書かれると思います。 単純に、デスクトップにフォーカスを移すってだけなら、 GetActiveWindw でアクティブウィンドウを取得して、Active Window に KILLFOCUS でフォーカスを手放させて...再度、GetActiveWindow で取得してを繰り返していけば、いずれデスクトップがフォーカスを取得する事になると思います(試していないので、不安はありますけどね)

ClickHere
質問者

お礼

ご回答、ありがとうございます。 今現在はデスクットップのフォーカスを取得することが目的です。 できるなら、SetWindowLong関数あたりでスタイルの変形や フックを掛けてみたいとは思っていますが、それは後回しにしています。 また、私が調べた範囲では、デスクトップはリストビューの一種なのだと 結論付けていますが、実際のところは不明です。 実際、デスクトップの画面キャプチャは通常のウィンドウと同じ操作で可能 なようですし(試したことはありませんが) Spyツールでの操作も考えたことはありますが、その場限りの操作になっています ので利用価値は低いです。 他のアクティブウィンドウの優先度を下げる方法は考えていなかったので、 デスクトップのウィンドウハンドルが取得不可能なら、採用させて頂こうと 思います。

関連するQ&A