hellkite 日記と雑記とメモ。

Shiki Kazamaの駄文と音楽と、時々技術な感じ

ウィンドウハンドラを取得するスプリクト


スポンサーリンク


前回のエントリはこちら:http://d.hatena.ne.jp/deis/20070113/1168644863
組んでみた。公開しない方がよかったと思った。今は反省している

# -*- coding: shift_jis -*-

#import
import sys
import ctypes
import winxpgui

user32 = ctypes.windll.user32

def text(hwnd):
    length = user32.GetWindowTextLengthA(hwnd)
    if length:
        buffer = ctypes.create_string_buffer("",length + 1)
        if user32.GetWindowTextA(hwnd, buffer, length +1):
            return buffer.value.decode("mbcs")

def proc(hwnd, user):
    if write_file == True:
        value = hwnd, text(hwnd), winxpgui.GetClassName(hwnd)
        fo.write(str(value) + "?n")
    else:
        print hwnd, text(hwnd)
    return 1

def run():
    WNDENUMPROC = ctypes.WINFUNCTYPE(ctypes.c_int, ctypes.c_void_p, ctypes.c_long)
    user32.EnumWindows(WNDENUMPROC(proc), 0)
    return 1

if __name__ == '__main__':
    if len(sys.argv) == 2:
        write_file = True
        fo = file(sys.argv[1]+".txt", "w")
        run()
        fo.close()
    else:
        write_file = False
        run()

動作させるとズラズラ表示します。パラメータ渡すとファイルに出力します。ちなみに同名のファイルがあった場合、問答無用で削除します(死)

問題点

  • ctypesの使い方がわからない・・・コメントしてもらったものそのままです
  • そのせいで、ctypesとwinxpguiが混在しているカオスコードに
  • ファイルに保存すると、日本語が化けます
  • 色々無駄があるような気がします

ctypesの使い方がほんとにわからない・・・2.5のドキュメント読んだけどよく分からなかったよ(;ω;)