2012年5月8日 星期二

SendMessage WM_COPYDATA

用 python 呼叫 Win32 API, 以 WM_COPYDATA 訊息送資料給其它 window:
import win32gui
import win32api
import win32con
from ctypes import *

CLASS_NAME = "Receiver"

def GetReceiver():
    try:
        hwnd = win32gui.FindWindow(CLASS_NAME, None)
        return hwnd
    except:
        return None

class COPYDATASTRUCT(Structure):
    _fields_ = [
        ("dwData", c_void_p),
        ("cbData", c_ulong),
        ("lpData", c_char_p)
        ]

def SendData(hwnd, buf, data_len):
    # prepare data and send it
    cds = COPYDATASTRUCT(0, data_len, buf.raw)
    win32api.SendMessage(hwnd, win32con.WM_COPYDATA, 0, addressof(cds))

def main():
    hwnd = GetReceiver()
    if hwnd == None:
        print 'cannot find receiver'
        return

    xbuf = create_string_buffer(14)
    xbuf[0] = '\x00'
    xbuf[1] = '\x01'
    xbuf[13] = '\x13'
    SendData(hwnd, xbuf, 14)

main()


更多資訊:
- Google 'COPYDATASTRUCT python lpData'
- Google 'python WM_COPYDATA SendMessage'

沒有留言:

張貼留言