Re: Re: Getting mouse click info form a non Gui4Cli window.

Dimitris Keletsekis <[email protected]> Sun, 7 Apr 2013 20:08:36 +0300
Newsgroups gmane.comp.windows.gui4cli
Message-ID <CAHiKg1X6X6pxqtb51guKdaY0vYhh700x2jh39tqH1adOJDdHew@mail.gmail.com>
Looks fine - does it work well ?


On Sun, Apr 7, 2013 at 12:07 PM, chris.kevany <[email protected]>wrote:

> **
>
>
> Hi Dimitris,
>
> Thanks for the suggestion!
>
> I googled a bit on about this function to get some source code examples.
> There's a low level (WH_MOUSE_LL) and a high level (WH_MOUSE) variant for
> it.
>
> These two are a bit controversal in the sense that the low level variant
> has a noticable delay on overal performance of the gui. It acts system wide
> so I can call up a quickmenu on the external window. It supports all mouse
> button clicks except double-click.
>
> The high level variant also supports double click but unfortunately it is
> only seen by the calling thread (Gui4Cli). Useless as you can guess because
> Gui4Cli already has much better support built-in for this.
>
> I used this ...
>
> BOOL _export WINAPI DLL_Init (struct GCMain *gcmain)
> {
>    GCM = gcmain; // store the pointer to Gui4Cli's main structure..
>
>    gcAddCommands(DLL_COMMANDS); // add commands to GUI dll list
>
>
> SetWindowsHookEx(WH_MOUSE_LL,MouseHookProc,GetModuleHandle("dll_name.dll"),0);
>
>    return TRUE;
> }
>
> void WINAPI DLL_Free (void)
> {
>    UnhookWindowsHookEx(MouseHook);
> }
>
> and the callback ...
>
> HHOOK MouseHook;
>
> LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
> {
>
>    PKBDLLHOOKSTRUCT k = (PKBDLLHOOKSTRUCT)(lParam);
>    POINT p;
>
>    struct Event * bt;
>    int retval;
>
>    if(wParam == WM_RBUTTONDOWN)
>    {
>       GetCursorPos(&p);
>
>       bt = gcFindEvent("gui_name","right_click", retval);
>
>       gcTriggerEventWait(bt);
>    }
>    return 0;
> }
>
> and in the gui ...
>
> xRoutine right_click
>    use win 'External Window title'
>    if $$win.active = 1
>       quickmenu -1 -1 'First Item/Second Item/#sepa/Cancel'
>       if $$choice = 0
>          say 'Item 1 selected'
>       elseif $$choice = 1
>          say 'Item 2 selected'
>       endif
>    endif
>
> The "GetAsyncKeyState(0x02)" function could also be used from within
> a timer, polling for a mouse button press.
>
> Chris
>
>
> --- In [email protected], Dimitris Keletsekis <gui4cli@...> wrote:
> >
> > I googled and found this function:
> >
> > SetWindowsHookEx (using the WH_MOUSE_LL flag)
> >
> > Looks like the one to use.
> > Dimitris
> >
> >
> >
> > On Sat, Apr 6, 2013 at 7:55 PM, chris.kevany chris.kevany@... wrote:
> >
> > > **
>
> > >
> > >
> > > Hi Dimitris,
> > >
> > > I'm currently controlling a non Gui4Cli window on its title with
> > > the "use" command which works great.
> > >
> > > This is a one direction control from Gui4Cli to the external window.
> > > I now would like to retrieve mouse click info from the external window
> > > in Gui4Cli.
> > >
> > > My basic idea is to create a ddl function that catches mouse clicks
> > > at the external window and triggers a Gui4cli event.
> > >
> > > Do you have any suggestions?
> > >
> > > Chris
> > >
>
>  
>