mike0264

How to Have Two Keys in a HotKeySet

9 posts in this topic

I am making a program and i dont understand how to have this work

HotKeySet("{{Numpad2}{Numpad1}}","_Start")

*How do you have numpad 2 and numpad 1 perform a separate action so when both  are pressed at  the same time it runs a script.*

 

Share this post


Link to post
Share on other sites



reb,

That code fires on simply pressing {Numpad2} - the function only looks at the first key in the list.

mike0264,

Welcome to the AutoIt forums.

You need to fire the HotKey on one of the keys and then check for the other inside the function - like this:

#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

HotKeySet("{Numpad1}","_Start") ; Fire HotKey on Numpad1 key
HotKeySet("{ESC}", "_Exit")

While 1
    Sleep(10)
WEnd



Func _Start ()

    ; Look for Numpad2 key
    If _IsPressed("62", $hDLL) Then
        ; Only action if BOTH pressed
        MsgBox($MB_SYSTEMMODAL, "", "Got it")
    EndIf



EndFunc



Func _Exit()
    DllClose($hDLL)
    Exit
EndFunc

Now the MsgBox only appears if both keys are pressed.

M23

1 person likes this

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

@ Melba23 Thanks for the correction.  I was fooled by numpad2 being first.  pressing 1 did not work and then I only pressed 1 & 2 together, never 2 alone.  I Learned somethings new Today. 1. Test all possibilities  &  2.  Your method of handling it.

Happy New Year

REB


MEASURE TWICE - CUT ONCE

Share this post


Link to post
Share on other sites

THANK You @reb or @polymath, sorry im a little new.Happy New Year to you as well. 

@Melba23 i dont quiet understand what

IsPressed("62", $hDLL) Then
        ; Only action if BOTH pressed
        MsgBox($MB_SYSTEMMODAL, "", "Got it")

 

 

 

All Id like is to have this script

 

#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

HotKeySet("{Numpad1}","_Start") ; Fire HotKey on Numpad1 key
HotKeySet("{ESC}", "_Exit")

While 1
    Sleep(10)
WEnd



Func _Start ()

    ; Look for Numpad2 key
    If _IsPressed("62", $hDLL) Then
        ; Only action if BOTH pressed
        MsgBox($MB_SYSTEMMODAL, "", "Got it")
    EndIf



EndFunc



Func _Exit()
    DllClose($hDLL)
    Exit
EndFunc

Fit into This Script

 

HotKeySet("{numpad7}{Numpad3}","_Start")
While 1
    Sleep(10)
WEnd

Func _Start()

MouseClick("left", 531, 693, 1, 20)
MouseClick("left", 664, 483, 1, 70)
MouseClick("left", 445, 548, 1, 20)
MouseClick("left", 243, 381, 1, 65)


EndFunc

Share this post


Link to post
Share on other sites

Let's put it together!

You want the MouseClicks to execute only when Numpad7 and Numpad3 are both been pressed correct?

We know that _IsPressed("62", $hDLL) (You could get the key codes from the helpf ile) checks to see if Numpad2 is currently pressed and that the first key in HotKeySet is the initial HotKey that will execute the function. You want to make it so that when the user presses the Key in HotKeySet AND your second key is also pressed to execute the MouseClicks.

So what do you do? There's a few options

  1. Inside the _Start() Function: Check to see if the key is pressed and if it is, execute the MouseClicks
  2. Inside the _Start() Function: Check to see if the key is NOT pressed and if it is NOT pressed then Return
  3. Don't use HotKeySet and check for BOTH keys in your While 1 loop. If they are both pressed then call _Start()

Share this post


Link to post
Share on other sites

What program are you trying to automate? Generally, there are better options than using MouseClick.

Share this post


Link to post
Share on other sites

@Melba23 --- add your post #3 to the Help File? Or add to FAQ? I think thats valid?  How to execute on multiple key press? 

1 person likes this

Skysnake

Why is the snake in the sky?

Share this post


Link to post
Share on other sites

As a sidenote, maybe point out that successfully detecting multiple non-special keys combinations requires a keyboard handling n-key rollover correctly. Some people may have to google that for clarification.


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now