How do you add a visual effect to a mouse click from within windows?

22

6

I just want a little utility that monitors mouse clicks so that when one occurs a visual bubble effect (or something similar) occurs, similar to something you might see in a screencast.

Jon Erickson

Posted 2010-02-09T20:20:47.267

Reputation: 2 144

Answers

22

Native Windows option

Mouse Properties > Pointer Options > Show Location of Pointer

Combined with AutoHotkey

~LButton::
Send {Ctrl}
return

~LButton UP::
Send {Ctrl}
return

Every mouse-click (down & up) fires a Ctrl briefly.

As pointed out by Paolo you can even change the Mouse setting as part of the script:

DllCall("SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 1, UInt, 0) ;SPI_SETMOUSESONAR ON

OnExit, ExitSub
ExitSub:
   DllCall("SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 0, UInt, 0) ;SPI_SETMOUSESONAR OFF
   ExitApp

RJFalconer

Posted 2010-02-09T20:20:47.267

Reputation: 9 791

1

It is possible to automatically change the mouse settings. See this link: http://www.autohotkey.com/board/topic/77380-mouse-click-special-effects-for-presentationsdemos/

– Paolo Fulgoni – 2014-12-03T15:00:27.430

The change I made was to remove ~LButton and use only ~LButton Up, because having both creates a disjointed sonar effect, but using only the up click makes it work perfect. – Trialsman – 2019-01-30T20:06:31.397

1I have fixed the suggestion here (and thanks for putting me onto AutoHotKey). It took me hours to figure out the fix. I added a single character (the tilde ~) that enabled the normal operation of the mouse to pass through. I have also modified the example so that not only a mouse-click release, but also the intial mouse-click generates the effect. – None – 2012-02-21T13:46:41.110

1

This is a variant of RJFalconer's answer, incorporating changes from Paolo Fulgoni. I didn't want to always see my mouse when the CTRL button was pressed, and I hoped the DllInfo modification would dynamically switch the setting on and off, but I couldn't get it to work (the script would just exit). No doubt someone more sophisticated in AHK could explain what I was doing wrong, but I went ahead and created my own version.

It dyamically switches the "Show mouse when control is pressed" option ON when the mouse button is pressed, and then switches it OFF afterwards. It works fine in limited testing, although sometimes the mouse pointer disappears aftewards. If anyone knows how to fix it, or has any other improvements, feel free to jump in.

It's (excessively) documented, because I quickly forget things, and when I need to revisit, I like to have my scripts provide enough info that I don't need to search to find all the old references I used in the first place.

;Visualize mouse clicks by showing radiating concentric circles on mouse click
;Author: traycerb
;Date/Version: 01-31-2018
;
;Source:
;https://superuser.com/questions/106815/how-do-you-add-a-visual-effect-to-a-mouse-click-from-within-windows
;https://autohotkey.com/board/topic/77380-mouse-click-special-effects-for-presentationsdemos/

;Dynamically switch on the Windows accessibility feature to show the mouse when the control key is pressed
;when the script is executed, then switch off afterwards
;Windows settings > Mouse > Pointer Options tab > Visibility group > Show location of pointer when I press CTRL key



;Window's SystemParametersInfo function, retrieves or sets the value of one of the 
;system-wide parameters.  AHK DllCall fxn with SystemParameterInfo parameter is used to access
;this Windows API.
;https://msdn.microsoft.com/en-us/library/windows/desktop/ms724947(v=vs.85).aspx
;BOOL WINAPI SystemParametersInfo(
;  _In_    UINT  uiAction,
;  _In_    UINT  uiParam,
;  _Inout_ PVOID pvParam,
;  _In_    UINT  fWinIni
;);

;uiParam [in]
;Type: UINT
;
;A parameter whose usage and format depends on the system parameter being queried or set. 
;For more information about system-wide parameters, see the uiAction parameter. 
;If not otherwise indicated, you must specify zero for this parameter.

;pvParam [in, out]
;Type: PVOID
;
;A parameter whose usage and format depends on the system parameter being queried or set. 
;For more information about system-wide parameters, see the uiAction parameter. 
;If not otherwise indicated, you must specify NULL for this parameter. 
;For information on the PVOID datatype, see Windows Data Types.

;fWinIni [in]
;Type: UINT
;
;If a system parameter is being set, specifies whether the user profile is to be updated, 
;and if so, whether the WM_SETTINGCHANGE message is to be broadcast to all top-level 
;windows to notify them of the change.

;This parameter can be zero if you do not want to update the user profile 
;or broadcast the WM_SETTINGCHANGE message or it can be set to the following [...]

;Accessibility parameter    
;S0x101D PI_SETMOUSESONAR
;Turns the Sonar accessibility feature on or off. This feature briefly 
;shows several concentric circles around the mouse pointer when the user 
;presses and releases the CTRL key. 
;The pvParam parameter specifies TRUE for on and FALSE for off. 

;Press the control button each time mouse button is pressed, showing location of mouse pointer.
~LButton::
{
  DllCall("user32\SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 1, UInt, 0) 
  Send {Ctrl}
  DllCall("user32\SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 0, UInt, 0) 
  return
}

~RButton::
{
  DllCall("user32\SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 1, UInt, 0) 
  Send {Ctrl}
  DllCall("user32\SystemParametersInfo", UInt, 0x101D, UInt, 0, UInt, 0, UInt, 0) 
  return
}

traycerb

Posted 2010-02-09T20:20:47.267

Reputation: 23

It was useful thanks. I also added #SingleInstance force line to avoid annoying popup message during double clicks. – Phil B – 2018-06-28T17:02:30.120