Sign in to follow this  
Followers 0
Tomoya

Ispressed just once?

6 posts in this topic

So I was trying to have this script send #P everytime I push enter but I also have to push enter again right after it to submit the text entered. Is there anyway to ignore the 2nd enter?

What I currently have using a example provided.

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

;In this little example pressing n will pop up a message
;pressing Esc will leave.
While 1
   If _IsPressed('1b') = 1 Then Exit;1b is ESC
   ColorChange()
   Sleep(50)
Wend

Exit

Func ColorChange()
    If _IsPressed('0D') = 1 Then
        Sleep (100)
        Send ("{#}")
        Send ("P")

    EndIf
EndFunc

Func _IsPressed($hexKey)
  ; $hexKey must be the value of one of the keys.
  ; _IsPressed will return 0 if the key is not pressed, 1 if it is.
  ; $hexKey should entered as a string, don't forget the quotes!
  ; (yeah, layer. This is for you)

   Local $aR, $bO

   $hexKey = '0x' & $hexKey
   $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", $hexKey)
   If Not @error And BitAND($aR[0], 0x8000) = 0x8000 Then
      $bO = 1
   Else
      $bO = 0
   EndIf

   Return $bO
EndFunc  ;==>_IsPressed

#cs
   01 Left mouse button
   02 Right mouse button
   04 Middle mouse button (three-button mouse)
   05 Windows 2000/XP: X1 mouse button
   06 Windows 2000/XP: X2 mouse button
   08 BACKSPACE key
   09 TAB key
   0C CLEAR key
   0D ENTER key
   10 SHIFT key
   11 CTRL key
   12 ALT key
   13 PAUSE key
   14 CAPS LOCK key
   1B ESC key
   20 SPACEBAR
   21 PAGE UP key
   22 PAGE DOWN key
   23 END key
   24 HOME key
   25 LEFT ARROW key
   26 UP ARROW key
   27 RIGHT ARROW key
   28 DOWN ARROW key
   29 SELECT key
   2A PRINT key
   2B EXECUTE key
   2C PRINT SCREEN key
   2D INS key
   2E DEL key
   30 0 key
   31 1 key
   32 2 key
   33 3 key
   34 4 key
   35 5 key
   36 6 key
   37 7 key
   38 8 key
   39 9 key
   41 A key
   42 B key
   43 C key
   44 D key
   45 E key
   46 F key
   47 G key
   48 H key
   49 I key
   4A J key
   4B K key
   4C L key
   4D M key
   4E N key
   4F O key
   50 P key
   51 Q key
   52 R key
   53 S key
   54 T key
   55 U key
   56 V key
   57 W key
   58 X key
   59 Y key
   5A Z key
   5B Left Windows key
   5C Right Windows key
   60 Numeric keypad 0 key
   61 Numeric keypad 1 key
   62 Numeric keypad 2 key
   63 Numeric keypad 3 key
   64 Numeric keypad 4 key
   65 Numeric keypad 5 key
   66 Numeric keypad 6 key
   67 Numeric keypad 7 key
   68 Numeric keypad 8 key
   69 Numeric keypad 9 key
   6A Multiply key
   6B Add key
   6C Separator key
   6D Subtract key
   6E Decimal key
   6F Divide key
   70 F1 key
   71 F2 key
   72 F3 key
   73 F4 key
   74 F5 key
   75 F6 key
   76 F7 key
   77 F8 key
   78 F9 key
   79 F10 key
   7A F11 key
   7B F12 key
   7C-7F F13 key - F16 key
   80H-87H F17 key - F24 key
   90 NUM LOCK key
   91 SCROLL LOCK key
   A0 Left SHIFT key
   A1 Right SHIFT key
   A2 Left CONTROL key
   A3 Right CONTROL key
   A4 Left MENU key
   A5 Right MENU key
#ce

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Why not do Send("{#}P") and move the sleep after the Send()?

Edited by guinness

_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Why not do Send("{#}P") and move the sleep after the Send()?

