Jump to content
jvanegmond

HotStrings - String hotkeys

Recommended Posts

Hi,

I noted that my hotstrings don't work anymore after a while. No problems at start-up.

All other scripts in my .au3 file do work without problems.

I have to reboot the .au3 file in order to let my hotstrings work again.

Why do my hotstrings go in standby after a while?

I wish you all a happy new year 2015!

Remin

ps: I have the latest version

Edited by remin

Share this post


Link to post
Share on other sites

remin, I have replicated the issue on my PC after several hours of use. Unfortunately I couldn't find the cause quickly. For this reason, I have logged a bug here: https://github.com/jvanegmond/hotstrings/issues/3 and will work on this issue once my schedule clears up.

Share this post


Link to post
Share on other sites

I keep getting the atached error. It seems to occur randomly and can happen even an some hour or more after starting.

Also I get the same bug as remin. I'm finding that the hotstrings randomly seem to stop responding, although the script is still running, and normal hotkeys still work perfectly.

I had thought it was due to a function logger I added at the same time, but doesn't seem to be. I got around it by automatically regularly restarting my script.

Both errors have started recently and since an upgrade from XP to Win7.

If you have any error code you want me to add and send you logs, I'm happy to do so. I'm running hotstrings approx 8hrs/weekday, so could help to pick up intermittent bugs.

David

post-75610-0-20266100-1420555831_thumb.j

Edited by dgm5555

Share this post


Link to post
Share on other sites

The problem I am experiencing is that the text replacement works fine for a while, and then I start to get a repetitive "I" sent as if it's from the keyboard. The following is my code, it is loading a text file at startup and using that to establish the array. The text file is 1077 lines long:

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <HotString.au3>

Opt("SendKeyDelay", 0)
Opt("SendKeyDownDelay", 1)

Global $aRetArray, $sFilePath = @ScriptDir & "\Test.txt"

FileLoad()

SetHotStrings()

While 1
    Sleep(100)
WEnd

Func FileLoad()

    _FileReadToArray($sFilePath, $aRetArray, Default , "¬")
    If @error = 1 Then
       MsgBox(0,"Error opening specified file","")
    ElseIf @error = 2 Then
       MsgBox(0,"Unable to split the file","")
    ElseIf @error = 3 Then
       MsgBox(0,"File lines have different numbers of fields","")
    ElseIf @error = 4 Then
       MsgBox(0,"No delimiters found","")
    EndIf

    _ArrayDisplay($aRetArray, "2D array - count", Default, 8)

EndFunc   ;==>FileLoad

Func SetHotStrings()

   For $x = 1 to UBound($aRetArray) - 1
      HotStringSet($aRetArray[$x][0],Expand)
   Next

EndFunc ;==>SetHotStrings

Func Expand($hotstring)

   Local $strlength = StringLen($hotstring)
   Send("{BACKSPACE " & $strlength & "}")
   For $x = 1 To UBound($aRetArray) - 1
      If $aRetArray[$x][0] = $hotstring Then
         Send($aRetArray[$x][1])
         ExitLoop
      EndIf
   Next

EndFunc ;==>Expand

Share this post


Link to post
Share on other sites

@Seeker: I found this code helped (I tried UnstickKeys2, but it didn't work well)

if you put a short sleep in to give you time to release the key it may also help...

[del the logMSG line - the forum text editors won't allow me to edit the code to remove it]

; sometimes autoit causes keys to get stuck down, UnstickKeys can help and needs $user32dll and $keys.
$user32dll = DllOpen("C:\Windows\System32\user32.dll")
;0xa0=LSHIFT;   0xa1=RSHIFT;    0xa2=LCTRL; 0xa3=RCTRL; 0xa4=LALT;  0xa5=RALT;  0x5b=LWIN;  0x5c=RWIN
Global Const $keys[8] = [0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x5b, 0x5c]


Func UnstickKeys()
logMSG("UnstickKeys")
; also a 'sleep()' call may help: Good News! I have determined that inserting a "sleep()" command before the "send()" command will also reliably resolve the stuck-key problem. On slow computers, a "send(300)" was required, while on fast machines, a "send(100)" was enough.  Most importantly, this experiment showed that the problem occurs BECAUSE the "send()" action starts before the hotkey detection function completes. When the "send()" action starts too soon, it seems to cause the detection function to silently error out and fail to finish it's normal cleanup after each use (speculation).
    For $vkvalue in $keys
        DllCall($user32dll,"int","keybd_event","int",$vkvalue,"int",0,"long",2,"long",0) ;Release each key
    Next
EndFunc

func UnstickKeys2()
logMSG("UnstickKeys2")
    send("{CTRLUP}{SHIFTUP}{ALTUP}{LWINUP}{RWINUP}")
EndFunc
Edited by dgm5555

Share this post


Link to post
Share on other sites

Hi 

Manadar, How can i add a non english string as hot sting ? I mean i am using an input method editor which uses a keyboard hook to display my native language. It has a Shortkey(Alt + W) to enable for each window. If i am working in MS word, then if i type Alt W, then word should be displayed my native language. if i type "A" in word, it will display the appropriate letter from my native language. I need to use your hotstring function while i am using this input method editor. Is it possible ?. Now i have tested with your function but it failed. 

My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

@

Manadar, How can i use a hotstring only in one application. I mean, I want to use ENTER key as hot key. And i need it only in SciTE. Other applications will receive an ordinary enter key message but SciTE will receive my function. 

My Contributions

UDF Link Viewer   --- A tool to visit the links of some most important UDFs 

 Includer_2  ----- A tool to type the #include statement automatically 

 Digits To Date  ----- date from 3 integer values

PrintList ----- prints arrays into console for testing.

 Alert  ------ An alternative for MsgBox 

 MousePosition ------- A simple tooltip display of mouse position

GRM Helper -------- A littile tool to help writing code with GUIRegisterMsg function

Access_UDF  -------- An UDF for working with access database files. (.*accdb only)

 

Share this post


Link to post
Share on other sites

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API Forum Rules *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

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

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library *

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

11

Signature last update: 2018-10-31

Share this post


Link to post
Share on other sites
On ‎18‎.‎04‎.‎2018 at 10:23 AM, DonChunior said:

Would it be possible that you update your UDF so that it also works, if the AutoIt option MustDeclareVars is set to 1?

AutoItSetOption("MustDeclareVars", 1)

 

Jos, I've created a pull request at your GitHub repository.
The changes I made fulfil my requested requirement that the AutoIt option MustDeclareVars can be set to 1.
Maybe you could merge my commit into your repository?!

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

×
×
  • Create New...