HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0224
catsWin7のデスクトップのハンドル4解決


cats

リンク

2014/2/24(Mon) 15:52:30|NO.60248

デスクトップのアイコンの座標を調べるプログラムを作っているのですが、
最近パソコンを変えてからプログラムが正常に動作しなくなりました。
デスクトップのリストビューのハンドルを調べる際に

hList = FindWindow("Progman", "Program Manager") hList = FindWindowEx(hList, NULL, "SHELLDLL_DefView", NULL) hList = FindWindowEx(hList, NULL, "SysListView32", NULL)
という風にしていたのですが、調べたところ、windows7ではデスクトップの
ハンドルは上記プログラムでは調べられないようです。
(参考:http://www.orangemaker.sakura.ne.jp/labo/memo/sdk-mfc/win7Desktop.html)

そこで、GetDesktopWindow を使いましたがリストビューの親とは違うようです。
今は、アイコンを調べるときにエアロを無効にするという対処法をとっています。

環境に依存しないようにデスクトップのリストビューのハンドルを取得する方法はないでしょうか。



この記事に返信する


MillkeyStars

リンク

2014/2/24(Mon) 17:06:01|NO.60249

答えが、自身で提示したリンク先に書かれている。
C言語のソースをよーくみて。

"Progman"または、"WorkerW"を初期で検索して、そのウィンドウの子ウィンドウに"SHELLDLL_DefView"があるかどうかで判定してないかな。



MillkeyStars

リンク

2014/2/24(Mon) 17:35:42|NO.60250

一応作ってみたモジュール。
(当方 WindowsVista 環境なので、Win7 で検証しておりませんのでもしミスってたら、Win7以後の方修正お願いいたします。)


#module #uselib "user32.dll" #cfunc _GetDesktopWindow "GetDesktopWindow" #cfunc _FindWindowEx "FindWindowExA" int,int,sptr,sptr #defcfunc GetDesktopIconHWND //Program Manager 側検索(WindowsVista以前用) hList = _FindWindowEx(0,0,"Progman","Program Manager") hList = _FindWindowEx(hList,0,"SHELLDLL_DefView","") if hList != 0 : return hList //WorkerW 側検索(Windows7以後用) TargetHWND = 0 SList = 0 repeat hList = _FindWindowEx(0,SList,"WorkerW","") if hList == 0 : break SList = hList hList = _FindWindowEx(SList,0,"SHELLDLL_DefView","") if hList != 0 : TargetHWND = hList : break loop return TargetHWND #global mes ""+GetDesktopIconHWND()



cats

リンク

2014/2/24(Mon) 17:44:13|NO.60251

>MillkeyStarsさん
ご指摘ありがとうございます。
書くのを忘れていました。
WorkerWは試したのですが、思うように取得できませんでした。
Progmanを調べたあとにSHELLDLL_DefViewが取得できない(結果が0)ときに、
以下のスクリプトを実行するようにしていました。

hList = FindWindow("WorkerW", NULL) hList = FindWindowEx(hList, NULL, "SHELLDLL_DefView", NULL) hList = FindWindowEx(hList, NULL, "SysListView32", NULL)
結果はhList=0でした。



cats

リンク

2014/2/24(Mon) 17:49:22|NO.60252

すいません。
だらだら書き込んでいるうちに投稿してもらっていましたね。
>MillkeyStarsさん
作ってくださったモジュールに"SysListView32"の取得をつなげたところ無事動きました。
ご教授ありがとうございました!



ONION software Copyright 1997-2018(c) All rights reserved.