■HotKey

HotKeyを使えばシステムフックを使わずにキー入力を取得できます。
つまりこれを使えば、アプリケーションのショートカットを作成・変更できるということです。

▽HotKey.bas

Option Explicit
Private Declare Function RegisterHotKey Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal id As Long, _
    ByVal fsModifiers As Long, _
    ByVal vk As Long _
) As Long
Private Declare Function UnregisterHotKey Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal id As Long _
) As Long
Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" ( _
    ByVal lpString As String _
) As Integer
Private Declare Function GlobalDeleteAtom Lib "kernel32" ( _
    ByVal nAtom As Integer _
) As Integer
Private Const MOD_ALT = &H1
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Public Function CreateHotKey(ByVal hWnd As Long, _
                             ByVal sHotKeyName As String, _
                             ByVal bShift As Boolean, _
                             ByVal bCtrl As Boolean, _
                             ByVal bAlt As Boolean, _
                             ByVal lVKey As Long) As Long
    Dim nID As Long
    nID = GlobalAddAtom(sHotKeyName)
    Call RegisterHotKey(hWnd, nID, IIf(bShift, MOD_SHIFT, 0) + IIf(bCtrl, MOD_CONTROL, 0) + IIf(bAlt, MOD_ALT, 0), lVKey)
    CreateHotKey = nID
End Function
Public Sub DeleteHotKey(ByVal hWnd As Long, ByVal nID As Long)
    Call UnregisterHotKey(hWnd, nID)
    Call GlobalDeleteAtom(nID)
End Sub

CreateHotKeyでHotKeyを登録して、DeleteHotKeyで削除。

CreateHotKey
hWnd WM_HOTKEYを処理するウィンドウのハンドル。
sHotKeyName  ホットキーの名前。適当に。
bShift  シフトキー
bCtrl  コントロールキー
bAlt  Altキー
lVKey  仮想キー
戻り値 ホットキーのID
例えば、Ctrl+Shift+Nを登録したい場合、

m_IdNew = CreateHotKey(Me.hWnd, "Painter_New", True, True, False, vbKeyN)

DeleteHotKey
hWnd CreateHotKeyで指定したhWnd
nID  CreateHotKeyの戻り値

 

Hotkeyが押された場合、hWndで指定したウィンドウにWM_HOTKEYが飛んでくるので、それを捕まえて処理をします。
wParamにはCreateHotKeyの戻り値(ID)が入っているので、それで処理分けできます。

あとは、対象のアプリにメッセージを送って各動作を行わせればいいわけです。
FindWindow APIで親のハンドルを探した後、EnumChildWIndows APIやChildWindowFromPoint API等でツールボックスのウィンドウハンドルを取得、そこへWM_LBUTTONDOWNWM_LBUTTONUPSendmessage してやる等すれば上手く行きます。
キーストロークはVB標準のSendkeysとか……。

これを汎用的なプログラムにするには一苦労ですが、自分の環境でとりあえず使ってみたい機能を実装するくらいなら簡単です。
プログラム(Win32API)の知識がある程度必要ですが、ショートカットに不満がある人はやってみる価値はあるかも。

Back