Hello,

I am trying to read the contents of a CListCtrl.  The control is in a window
owned by a non-python process.  I can get pretty close but ultimately get a
failure from PyCListCtrl.GetItem().  I think it's because the python layer is
passing a pointer from its own address space to a different process when it
asks the CListCtrl to respond to GetItem().  

Specifically, I have:
* Process A, non-python process, has window with CListCtrl control
* Process B, python process, executes the following steps:
  - win32gui.EnumWindows to find the window in process A
  - win32gui.EnumChildWindows to find the list control in that window
  - win32ui.CreateWindowFromHandle to wrap the control's handle with a
PyCListCtrl object
  - PyCListCtrl.GetItemCount() works fine, as do other getters and setters that
don't require pointers
  - PyCListCtrl.GetItem() fails with the message: "GetItem failed"

The error seems to be coming from win32ctrlList.cpp PyCListCtrl_GetItem()
function, which allocates a local LV_ITEM on the stack and then passes the
address to CListCtrl->GetItem().

I found this article that explains how to use the VirtualAllocEx(),
ReadProcessMemory() and WriteProcessMemory() functions to do something very
similar to what I want, but in C:
http://www.codeproject.com/threads/int64_memsteal.asp

So my questions are:

1. is my diagnosis of the problem correct?
2. is there any way to do a cross-process GetItem() from python?
3. more important, is there another way to do what I want from python, which is
to read the contents of a CListCtrl contained in a window owned by another
process?

Thanks,
Michael M



                
__________________________________ 
Do you Yahoo!? 
Yahoo! Small Business - Try our new resources site!
http://smallbusiness.yahoo.com/resources/ 
_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to