Help with GetKeyState please Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
User avatar
Patrick_Dayna
Posts: 44
Joined: 01 Jun 2021, 15:48

Help with GetKeyState please

17 Jun 2021, 08:35

Code: Select all

XButton2::
If GetKeyState("LButton", "P")
	{
		Tooltip, Lbutton down
	}

Else
	{
		Tooltip, Lbutton Not down
	}
Only the Else block gets triggered.
In this other example same thing happens.

Code: Select all

XButton2::
GetKeyState, state, Lbutton
if (state = "D")
	{
		Tooltip, Lbutton down
	}

Else
	{
		Tooltip, Lbutton Not down
    }
Any help would be appreciated.
User avatar
Onimuru
Posts: 107
Joined: 08 Sep 2018, 18:35
Contact:

Re: Help with GetKeyState please

17 Jun 2021, 08:43

You need to give the hotkey the wildcard modifier:

Code: Select all

*$XButton2::
	if GetKeyState("LButton", "P") {
		Tooltip, Lbutton down
	}
	else {
		Tooltip, Lbutton Not down
	}

	return
User avatar
mikeyww
Posts: 26951
Joined: 09 Sep 2014, 18:38

Re: Help with GetKeyState please  Topic is solved

17 Jun 2021, 08:59

The following worked for me, but remember that the left button must already be down when the XButton is pressed.

Code: Select all

XButton2::
If GetKeyState("LButton", "P")
 ToolTip, Lbutton down
Else ToolTip, Lbutton Not down
Return
Another way:

Code: Select all

XButton2::ToolTip, Lbutton not down
#If GetKeyState("LButton", "P")
XButton2::ToolTip, Lbutton down
#If
User avatar
Patrick_Dayna
Posts: 44
Joined: 01 Jun 2021, 15:48

Re: Help with GetKeyState please

17 Jun 2021, 09:35

I tried both proposed solutions, They worked but I learnt that I was barking up the wrong tree, Holding Lbutton down first was a no no. The end use case I had in mind was for a way to move and resize any window with minimal keys.

I ended up separating the code into two separate blocks per hotkey, For Xbutton2 alone:

Code: Select all

  XButton2::
      If DoubleAlt
      {
          MouseGetPos,,,KDE_id

          PostMessage,0x112,0xf020,,,ahk_id %KDE_id%
          DoubleAlt := false
          return
      }

      MouseGetPos,KDE_X1,KDE_Y1,KDE_id
      WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
      If KDE_Win
          return
      WinGetPos,KDE_WinX1,KDE_WinY1,,,ahk_id %KDE_id%
      Loop
      {
          GetKeyState,KDE_Button, XButton2,P 
          MouseMove, X, Y [, Speed, R]
          If KDE_Button = U
              break
          MouseGetPos,KDE_X2,KDE_Y2 
          KDE_X2 -= KDE_X1 
          KDE_Y2 -= KDE_Y1
          KDE_WinX2 := (KDE_WinX1 + KDE_X2) 
          KDE_WinY2 := (KDE_WinY1 + KDE_Y2)
          WinMove,ahk_id %KDE_id%,,%KDE_WinX2%,%KDE_WinY2% 
      }
  return

And for block two, Lbutton

Code: Select all

  #If GetKeyState("XButton2","P")
  LButton::
      If DoubleAlt
      {
          MouseGetPos,,,KDE_id
          ; Toggle between maximized and restored state.
          WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
          If KDE_Win
              WinRestore,ahk_id %KDE_id%
          Else
              WinMaximize,ahk_id %KDE_id%
          DoubleAlt := false
          return
      }
      ; Get the initial mouse position and window id, and
      ; abort if the window is maximized.
      MouseGetPos,KDE_X1,KDE_Y1,KDE_id
      WinGet,KDE_Win,MinMax,ahk_id %KDE_id%
      If KDE_Win
          return
      ; Get the initial window position and size.
      WinGetPos,KDE_WinX1,KDE_WinY1,KDE_WinW,KDE_WinH,ahk_id %KDE_id%
      ; Define the window region the mouse is currently in.
      ; The four regions are Up and Left, Up and Right, Down and Left, Down and Right.
      If (KDE_X1 < KDE_WinX1 + KDE_WinW / 2)
          KDE_WinLeft := 1
      Else
          KDE_WinLeft := -1
      If (KDE_Y1 < KDE_WinY1 + KDE_WinH / 2)
          KDE_WinUp := 1
      Else
          KDE_WinUp := -1
      Loop
      {
          GetKeyState,KDE_Button, LButton,P ; Break if button has been released.
          If KDE_Button = U
              break
          MouseGetPos,KDE_X2,KDE_Y2 ; Get the current mouse position.
          ; Get the current window position and size.
          WinGetPos,KDE_WinX1,KDE_WinY1,KDE_WinW,KDE_WinH,ahk_id %KDE_id%
          KDE_X2 -= KDE_X1 ; Obtain an offset from the initial mouse position.
          KDE_Y2 -= KDE_Y1
          ; Then, act according to the defined region.
          WinMove,ahk_id %KDE_id%,, KDE_WinX1 + (KDE_WinLeft+1)/2*KDE_X2  ; X of resized window
                                  , KDE_WinY1 +   (KDE_WinUp+1)/2*KDE_Y2  ; Y of resized window
                                  , KDE_WinW  -     KDE_WinLeft  *KDE_X2  ; W of resized window
                                  , KDE_WinH  -       KDE_WinUp  *KDE_Y2  ; H of resized window
          KDE_X1 := (KDE_X2 + KDE_X1) ; Reset the initial position for the next iteration.
          KDE_Y1 := (KDE_Y2 + KDE_Y1)
      }

  #If,
It works perfectly. If your wondering how is this noob asking about basic Getkeystates and be able to program KDE style window controlls, I didnt. I got this from the script show case on the docs site. I merely reverse engineered and took the parts I wanted.

Thanks allot for helping me!

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: just me, Rohwedder and 168 guests