By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
457,939 Members | 1,546 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 457,939 IT Pros & Developers. It's quick & easy.

struct module usage

P: n/a
Hi!

I'm trying to send a message from a Python script to a Scite window via
win32gui.SendMessage() I'm trying to pack the commands using the struct
module. However, I can't figure out why Scite isn't responding as I
expect. The SendMessage is returning 0.

I've searched Google and haven't found anything that would help me.
There was a discussion about this same thing about 2 years ago and the
poster solved the problem using calldll. I checked last night and
calldll is available only for Python 2.1, while I'm using 2.3.

Here's a snippet from the code:

#####
import win32api, win32gui, win32con
import sys
import struct

SDI = win32api.RegisterWindowMessage("SciTEDirectorInter face");
w = win32gui.GetWindow(win32gui.GetDesktopWindow(),win 32con.GW_CHILD)

while w:
res = 0;
res = win32gui.SendMessageTimeout(w, SDI, 0, 0,
win32con.SMTO_NORMAL, 1000)
if res[1] != SDI:
w = win32gui.GetWindow(w, win32con.GW_HWNDNEXT)
else:
break
n = len("goto:20") + 1
s = struct.pack(`n` + "sii", "goto:20,3", 9, 0)

res = win32gui.SendMessage(w, win32con.WM_COPYDATA, s, SDI)
#####

I've tried almost every combination on the struct format.

TIA,

--
Andres Rosado
Email: an*****@despammed.com
ICQ: 66750646
AIM: pantear
Homepage: http://andres980.tripod.com/

We make the standards and we make the rules.
-- Standards; The Jam

Jul 18 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
BW Glitch wrote:
Hi!

I'm trying to send a message from a Python script to a Scite window via
win32gui.SendMessage() I'm trying to pack the commands using the struct
module. However, I can't figure out why Scite isn't responding as I
expect. The SendMessage is returning 0.

I've searched Google and haven't found anything that would help me.
There was a discussion about this same thing about 2 years ago and the
poster solved the problem using calldll. I checked last night and
calldll is available only for Python 2.1, while I'm using 2.3.

Here's a snippet from the code:

#####
import win32api, win32gui, win32con
import sys
import struct

SDI = win32api.RegisterWindowMessage("SciTEDirectorInter face");
w = win32gui.GetWindow(win32gui.GetDesktopWindow(),win 32con.GW_CHILD)

while w:
res = 0;
res = win32gui.SendMessageTimeout(w, SDI, 0, 0,
win32con.SMTO_NORMAL, 1000)
if res[1] != SDI:
w = win32gui.GetWindow(w, win32con.GW_HWNDNEXT)
else:
break
n = len("goto:20") + 1
s = struct.pack(`n` + "sii", "goto:20,3", 9, 0)

res = win32gui.SendMessage(w, win32con.WM_COPYDATA, s, SDI)
#####


Are you sure you are sending the correct message with the correct
params? The Windows doc for WM_COPYDATA say wparam should be a hwnd,
and lparam should be the COPYDATASTRUCT. It appears you are sending the
struct in wparam, and a custom message integer as wparam.

Further, the COPYDATASTRUCT contains pointers, not char arrays. Your
struct code will need to be more complicated. Something like:

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)

Mark.

Jul 18 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.