Thomas Heller schrieb: > "g.franzkowiak" <[EMAIL PROTECTED]> writes: > > >>Hello everybody, >> >>I've tryed to use an interprocess communication via >>SendMessage on Windows. >>Unfortunately, nothing goes on >> >>######################################################################### >>#! /usr/bin/env python >> >>import win32api, win32ui, win32con >>import struct, array >> >>""" >>typedef struct tagCOPYDATASTRUCT { // cds >> DWORD dwData; >> DWORD cbData; >> PVOID lpData; >>} COPYDATASTRUCT; >>""" >> >>def packCopyData(nNum, sString): >> int_buffer = array.array("L",[nNum]) >> char_buffer = array.array('c', sString) >> int_buffer_address = int_buffer.buffer_info()[0] >> char_buffer_address = char_buffer.buffer_info()[0] >> char_buffer_size = char_buffer.buffer_info()[1] >> copy_struct = struct.pack("pLp", # dword*, dword, char* >> int_buffer_address, >> char_buffer_size, >> char_buffer) >> return copy_struct > > > After packCopyData(...) returns, the arrays are destroyed, which will > probably void their contents. You must keep them alive until you don't > need the COPYDATASTRUCT instance any longer. For this kind of stuff, > ctypes may be easier to use than pywin32. > > Thomas
Hmm, have read something in <<http://aspn.activestate.com>> and the script changed to this: #--------------------------------------------------------- #! /usr/bin/env python import win32api, win32ui, win32con, win32gui import struct, array from ctypes import * """ typedef struct tagCOPYDATASTRUCT { // cds DWORD dwData; DWORD cbData; PVOID lpData; } COPYDATASTRUCT; """ class COPYDATATYPE(Structure): _fields_ = [("nNum", c_ulong), ("szData", c_char_p)] class COPYDATASTRUCT(Structure): _fields_ = [("dwData", c_ulong), ("cbData", c_ulong), ("lpData", POINTER(COPYDATATYPE))] # get the window handle hwnd = win32ui.FindWindow(None, "target window") # print just for fun # ##print hwnd # prepare copydata structure for sending data cpyData = COPYDATATYPE(1, '1') cds = COPYDATASTRUCT(c_ulong(1), c_ulong(sizeof(cpyData)), pointer(cpyData)) # try to send a message win32api.SendMessage(hwnd, win32con.WM_COPYDATA, 0, pointer(cds)) #--------------------------------------------------------- and the message for the last line is: ==> TypeError: an integer is required" This message comes with "pointer(cds)" and with "addressof(cds)" gerd -- http://mail.python.org/mailman/listinfo/python-list