Jump to content

Recommended Posts

Posted

Hello!

I have a GUI program that uses hotkeys defined by hotkeyset().

But other programs use these hotkeys too. How to set these

hotkeys to work only if my program is active in this moment?

If it doesn't active, hotkeys should work in another program,

that active in this moment. Thanks.

Posted

I use accelerator Keys so I don't have the problem you describe:

; Define two dummy Controls in your GUI
$ButtonStrgA = GUICtrlCreateDummy()
$ButtonStrgC = GUICtrlCreateDummy()
...
; Set accelerator keys for Strg+a and Strg+c
Global $asAccelKeys[2][2] = [["^a", $ButtonStrgA],["^c", $ButtonStrgC]]
GUISetAccelerators($asAccelKeys)
...
While 1
    $nMsg = GUIGetMsg(1)
    Select
        Case $nMsg[0] = $GUI_EVENT_CLOSE
            Exit
        Case $nMsg[0] = $ButtonStrgA
            _SelectAll()
        Case $nMsg[0] = $ButtonStrgC
            _Clipboard()
    EndSelect
WEnd

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted (edited)

I use accelerator Keys so I don't have the problem you describe:

; Define two dummy Controls in your GUI
$ButtonStrgA = GUICtrlCreateDummy()
$ButtonStrgC = GUICtrlCreateDummy()
...
; Set accelerator keys for Strg+a and Strg+c
Global $asAccelKeys[2][2] = [["^a", $ButtonStrgA],["^c", $ButtonStrgC]]
GUISetAccelerators($asAccelKeys)
...
While 1
    $nMsg = GUIGetMsg(1)
    Select
        Case $nMsg[0] = $GUI_EVENT_CLOSE
            Exit
        Case $nMsg[0] = $ButtonStrgA
            _SelectAll()
        Case $nMsg[0] = $ButtonStrgC
            _Clipboard()
    EndSelect
WEnd

Thanks! I think this should be added to te AutoIt core. I mean the Hotkeyset() should parameters to choose:

0 = we want to hotkey working at any time (default)

1 = we want to hotkey working only if autoit program is active

Edited by Suppir
Posted (edited)

Hi,

I think this is a completely different approach. My solution works like a hotkey (most of the time) but it uses the GUI to "mimic" the hotkey.

The helpfile states: "A hotkey-press *typically* interrupts the active AutoIt function/statement" whereas my solution has to query the GUI before it reacts.

Imagine your script does a lot of processing after the user presses the "process" button on your GUI. The hotkey interrupts (nearly) every AutoIt statement immediately.

The GUI approach works as soon as the processing has finished and the script checks the input to the GUI again.

In the help file you will find an example on how to pass the pressed keys to other applications. So you could define a hotkey, when triggerde check if your GUI is the active window and if not pass the hotkey to the other applications.

Hope I could make myself clear :-)

Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

Another way.

#Include <HotKey.au3>

Global Const $VK_OEM_PLUS = 0xBB
Global Const $VK_OEM_MINUS = 0xBD

Global $Form, $Label
Global $i = 0

$Form = GUICreate('MyGUI', 200, 200)
$Label = GUICtrlCreateLabel($i, 20, 72, 160, 52, 0x01)
GUICtrlSetFont(-1, 32, 400, 0, 'Tahoma')
GUISetState()

; Assign "CTRL-(+)" with MyFunc1() and "CTRL-(-)" with MyFunc2() for created window only
_HotKeyAssign(BitOR($CK_CONTROL, $VK_OEM_PLUS), 'MyFunc1', 0, $Form)
_HotKeyAssign(BitOR($CK_CONTROL, $VK_OEM_MINUS), 'MyFunc2', 0, $Form)

Do
Until GUIGetMsg() = -3

Func MyFunc1()
    $i += 1
    GUICtrlSetData($Label, $i)
EndFunc   ;==>MyFunc1

Func MyFunc2()
    $i -= 1
    GUICtrlSetData($Label, $i)
EndFunc   ;==>MyFunc2

HotKey.au3

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
  • Recently Browsing   0 members

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