教えていただいたコードの解読
http://d.hatena.ne.jp/Megumi221/20081008のコメント欄で教えていただいたコードを読んでいく。自分が知らないことだらけなので難しい。
最初にいくつか変数を定義する。ctypesはCの関数をpythonの中で使用するためのモジュール。
from ctypes import * from ctypes.wintypes import * TRANSPARENT_COLOR = '#000080' # 濃い青色 TEXT_COLOR = '#00FF00' # 黄緑色 ALPHA_RATIO = 0.6 FRAME_RATE = 30 OFFSETY = 4 VELOCITY = 2 GWL_EXSTYLE = 0xFFFFFFEC # -20 WS_EX_LAYERED = 0x00080000 WS_EX_TRANSPARENT = 0x00000020 # 32 LWA_ALPHA = 0x00000002 # 2 LWA_COLORKEY = 0x00000001 # 1 SM_CYCAPTION = 0x00000004 # 4 SM_CXFULLSCREEN = 0x00000010 # 16 SM_CYFULLSCREEN = 0x00000011 # 17
次の部分はウィンドウを半透明化するライブラリを使えるようにする。
http://eternalwindows.jp/winbase/window/window11.htmlを参照した。
'''SetLayeredWindowAttributes(hWnd, crkey, alpha, flags)''' SetLayeredWindowAttributes = windll.user32.SetLayeredWindowAttributes SetLayeredWindowAttributes.argtypes = [c_int, c_int, c_int, c_int] # 引数の型指定 SetLayeredWindowAttributes.restypes = c_int # 戻り値の型指定
ここで、c_intはCのint型。
1番目の引数は、レイアードウィンドウのハンドル
2番目の引数は、カラーキー(透明にする色)
3番目の引数は、アルファ値(0は完全な透明、255は不透明)
4番目の引数は、どの引数を使用するかを示す定数
次に指定されたウィンドウの情報を取得するライブラリを使えるようにする。
http://yokohama.cool.ne.jp/chokuto/urawaza/api/を参照。
'''GetWindowLong(hWnd, index)''' GetWindowLong = windll.user32.GetWindowLongA GetWindowLong.argtypes = [c_int, c_int] # 引数の型指定 GetWindowLong.restypes = c_int # 戻り値の型指定
1番目の引数は、ウィンドウハンドル
2番目の引数は、取得するデータの指定
次に指定されたウィンドウの属性を変更するライブラリを使えるようにする。
'''SetWindowLong(hWnd, index, gwl)'''
SetWindowLong = windll.user32.SetWindowLongA
SetWindowLong.argtypes = [c_int, c_int, c_int]
SetWindowLong.restypes = c_int
1番目の引数は、ウィンドウハンドル
2番目の引数は、変更するデータ
3番目の引数は、新しい値
次にウィンドウを構成する要素の情報を得るライブラリを使えるようにする。
http://www.activebasic.com/help_center/Pages/API/SystemService/SystemInformation/GetSystemMetrics.htm
http://wisdom.sakura.ne.jp/system/winapi/win32/win38.htmlを参照。
'''GetSystemMetrics(index)'''
GetSystemMetrics = windll.user32.GetSystemMetrics
GetSystemMetrics.argtypes = [c_int]
GetSystemMetrics.restypes = c_int
引数は、何の情報を取得するかを指定。
つづく