I will update the Send command but the sleep before is so it does not send the #P to fast. Thanks for the tip about the Send command :huh2:

Maybe a Do until will work... Gonna go try that and report back.

Edited by Tomoya

Share this post


Link to post
Share on other sites

OK.


_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 04/09/2015

Share this post


Link to post
Share on other sites

A simple solution would be to only let ColorChange return when the key is released like this:

Func ColorChange()
    Send ("{#}")
    Send ("P")
    While _IsPressed('0D')
        Sleep(10)
    WEnd
EndFunc

But that blocks the rest of the script, so it isn't always an option. The following script should only trigger once when a key is pressed, without blocking the script:

Global $aKeyStillPressed[255] ;used to keep track of keystate
Global $u32dll = DllOpen("user32.dll") ;I strongly suggest using DllOpen for speed when running _Ispressed in such a tight loop

While 1
    If _IsPressedEx('1b') Then _Exit()
    If _IsPressedEx('0D') Then _ColorChange()
   Sleep(10)
Wend

Func _ColorChange()
    Send ("{#}")
    Send ("P")
EndFunc

Func _IsPressedEx($hexKey)
    Local $iKey = Dec($hexKey)
    If $iKey > 255 Or $iKey < 0 Then Return SetError(1,0,0)
    Local $aR = DllCall($u32dll, "int", "GetAsyncKeyState", "int",'0x' & $hexKey)
    If @error Then Return SetError(2,0,0)
    If $aKeyStillPressed[$iKey] Then ;If the key was already registered as pressed
        If BitAND($aR[0], 0x8000) <> 0x8000 Then $aKeyStillPressed[$iKey] = False ;Check if it is still pressed and update if needed
        Return 0 ;do nothing
    ElseIf BitAND($aR[0], 0x8000) = 0x8000 Then ;If the key wasn't registered as pressed, but is pressed now it must be a new keypress
        $aKeyStillPressed[$iKey] = True ;Update the pressed status
        Return 1
    EndIf
    Return 0
EndFunc

Func _Exit()
    DllClose($u32dll)
    Exit
EndFunc

Share this post


Link to post
Share on other sites

A simple solution would be to only let ColorChange return when the key is released like this:

Func ColorChange()
    Send ("{#}")
    Send ("P")
    While _IsPressed('0D')
        Sleep(10)
    WEnd
EndFunc

But that blocks the rest of the script, so it isn't always an option. The following script should only trigger once when a key is pressed, without blocking the script:

Global $aKeyStillPressed[255] ;used to keep track of keystate
Global $u32dll = DllOpen("user32.dll") ;I strongly suggest using DllOpen for speed when running _Ispressed in such a tight loop

While 1
    If _IsPressedEx('1b') Then _Exit()
    If _IsPressedEx('0D') Then _ColorChange()
   Sleep(10)
Wend

Func _ColorChange()
    Send ("{#}")
    Send ("P")
EndFunc

Func _IsPressedEx($hexKey)
    Local $iKey = Dec($hexKey)
    If $iKey > 255 Or $iKey < 0 Then Return SetError(1,0,0)
    Local $aR = DllCall($u32dll, "int", "GetAsyncKeyState", "int",'0x' & $hexKey)
    If @error Then Return SetError(2,0,0)
    If $aKeyStillPressed[$iKey] Then ;If the key was already registered as pressed
        If BitAND($aR[0], 0x8000) <> 0x8000 Then $aKeyStillPressed[$iKey] = False ;Check if it is still pressed and update if needed
        Return 0 ;do nothing
    ElseIf BitAND($aR[0], 0x8000) = 0x8000 Then ;If the key wasn't registered as pressed, but is pressed now it must be a new keypress
        $aKeyStillPressed[$iKey] = True ;Update the pressed status
        Return 1
    EndIf
    Return 0
EndFunc

Func _Exit()
    DllClose($u32dll)
    Exit
EndFunc

Works great! Thanks for your time and effort, gonna make sure I read through it and understand all that you changed so I can use it later :huh2:

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
Sign in to follow this  
Followers 0