win32 problem with WM_COPYDATA

Neil Hodgson nhodgson at bigpond.net.au
Sat Nov 27 01:02:22 EST 2004


Chris:

>         wc.lpszClassName = "QServer"
> ...
>             "QuoteServer App",
> ...
>     wnd = win32gui.FindWindow("QuoteServer", None)

   Using the same name helps.

> ...
>     buff = struct.pack('11s', "XXXXX: YYYY")
>     print win32gui.SendMessage(wnd, win32con.WM_COPYDATA, 0, buff)

   Copydata does not take an arbitrary pointer, it requires a correctly
initialized COPYDATASTRUCT. From a Mark Hammond post:

import struct, array
int_buffer = array.array("L", [0])
char_buffer = array.array("c", "the string data")
int_buffer_address = int_buffer.buffer_info()[0]
char_buffer_address, char_buffer_size = char_buffer.buffer_info
copy_struct = struct.pack("pLp",  # dword *, dword, char *
                           int_buffer_address,
                           char_buffer_size, char_buffer_address)
# find target_hwnd somehow.
win32gui.SendMessage(w, WM_COPYDATA, target_hwnd, copy_struct)

   Neil





More information about the Python-list mailing list