Code: Select all
; AutoHotkey Version: 1.0.40.11
; Language: English
; Platform: WinXP
; Author: halweg
; Send keysequences to dialog boxes
;**************************************************************************************
;******************************* Initialization ***************************************
;**************************************************************************************
;!!! Change the next two lines as required !!!
inifile = C:\Users\jduchesn\Documents\AutoHotkey112400_ansi\closewindow.ini
title_of_a_new_notepad_window = Untitled - Notepad
COORDMODE, TOOLTIP, SCREEN
SETTITLEMATCHMODE, 1
DETECTHIDDENTEXT, ON
DETECTHIDDENWINDOWS, ON
;*** Read saved keysequences
number_of_dialogs := my_iniread("Dialoge", "Number_of_dialogs")
LOOP, %number_of_dialogs%
{
wtitle%A_INDEX% := my_iniread("Dialoge", "Title" . A_INDEX)
wtext%A_INDEX% := my_iniread("Dialoge", "Text" . A_INDEX)
wkeys%A_INDEX% := my_iniread("Dialoge", "Keys" . A_INDEX)
}
;*** Start the dialog-watching
last_id = leer
SETTIMER, handle_dialog_boxes, 2000
RETURN
;**************************************************************************************
;*************************** Timed dialogbox handler **********************************
;**************************************************************************************
handle_dialog_boxes:
;*** It's time so look for new active windows
new_id := WINEXIST("A")
IF new_id <> %last_id%
IFWINEXIST, Priority Alert
{
;*** run putty session to talk to relay
Run C:\Program Files (x86)\PUTTY.exe -load "NBRelay"
Sleep, 500
IFWINEXIST, 129.93.104.28-PuTTY
{ WinActivate, 129.93.104.28-PuTTY
Sleep, 500
Send {Enter}
Sleep, 1000
Send setstate,1:1,1 {Enter}
Sleep, 500
Send getstate,1:1 {Enter}
Sleep, 500
Send setstate,1:1,0 {Enter}
Sleep, 500
WinClose, 129.93.104.28-PuTTY
Sleep, 1000
Send {Enter}
}
Sleep, 4000
WinClose, Priority Alert
}
{
last_id =%new_id%
;*** A new window was found - Now: Compare the active window's title with all saved titles one by one
LOOP, %number_of_dialogs%
IFWINEXIST, Priority Alert
{
;*** run putty session to talk to relay
Run C:\Program Files (x86)\PUTTY.exe -load "NBRelay"
Sleep, 500
IFWINEXIST, 129.93.104.28-PuTTY
{ WinActivate, 129.93.104.28-PuTTY
Sleep, 500
Send {Enter}
Sleep, 1000
Send setstate,1:1,1 {Enter}
Sleep, 500
Send getstate,1:1 {Enter}
Sleep, 500
Send setstate,1:1,0 {Enter}
Sleep, 500
WinClose, 129.93.104.28-PuTTY
Sleep, 1000
Send {Enter}
}
Sleep, 4000
WinClose, Priority Alert
}
keys_to_send := wkeys%A_INDEX%
title_to_watch := wtitle%A_INDEX%
text_to_watch := wtext%A_INDEX%
;*** Window title found - Now: Does it contain the right text?
WINGETTEXT, act_wintext, A
IFINSTRING, act_wintext, %text_to_watch%
{
;*** The text is ok - Now: Do we need a SLEEP?
IFINSTRING, keys_to_send, SLEEP
{
STRINGLEFT, sleeptime, keys_to_send, 4
STRINGTRIMLEFT, keys_to_send, keys_to_send, 9
SLEEP, %sleeptime%
}
;*** SLEEP was done - Now: Send the keys
my_beeps(2, 70)
timed_tooltip("Sending """ . keys_to_send . """", 2000)
SEND, %keys_to_send%
;*** Keys was sent - Now: Watch the dialogbox disappears
WINWAITCLOSE, %title_to_watch%, %text_to_watch%, 2
IF ERRORLEVEL = 1
MSGBOX, No success!`nThe actual Window couldn't be handled by ""%keys_to_send%""
}
}
}
}
RETURN
;**************************************************************************************
;************************* Registration of a new dialog-handling keysequence **********
;**************************************************************************************
SCROLLLOCK::
my_beeps(1, 70)
;*** 1. Analyse the current active window (dialogbox to be registered)
WINGETTITLE, new_title, A
WINGETTEXT, all_window_text, A
;*** 2. User should select a significant piece of text from the dialogbox window by notepad
CLIPBOARD =
RUN notepad.exe
WINWAITACTIVE, %title_of_a_new_notepad_window%
SETKEYDELAY, -1
SEND, %all_window_text%
SETKEYDELAY, 10
MSGBOX, Plese select (by mouse) a significant piece (maximum one line) of text to identify the dialogbox in future`nThen press OK
SEND, ^c
new_text = %CLIPBOARD%
;*** Close notepad without changes
SEND, !{BS}!{F4}
;*** 3. User should input the keysequence for future handling of the dialogbox
INPUTBOX, new_keys, Dialog-Box Handler for %new_title%,
(
Please enter a keyssequence that should handle this dialogbox in future. Use AHK - codes.
If the dialogbox needs a delay, include a SLEEP time in ms.
EXAMPLES:
my_name{TAB}my_password{ENTER}
2500SLEEP{TAB}1234{ENTER}
)
IF ERRORLEVEL = 0
{
IF new_keys =
MSGBOX, Please Enter at least one key!
ELSE
{
;*** 4. Test the new keysequence, ask if the dialogbox was handled successful
WINACTIVATE, %new_title%
keys_to_send = %new_keys%
IFINSTRING, new_keys, SLEEP
{
STRINGLEFT, sleeptime, new_keys, 4
STRINGTRIMLEFT, keys_to_send, new_keys, 9
SLEEP, %sleeptime%
}
my_beeps(2, 70)
timed_tooltip("Sende" . keys_to_send, 5000)
SEND, %keys_to_send%
MSGBOX, 36, Successful dialogbox handling?, Save new Keysequence?
IFMSGBOX, Yes
{
;*** 5. Save dialogbox data
new_number_of_dialogs := number_of_dialogs + 1
INIWRITE, %new_number_of_dialogs%, %inifile%, Dialoge, Number_of_dialogs
INIWRITE, %new_title%, %inifile%, Dialoge, Title%new_number_of_dialogs%
INIWRITE, %new_text%, %inifile%, Dialoge, Text%new_number_of_dialogs%
INIWRITE, %new_keys%, %inifile%, Dialoge, Keys%new_number_of_dialogs%
;*** 6. Enable the handling of the new dialogbox in the current script
wtitle%new_number_of_dialogs% := new_title
wtext%new_number_of_dialogs% := new_text
wkeys%new_number_of_dialogs% := new_keys
number_of_dialogs := new_number_of_dialogs ;*** Enable the Dialogwatching of the new registred dialogbox
timed_tooltip("The Window """ new_title """`nText """ new_text """`nin future will be handled by """ new_keys """",5000)
my_beeps(1, 500)
}
}
}
RETURN
;**************************************************************************************
;********************************** Functions ****************************************
;**************************************************************************************
;*** This function makes a number of beeps
my_beeps(number, duration)
{
LOOP, %number%
{
SOUNDBEEP, 650, %duration%
SLEEP, 50
}
}
;*** This function shows a tooltip and will close it later
timed_tooltip(text, milliseconds=2000)
{
TOOLTIP, %text%, 0, 0
SETTIMER, close_tooltip, %milliseconds%
}
close_tooltip: ;*** Closes the standard tooltip
SETTIMER, close_tooltip, Off
TOOLTIP
RETURN
;*** This function reads a value from the inifile and will finish the script if ERROR value detected
my_iniread(m_section, m_key)
{
global inifile
INIREAD, m_value, %inifile%, %m_section%, %m_key%
IF m_value = ERROR
{
MSGBOX, An Error was encountered while reading inifile`nKey: %m_key%
,`nsection:%m_section%
,`nfile:%inifile%
EXITAPP
}
ELSE
RETURN %m_value%
}