AutoHotkey_L: Arrays, Debugger, x64, COM, #If expression ...
AutoHotkey_L is my custom build of AutoHotkey. Primary features include:
[*:3ov7hqku]Objects (associative arrays with extended functionality).
[*:3ov7hqku]Interactive debugging features, when used with a compatible debugging client.
[*:3ov7hqku]Native COM support and x64 compatibility (thanks to fincs and Sean).
[*:3ov7hqku]#if expression - Similar to #IfWinActive, but for arbitrary expressions.
[*:3ov7hqku]Assign icons to menu items and other improvements to icon support.
[*:3ov7hqku]Read more...Downloads
Source Code
Version History
Recent revisions do not support __expr or SimpleExpr.
If you must use these scripts, get Revision 13.
Otherwise, get the latest revision above.
Source code and binaries are available for L13.
Also just out of interest, have you discussed with Chris regarding merging some of these into the original, or do you intend to keep yours seperate??
also it's good to have While loop though it seems a bit slow compared to Loop.
i had bunch of suggestions for future ahk (any build here)
but i would not make suggestion here which might cause pressure on you. i'll just cheer it up
Thanks for your contribution to community as always.
keep up your good work!
Revision 7 - July 26, 2008
[*:1h2kzgru]Added: IsFunc(FuncName) - Returns a non-zero number if FuncName exists in the script or as a built-in function.
I'll get back to you on that...Also just out of interest, have you discussed with Chris regarding merging some of these into the original, or do you intend to keep yours seperate??
In my brief tests, While (expression) performed marginally faster than Loop .. if (expression) .. else break. Were you comparing While expression to Loop count? Apples and oranges...also it's good to have While loop though it seems a bit slow compared to Loop.
Btw, I use #if for hotkeys sensitive to:
[*:1h2kzgru]the active control - to "fix" certain behaviours of Edit controls, and for a "toggle word-wrap" hotkey specific to Scintilla controls.
[*:1h2kzgru]the window under the cursor - to exclude remote desktop and VMware from mouse hotkeys/gestures.
You're right, there was a big mistake in my test. i could see that While (expression) is pretty optimized. SorryWhile (expression) performed marginally faster than Loop .. if (expression) .. else break.
BTW, I'd like to make sure one thing: entering (or exiting?) While, is A_Index initialized/refreshed to zero? It seemed so in my test:
While A_Index=0 MsgBox % "Loop1: " . A_Index While A_Index=0 MsgBox % "Loop2: " . A_IndexHowever, the result was different in the nested While:
While A_Index=0 { MsgBox % "Loop1: " . A_Index While A_Index=0 MsgBox % "Loop2: " . A_Index }Looks like when entering the second While, A_Index is not refreshed to zero.
While A_Index=0 { MsgBox % "Loop1: " . A_Index While A_Index=1 MsgBox % "Loop2: " . A_Index MsgBox % "Loop1: " . A_Index }
Is there a way to increase/decrease/remove this timeout. I am aware that removing the timeout and then calling an infinate loop could disable keyboard input.
The reason I asked was I was running some tests using imagesearch basically creating some image sensitive hotkeys, and the imagesearchs tend to take a bit too long.
No, the expression is evaluated before the next iteration begins. In the case of the first iteration, it is evaluated before A_Index is given any value. Do you think A_Index should reflect which iteration is about to begin?I'd like to make sure one thing: entering (or exiting?) While, is A_Index initialized/refreshed to zero?
Btw, A_Index is normally 0 outside of any loops.
Not at the moment. Do you really want hotkeys that tie up the keyboard for longer than a second?Is there a way to increase/decrease/remove this timeout.
That could be quite useful, IMO, as While can be also used as a simplified For then. In that case, A_Index may better be initialized to 1 than 0 inside AHK's current scheme, though.Do you think A_Index should reflect which iteration is about to begin?
Superfraggle, note also that Windows implements its own time-out for low-level hooks. The default appears to be 5000ms.Revision 8 - July 27, 2008
[*:191z9win]Added: #IfTimeout directive to set the timeout for evaluation of #If expressions, in milliseconds. Default is 1000.
[*:191z9win]Added: Assume-static mode for functions. "Static" must precede any local/global variable declarations.
[*:191z9win]Added: One-true-brace support for While.
[*:191z9win]Changed: While now sets A_Index to the iteration about to begin.
The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop
The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
Assume-static and While with A_Index initialization work great. Thanks.Revision 8 - July 27, 2008
[*:1wo86xvt]Added: #IfTimeout directive to set the timeout for evaluation of #If expressions, in milliseconds. Default is 1000.
[*:1wo86xvt]Added: Assume-static mode for functions. "Static" must precede any local/global variable declarations.
[*:1wo86xvt]Added: One-true-brace support for While.
[*:1wo86xvt]Changed: While now sets A_Index to the iteration about to begin.
I realized I forgot to ask about this: Is there a particular reason that Break/Continue are forbidden inside While, or is it just an accidental omission?
To do list is really awesome.
Cheers and good luck with this.
Superfraggle, note also that Windows implements its own time-out for low-level hooks. The default appears to be 5000ms.
The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:
HKEY_CURRENT_USER\Control Panel\Desktop
The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
Excellent that works perfect, took me a while to get it working as desired, it appears at least on my XP system the default was 1000ms, the key didn't exist so I was unable to confirm that, but my tests seemed to confirm that. After creating the key, and setting it higher it worked with longer settings.
A point to any other users that may use this, If the IFtimeout is set higher than the windows default, this can resault in both the keys native function and your requested function being launched. Also if anyone does make changes to the key then you need to restart the computer for the changes to be picked up. (broadcasting a system setting change may help, but didnt have time to test.)