Jump to content

HotStrings - String hotkeys


jvanegmond
 Share

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
Link to comment
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
Link to comment
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
Link to comment
Share on other sites

  • 2 weeks later...

@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
Link to comment
Share on other sites

  • 1 month later...

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. 
Spoiler

My Contributions

Glance GUI Library - A gui library based on Windows api functions. Written in Nim programming language.

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)

 

Link to comment
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. 
Spoiler

My Contributions

Glance GUI Library - A gui library based on Windows api functions. Written in Nim programming language.

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)

 

Link to comment
Share on other sites

  • 11 months later...

Signature beginning:
Please remember: "AutoIt"..... *  Wondering who uses AutoIt and what it can be used for ? * Forum Rules *
ADO.au3 UDF * POP3.au3 UDF * XML.au3 UDF * IE on Windows 11 * How to ask ChatGPT for AutoIt Codefor 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 * Include Dependency Tree (Tool for analyzing script relations) * Show_Macro_Values.au3 *

 

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 * SciTE - Lexer for console pane

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 * 

OpenOffice/LibreOffice/XLS Related: WriterDemo.au3 * XLS/MDB from scratch with ADOX

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 TaskSchedulerIE Embedded Control Versioning (use IE9+ and HTML5 in a GUI) * PDF Related:How to get reference to PDF object embeded in IE * IE on Windows 11

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 *

I also encourage you to check awesome @trancexx code:  * Create COM objects from modules without any demand on user to register anything. * Another COM object registering stuffOnHungApp handlerAvoid "AutoIt Error" message box in unknown errors  * HTML editor

winhttp.au3 related : * https://www.autoitscript.com/forum/topic/206771-winhttpau3-download-problem-youre-speaking-plain-http-to-an-ssl-enabled-server-port/

"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."

Signature last update: 2023-04-24

Link to comment
Share on other sites

  • 1 year later...
  • 4 months later...
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?!

Link to comment
Share on other sites

  • 1 year later...
  • Developers
22 minutes ago, legend said:

still need this if anybody knows :D

Ever thought the question might not be that clear? ;) 
Funny though you seems to be looking for the answer for 2 years.

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

  • 3 years later...

Hello Jos and everybody,
I just discovered this script and it would be really helpful in everyday use.

I tried to run it on W10 without success: the message is always "Tests did not execute the expected amount". I just tested it on W7 but the message is the same, so this might be related to the updated version of AutoIt (I'm currenty using v3.3.16.1).

I've some experience and tried to figure out by myself if there are missing UDFs or changes, but then I saw the _HotString_Initialize() function which deals with things outside of my current knowledge.

I suspect the problem is in the initialization phase as, even setting true $hotString_Debug variable, I cannot see any response from the script. Could Jos or anybody else please point me to the right direction ?

Thanks and have a nice weekend.
V.

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...