MarkRobbins Posted June 16, 2013 Share Posted June 16, 2013 First of all, this is not for a game, I want to hook this event to "Start Window Switcher". I am trying to create a script that will capture a left shift double press (pump) such that it only works when no other keys have also been pressed.I know this is conceptually possible with _IsPressed(), but I am worried about execution speed and having to make calls to _IsPressed() for each key.So, in English-ish:The key I am talking about is the left shift key...If I have pressed and released the key twice, and no other keys intervene or occur at the same time...and If the first press and release was less than a half second long...and If the second press down comes withing a half second of the first release...and If the second press and release was less than a half second long...Then Do something wonderful!My Issues:The While Loop logic of this makes my brain hurt a bit, so help is welcome but I can probably figure it out...eventuallyIs there a way to avoid the brute force call to _IsPressed() for every key? (Do we have a GetAsynch dll call that gets entire keyboard?)Additionally, playing with _IsPressed() for right mouse button shows indeterminate or no-op behavior for meexpandcollapse popup;starter code -- not working, plus does not take into account other keys #include <Misc.au3> Local $hDLL = DllOpen("user32.dll") Local $tim0; Local $tim; Local $first=False; Local $firstup=False; Local $secup=False; Local $max=500 While 1 If $first Then If _IsPressed('A0',$hDLL) Then If $firstup Then Local $r=TimerDiff($tim) If $r<$max Then ;Yay! $first=False $firstup=False $secup=True ;ToolTip("Succeed") ;Beep(1500,20) Else ;took too long $first=False $secup=False $firstup=False ;ToolTip("Fail second too long") ;Beep($max,20) EndIf Else ;firstup false EndIf Else ;first and not pressed If $firstup==False Then $firstup=True $secup=False Else Local $r=TimerDiff($tim) If $r>$max Then ;took to long $first=False $firstup=False ;ToolTip("Fail second too long 2") ;Beep($max,20) EndIf EndIf EndIf Else If _IsPressed('A0',$hDLL) Then $tim=TimerInit() $firstup=False $first=True Else ;not first not pressed If $secup Then ToolTip("Succeed") $first=False $secup=False $firstup=False EndIf ;do nothing EndIf EndIf WEnd Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted June 16, 2013 Moderators Share Posted June 16, 2013 MarkRobbins, Is there a way to avoid the brute force call to _IsPressed() for every key? (Do we have a GetAsynch dll call that gets entire keyboard?)I suggest you read this announcement before you go any further with this script. Meanwhile, does this thread help at all? M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
PhoenixXL Posted June 16, 2013 Share Posted June 16, 2013 (edited) For the part of double click of LEFT SHIFT with accuracy you have to check with Keyboard Hook if the second press is within the doubleclick time interval. There inside the hook check for either if any key ispressed using >this UDF and func _IsAnyKeyPressed. Pretty easy to proceed further I guess. I know this is conceptually possible with _IsPressed(), but I am worried about execution speed and having to make calls to _IsPressed() for each key. It would be inaccurate. Regards Edited June 16, 2013 by PhoenixXL My code: PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners. MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now