Jump to content

Not sure if I can use GUISetAccelerators rather than a hotkey


Recommended Posts

I'm a little confused about accelerators. If I have an application running such as notepad, and I want to assign a hotkey that will only be active when focus is on notepad, can I use accelerators to do this? All examples that I have show how to do this with an AutoIt generated window but not with an external program as the handle.

Link to post
Share on other sites
  • Moderators

SDeGonge,

Welcome to the AutoIt forums.

To the best of my knowledge, Accelerator keys can only be set for an AutoIt-created GUI.

M23

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

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites

Try this instead :

#include <WinAPIConv.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

Run("Notepad.exe")

OnAutoItExitRegister(OnAutoItExit)

Global $hWnd = GUICreate("")
GUIRegisterMsg($WM_HOTKEY, WM_HOTKEY)

_WinAPI_RegisterHotKey($hWnd, 0x0144, 0, 0x44) ; d
_WinAPI_RegisterHotKey($hWnd, 0x011B, 0, 0x1B) ; ESC

While Sleep(500)
WEnd

Func WM_HOTKEY($hWnd, $iMsg, $wParam, $lParam)
  Switch _WinAPI_HiWord($lParam)
    Case 0x44
      If WinActive("[CLASS:Notepad]") Then
        ConsoleWrite("D was pressed" & @CRLF)
      Else
        ConsoleWrite("sending d" & @CRLF)
        ControlSend("[ACTIVE]", "", "", "d")
      EndIf
    Case 0x1B
      Exit
  EndSwitch
EndFunc   ;==>WM_HOTKEY

Func OnAutoItExit()
  _WinAPI_UnregisterHotKey($hWnd, 0x0144)
  _WinAPI_UnregisterHotKey($hWnd, 0x011B)
EndFunc   ;==>OnAutoItExit

 

Link to post
Share on other sites
1 hour ago, Nine said:

Try this instead :

#include <WinAPIConv.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

Run("Notepad.exe")

OnAutoItExitRegister(OnAutoItExit)

Global $hWnd = GUICreate("")
GUIRegisterMsg($WM_HOTKEY, WM_HOTKEY)

_WinAPI_RegisterHotKey($hWnd, 0x0144, 0, 0x44) ; d
_WinAPI_RegisterHotKey($hWnd, 0x011B, 0, 0x1B) ; ESC

While Sleep(500)
WEnd

Func WM_HOTKEY($hWnd, $iMsg, $wParam, $lParam)
  Switch _WinAPI_HiWord($lParam)
    Case 0x44
      If WinActive("[CLASS:Notepad]") Then
        ConsoleWrite("D was pressed" & @CRLF)
      Else
        ConsoleWrite("sending d" & @CRLF)
        ControlSend("[ACTIVE]", "", "", "d")
      EndIf
    Case 0x1B
      Exit
  EndSwitch
EndFunc   ;==>WM_HOTKEY

Func OnAutoItExit()
  _WinAPI_UnregisterHotKey($hWnd, 0x0144)
  _WinAPI_UnregisterHotKey($hWnd, 0x011B)
EndFunc   ;==>OnAutoItExit

 

Interesting approach. I'll give it a try.

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

    No registered users viewing this page.

×
×
  • Create New...