![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?5a7ff87)
WIN32APIについて質問です。
C++を用いてデスクトップにフォーカスを与えるプログラムを
作成する為に、デスクトップのウィンドウハンドルを得る
GetDesktopWindow関数を使用しています。
しかし結果はフォーカスが設定できず、エラーとなります(下記ソースをご参照下さい)。
ググってみるとこの関数は実際にはデスクトップのウィンドウハンドルを返している
訳ではなく、他のハンドルを返しているようです。
他の方法も試してみましたが、一向にデスクトップを操作することができません。
何か良い方法をご存知ないでしょうか?
よろしくお願いします。
~テストに使用したソース~
#include <windows.h>
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd )
{
if( SetFocus( GetDesktopWindow() ) == NULL )
MessageBox( NULL, "フォーカスが設定できない", "エラー", MB_ICONSTOP );
return 0;
}
No.5ベストアンサー
- 回答日時:
MSDNでSetFocusについて調べてみましたが、自プロセス以外のウィンドウに対しては失敗するようですね…。
ご回答、ありがとうございます。
1度MSDNで調べたことはありますが、確かにスレッドをアタッチ云々の記述がありますね。
しかし…アタッチするためにはシステム以外のスレッド、と制限が設けられていますね。
もしかしたら失敗する可能性も…。
スレッドのアタッチは使った事がないので、時間に余裕があるときにでもゆっくりと
調べていこうと思います。
ありがとうございました。
No.4
- 回答日時:
ご回答、ありがとうございます。
今度はページを確認できました。
ハンドルの子供の子供とややこしく、ぱっと見では何をしているのか
まったく分かりませんが、質問内容よりシステムかexplorerあたりの
ウィンドウハンドルを取得している風ですね。
デスクトップのメニューなんたらを弄っているようですので、
迂闊に試す気はありませんが、リファレンスでAPI関数を
辿っていこうと思います。
興味深い情報、感謝です。
No.3
- 回答日時:
具体的に何にフォーカスを与えたいのでしょうか?
今のWindows(Windows95以降)は、Windows本来のデスクトップウィンドウの上に、見かけの(アイコンなどが並んでいる)デスクトップが被さった形になっていたと思います。
なので、アイコンなどを操作したいのであれば、「見かけ」のほうを操作しなければならなかったと思います。
ご回答ありがとうございます。
デスクトップとexplorerの関係が未だに不透明ではあるのですが、
フォーカスを与え、デスクトップ上のアイコンのどれかが
選択されている状態、または矢印キーによってアイコンが選択できる
ようになっている状態に持っていく事が目的です。
要はWinVistaや7でのAlt+Tabキーでデスクトップを選択した状態ですね。
よろしくお願いします。
No.2
- 回答日時:
「デスクトップを操作」とは具体的にどのような内容でしょうか?
アイコンの操作であれば
↓のQ&Aが参考になるかもしれません。
http://m.oshiete1.goo.ne.jp/answer/detail/q56640 …
ご回答、ありがとうございます。
残念ながらPCでの閲覧は不可なようでした。
また、1番の目的はデスクトップのウィンドウハンドルの取得です。
ついでにできたら~、程度の優先度ですので、前者の方をお願いいたします。
参考になりそうなサイトがありましたら、またご回答頂けると幸いです。
No.1
- 回答日時:
デスクトップが”ウィンドウ”ではないので、フォーカスを設定する事が出来ないのではないでしょうか?
今、環境が無いので、調べる事が出来ないのですが、
Spy などを使って、Windowsメッセージを見ながら、デスクトップにフォーカスを移すときに、流れているメッセージをフックして見て、その通りにプログラムを流し込んでいけば出来るように思えます。
状況から見て、デスクトップを操作って事を言われているので、フォーカスを当てるのが目的ではなくて、違うメッセージ処理をおkなうのの奈良、それを書いた方がより実践的な事が書かれると思います。
単純に、デスクトップにフォーカスを移すってだけなら、
GetActiveWindw でアクティブウィンドウを取得して、Active Window に KILLFOCUS でフォーカスを手放させて...再度、GetActiveWindow で取得してを繰り返していけば、いずれデスクトップがフォーカスを取得する事になると思います(試していないので、不安はありますけどね)
ご回答、ありがとうございます。
今現在はデスクットップのフォーカスを取得することが目的です。
できるなら、SetWindowLong関数あたりでスタイルの変形や
フックを掛けてみたいとは思っていますが、それは後回しにしています。
また、私が調べた範囲では、デスクトップはリストビューの一種なのだと
結論付けていますが、実際のところは不明です。
実際、デスクトップの画面キャプチャは通常のウィンドウと同じ操作で可能
なようですし(試したことはありませんが)
Spyツールでの操作も考えたことはありますが、その場限りの操作になっています
ので利用価値は低いです。
他のアクティブウィンドウの優先度を下げる方法は考えていなかったので、
デスクトップのウィンドウハンドルが取得不可能なら、採用させて頂こうと
思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Windows 10 windowsの回復ドライブや復元ポイントを使用した場合の戻る位置を教えてください。 5 2023/08/19 14:52
- その他(パソコン・周辺機器) 2つのPCを行き来する 2 2022/06/15 01:59
- モニター・ディスプレイ 一つのノートPC(windows)を二人で別画面(もう一つはMACのデスクトップ)で同時に別の。。。 5 2023/04/19 22:02
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メッセージボックスを前面に表...
-
C#でButtonのフォーカス枠を消...
-
Chrome フォーカス時に枠が表示...
-
SPREAD(GrapeCity)のセルにフォ...
-
Excelのマクロで実行時エラー”1...
-
DAMのデンモクの使い方
-
コンボボックスの三角を一時的...
-
レーザのスポット径の計算式
-
Delphiで最前列にFormを表示し...
-
トリニトロン管TVと普通のブ...
-
フラッシュ8での文字の縁取り...
-
初期状態でのフォーカスの解除
-
WIN32APIについて質問です。
-
iPhoneのロック画面に出てくる...
-
コンボボックスの開いたリスト...
-
TDSマジックランプシアター 箱...
-
初期フォーカスについて
-
Unityのピンボールゲーム製作
-
MN128miniVでキャッチホンの設...
-
Eclipse Javaエディタでの選択...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを前面に表...
-
SPREAD(GrapeCity)のセルにフォ...
-
C#でButtonのフォーカス枠を消...
-
Excelのマクロで実行時エラー”1...
-
TDSマジックランプシアター 箱...
-
Chrome フォーカス時に枠が表示...
-
iPhoneのクイックアクションを...
-
レーザのスポット径の計算式
-
コンボボックスの開いたリスト...
-
コンボボックスの三角を一時的...
-
DAMのデンモクの使い方
-
PowershellでCLIとISEの結果が違う
-
除光液の正しい捨て方がわかり...
-
初期状態でのフォーカスの解除
-
雷のようなアニメーションをウ...
-
DataGridViewで入力チェック後...
-
フォトショのアクションを別のM...
-
至急です。 トイレに行きたいな...
-
MMDでAVI出力後の映像、音声に...
-
VC++でマウスホイールイベント...
おすすめ情報