[python-win32] hook to obtain WM_GESTURE

John Grant cyrfer at gmail.com
Thu May 9 22:52:17 CEST 2013


I believe found access to the HWND.
mHWND = ctypes.windll.user32.GetActiveWindow()



On Thu, May 9, 2013 at 11:13 AM, John Grant <cyrfer at gmail.com> wrote:

> Hi Tim,
>
> Thanks for the great explanations.
>
> Yes, you are right, I am trying to intercept gestures in a window within
> the same process. The Blender application framework has a WndProc in C, and
> Blender supports extending itself with user-supplied Python scripts. I am
> trying to add gesture support with Python so I can avoid modifying the
> Blender C code.
>
> I'm reading through the wxPython article. It looks like a perfect fit for
> my problem. It shows everything I need to do, and using ctypes! Thanks!
>
> Although, I am stuck trying to get the HWND from Blender. It seems they
> have not exposed the handle yet. I'm looking for win32 API that might
> provide it to me, or a list of windows associated with the process.
>
> I guess I have to remove my callback as soon as the WM_DESTROY message is
> emitted, and reinstantiate the oldWndProc. That makes sense. I'm glad that
> is shown in the article.
>
> I just browsed the Blender C source code and they also use
> "SetWindowLongPtr" for GWLP_USERDATA, but not for GWLP_WNDPROC. I think
> everything will work out fine when I find the HWND.
>
> Thanks for the expert help.
> John
>
>
> On Thu, May 9, 2013 at 9:46 AM, Tim Roberts <timr at probo.com> wrote:
>
>> John Grant wrote:
>> >
>> > I would like to obtain multi-touch events in my Python code (running
>> > inside Blender's python environment). I have looked around the web for
>> > a python module that works with py 3.3 (others work with py 2.x), but
>> > I have not found one. So, I'm trying to build one.
>> >
>> > I believe I can use the 'ctypes' to call the function I need,
>> > GetGestureInfo.
>>
>> That gets you gestures, but not multitouch.  If all you need is the
>> zoom, pan and rotate gestures and a two-finger tap, this will do it.
>> For more complicated gestures, most solutions are custom right now.
>>
>>
>> > This function requires 2 parameters as input, the lParam from WndProc
>> > and a pointer to the GESTUREINFO structure.
>> >
>> > * I hope I can use 'ctypes' to declare the GESTUREINFO structure in my
>> > python code.*
>> > I see it is possible to pass structures as pointers using ctypes as
>> well.
>>
>> The structure doesn't have any pointers, so this should be
>> straightforward.
>>
>>
>> > *** The problem seems to be obtaining the lParam from WndProc. ***
>> >
>> > My idea is to provide a callback function (again using ctypes to
>> > declare this callback) and use the SetWindowsHookEx function, passing
>> > my callback and the WH_CALLWNDPROC hook ID.
>> >
>> > Does this sound like it will work?
>>
>> No, a Windows hook is the wrong answer.  That lets you intercept
>> messages from other processes (which is why hooks need to be in a DLL --
>> the DLL actually gets copied and injected into the processes being
>> hooked).  In your case, I assume you're trying to intercept gestures in
>> a window within your own process.  Is that right?  As long as you have
>> the window handle, all you need to do is subclass the window.  That
>> means you make yourself the wndproc for that window, so you get first
>> shot at all the messages.
>>
>> Here's an example that shows how to do this in wxPython, but you can
>> eliminate the wxPython part of it.  The key point is using
>> win32gui.SetWindowLong to load your own function in
>> win32con.GWL_WNDPROC, and remembering the return value so you can call
>> the original function.
>>     http://wiki.wxpython.org/HookingTheWndProc
>>
>> --
>> Tim Roberts, timr at probo.com
>> Providenza & Boekelheide, Inc.
>>
>> _______________________________________________
>> python-win32 mailing list
>> python-win32 at python.org
>> http://mail.python.org/mailman/listinfo/python-win32
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20130509/1784b978/attachment-0001.html>


More information about the python-win32 mailing list