ウィンドウのクラス名を取得するには? – プログラミング – Home

ウィンドウのクラス名を取得するには?
 
通知
すべてクリア

[解決済] ウィンドウのクラス名を取得するには?


ポン太
 ポン太
(@ポン太)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

EnumChildWindowsで子ウィンドウを列挙するプログラムを作っています。
EnumChildProcでエディットコントロールだけ取り出したいのですが、ウィンドウハンド
ルから特定のクラスを割り出すことってできますか?

例えば、エディットクラスだとわかれば、そのウィンドウにWM_GETTEXTを送って、そこ
に記入されている文字列を読み取ることもできるかなと・・(もちろんプロセス間での
メモリ読み取りについては、ReadProcessMemoryなどでひと工夫いるとは思いますが。


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 18年前
投稿: 178
 

GetClassName()なんてのがあるようです。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_getclassname.asp

他のプロセスが登録したウィンドウクラス名を取れるかは、試していないのでなんとも。
おそらく取れるとは思いますが。


返信引用
ポン太
 ポン太
(@ポン太)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

>瀬戸っぷさん

できました。
他プロセスのクラス名でも大丈夫でした。

ウィンドウクラスって、大文字小文字の区別は無いのかと思っていましたが、
GetClassName(hTarget, szBuffer, MAX_PATH);
if(lstrcmp(szBuffer, TEXT(Edit)) == 0) //←これだと、エディットコントロールだ
と、きちんと認識してくれますが、
if(lstrcmp(szBuffer, TEXT(EDIT)) == 0) //←これだと、ダメでした。

自分は
if((ATOM)GetClassLong(hTarget, GCW_ATOM) == FindAtom(TEXT(Edit)))
というやり方でもいけそうかな、と思ったんですがコレもダメでした・・・

それから
GetClassInfo(NULL, (LPCTSTR)GetClassLong(hTarget, GCW_ATOM), &wndclass);
if(lstrcmp(wndclass.lpszClassName, TEXT(Edit)) == 0)・・・・
というのも、プログラムが落ちてしまいうまく行かなかったです。

いろいろやり方はありそうなんですが・・・詰まってしまって

教えていただいた方法で、完璧に動作しました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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