Da "TaskSwitchXP" sowas implementiert hatte, portierte ich kurzerhand die Codes, anstatt was eigenes aufzustellen.
Über den Code selbst hab ich nicht viel zu sagen. Ein StringGadget wird mit einem Callback bestückt und ein KeyboardHook fängt die Tastatureingaben ab. Der Wert wird als UserData in das StringGadget geschrieben.
WinHotkeyCtrl.pb
Code: Alles auswählen
;///////////////////////////////////////////////////////////////
;// WinHotkeyCtrl.pb //
;// vkCodes.pb //
;// //
;// Notice: The original code can be found here //
;// http://www.ntwind.com/software/taskswitchxp/download.html //
;// Copyright © 2004-2006 by Alexander Avdonin //
;// //
;// Portet into PureBasic by Tobias Bohrmann //
;///////////////////////////////////////////////////////////////
#MOD_ALT = $0001
#MOD_CONTROL = $0002
#MOD_SHIFT = $0004
#MOD_WIN = $0008
#WM_KEY = #WM_USER + 444
#VK_BROWSER_BACK = 166
#VK_LAUNCH_APP2 = 183
#TPM_NONOTIFY = 128
#TPM_RETURNCMD = 256
Structure KEYBOARDHOOKSTRUCTURE
vkCode.l
scanCode.l
flags.l
time.l
dwExtraInfo.l
EndStructure
Declare _WinHotkeyCtrlProc(hwnd, uMsg, wParam, lParam)
Declare SetHotkey(hwndWhc.l, dwHk.w)
Global _wpEditProc, _hwndWhc, _hhookKb
XIncludeFile "vkCodes.pb"
Procedure LOBYTE(Word.w)
ProcedureReturn Word & $FF
EndProcedure
Procedure HIBYTE(Word.w)
ProcedureReturn (Word >> 8) & $FF
EndProcedure
Procedure LOWORD(Long.l)
ProcedureReturn Long & $FFFF
EndProcedure
Procedure HIWORD(Long.l)
ProcedureReturn (Long >> 16) & $FFFF
EndProcedure
Procedure MAKEWHCDATA(vkCode, fModSet, fModRel, fIsPressed)
ProcedureReturn ((vkCode & $FF) | ((fModSet & $FF) << 8) | ((fModRel & $FF) << 16) | ((fIsPressed & $FF) << 24))
EndProcedure
Procedure InitWinHotkeyCtrls()
wcex.WNDCLASSEX
wcex\cbSize = SizeOf(WNDCLASSEX)
If Not GetClassInfoEx_(GetModuleHandle_(NULL), "Edit", @wcex)
ProcedureReturn #False
EndIf
_wpEditProc = wcex\lpfnWndProc
ProcedureReturn _wpEditProc
EndProcedure
Procedure SetHotkeyControl(hwndWhc.l) ;// SubClassWinHotkeyCtrl(hwndWhc.l) //
If Not _wpEditProc
If Not InitWinHotkeyCtrls()
ProcedureReturn #False
EndIf
EndIf
SetWindowLong_(hwndWhc, #GWL_WNDPROC, @_WinHotkeyCtrlProc())
SetHotkey(hwndWhc, MAKEWHCDATA(0, 0, 0, 0))
ProcedureReturn #True
EndProcedure
Procedure _LowLevelKeyboardProc(nCode.l, wParam.l, *kb.KEYBOARDHOOKSTRUCTURE)
If (nCode = #HC_ACTION And (wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP))
PostMessage_(_hwndWhc, #WM_KEY, *kb\vkCode, (wParam & 1))
EndIf
ProcedureReturn #True
EndProcedure
Procedure _UninstallKbHook()
fOk = #False
If _hhookKb
fOk = UnhookWindowsHookEx_(_hhookKb)
_hhookKb = #Null
EndIf
_hwndWhc = #Null
ProcedureReturn fOk
EndProcedure
Procedure _InstallKbHook(hwndWhc.l)
If (_hhookKb)
_UninstallKbHook()
EndIf
_hwndWhc = hwndWhc
_hhookKb = SetWindowsHookEx_(#WH_KEYBOARD_LL, @_LowLevelKeyboardProc(), GetModuleHandle_(#Null), #Null)
ProcedureReturn _hhookKb
EndProcedure
Procedure _SetWhcText(hwndWhc.l, dwHk.w)
Protected StrHk.s
StrHk = HotkeyToString(LOBYTE(LOWORD(dwHk)), HIBYTE(LOWORD(dwHk)))
If StrHk
SetWindowText_(hwndWhc, StrHk)
Else
SetWindowText_(hwndWhc, "None")
EndIf
SendMessage_(hwndWhc, #EM_SETSEL, $8FFFFFFF, $8FFFFFFF)
EndProcedure
Procedure GetHotkey(hwndWhc.l)
ProcedureReturn LOWORD(GetWindowLong_(hwndWhc, #GWL_USERDATA))
EndProcedure
Procedure SetHotkey(hwndWhc.l, dwHk.w)
_SetWhcText(hwndWhc, dwHk)
SetWindowLong_(hwndWhc, #GWL_USERDATA, dwHk)
EndProcedure
Procedure _WinHotkeyCtrlProc(hwnd.l, uMsg.l, wParam.l, lParam.l)
Static vkCode, fModSet, fModRel, fIsPressed, fMod, fRedraw
Select uMsg
Case #WM_KEY
dwWhcData = GetWindowLong_(hwnd, #GWL_USERDATA);
vkCode = LOBYTE(LOWORD(dwWhcData))
fModSet = HIBYTE(LOWORD(dwWhcData))
fModRel = LOBYTE(HIWORD(dwWhcData))
fIsPressed = HIBYTE(HIWORD(dwWhcData))
fMod = 0
fRedraw = #True
Select wParam
Case #VK_LWIN
fMod = #MOD_WIN
Case #VK_RWIN
fMod = #MOD_WIN
Case #VK_CONTROL
fMod = #MOD_CONTROL
Case #VK_LCONTROL
fMod = #MOD_CONTROL
Case #VK_RCONTROL
fMod = #MOD_CONTROL
Case #VK_MENU
fMod = #MOD_ALT
Case #VK_LMENU
fMod = #MOD_ALT
Case #VK_RMENU
fMod = #MOD_ALT
Case #VK_SHIFT
fMod = #MOD_SHIFT
Case #VK_LSHIFT
fMod = #MOD_SHIFT
Case #VK_RSHIFT
fMod = #MOD_SHIFT
EndSelect
If fMod
If Not lParam
If Not fIsPressed And vkCode
fModSet = 0
fModRel = 0
vkCode = 0
EndIf
fModRel & ~fMod
ElseIf (fModSet & fMod)
fModRel | fMod
EndIf
If fIsPressed Or Not vkCode
If Not lParam
If Not (fModSet & fMod)
fModSet | fMod
Else
fRedraw = #False
EndIf
Else
fModSet & ~fMod
EndIf
EndIf
Else
If (wParam = #VK_DELETE And fModSet = (#MOD_CONTROL | #MOD_ALT))
fModSet = 0
fModRel = 0
vkCode = 0
fIsPressed = #False
ElseIf (wParam = vkCode And lParam)
fIsPressed = #False
fRedraw = #False
Else
If (Not fIsPressed And Not lParam)
If (fModRel & fModSet)
fModSet = 0
fModRel = 0
EndIf
vkCode = wParam
fIsPressed = #True
EndIf
EndIf
EndIf
dwWhcData = MAKEWHCDATA(vkCode, fModSet, fModRel, fIsPressed)
SetWindowLong_(hwnd, #GWL_USERDATA, dwWhcData)
If fRedraw
_SetWhcText(hwnd, dwWhcData)
ProcedureReturn 0
EndIf
Case #WM_SETFOCUS
_InstallKbHook(hwnd)
Case #WM_KILLFOCUS
_UninstallKbHook()
Case #WM_CONTEXTMENU
hmenu = CreatePopupMenu_()
hmenu2 = CreatePopupMenu_()
For id = #VK_BROWSER_BACK To #VK_LAUNCH_APP2
AppendMenu_(hmenu2, #MF_STRING, id, GetKeyName(id))
Next id
AppendMenu_(hmenu, #MF_STRING | #MF_POPUP, hmenu2, "Multimedia")
hmenu2 = CreatePopupMenu_()
AppendMenu_(hmenu2, #MF_STRING, #VK_RETURN, GetKeyName(#VK_RETURN))
AppendMenu_(hmenu2, #MF_STRING, #VK_ESCAPE, GetKeyName(#VK_ESCAPE))
AppendMenu_(hmenu2, #MF_STRING, #VK_TAB, GetKeyName(#VK_TAB))
AppendMenu_(hmenu2, #MF_STRING, #VK_CAPITAL, GetKeyName(#VK_CAPITAL))
AppendMenu_(hmenu2, #MF_STRING, #VK_BACK, GetKeyName(#VK_BACK))
AppendMenu_(hmenu2, #MF_STRING, #VK_INSERT, GetKeyName(#VK_INSERT))
AppendMenu_(hmenu2, #MF_STRING, #VK_DELETE, GetKeyName(#VK_DELETE))
For id = #VK_SPACE To #VK_DOWN
AppendMenu_(hmenu2, #MF_STRING, id, GetKeyName(id))
Next id
AppendMenu_(hmenu, #MF_STRING | #MF_POPUP, hmenu2, "Standard")
hmenu2 = CreatePopupMenu_()
For id = #VK_F1 To #VK_F24
AppendMenu_(hmenu2, #MF_STRING, id, GetKeyName(id))
Next id
AppendMenu_(hmenu, #MF_STRING | #MF_POPUP, hmenu2, "Functionality")
AppendMenu_(hmenu, #MF_SEPARATOR, 0, #Null)
If fModSet & #MOD_WIN
AppendMenu_(hmenu, #MF_STRING | #MF_CHECKED, #VK_LWIN, "Win-key")
Else
AppendMenu_(hmenu, #MF_STRING, #VK_LWIN, "Win-key")
EndIf
If fModSet & #MOD_CONTROL
AppendMenu_(hmenu, #MF_STRING | #MF_CHECKED, #VK_CONTROL, "Control-key")
Else
AppendMenu_(hmenu, #MF_STRING, #VK_CONTROL, "Control-key")
EndIf
If fModSet & #MOD_SHIFT
AppendMenu_(hmenu, #MF_STRING | #MF_CHECKED, #VK_SHIFT, "Shift-key")
Else
AppendMenu_(hmenu, #MF_STRING, #VK_SHIFT, "Shift-key")
EndIf
If fModSet & #MOD_ALT
AppendMenu_(hmenu, #MF_STRING | #MF_CHECKED, #VK_MENU, "Alt-key")
Else
AppendMenu_(hmenu, #MF_STRING, #VK_MENU, "Alt-key")
EndIf
uMenuID = TrackPopupMenu_(hmenu, #TPM_RIGHTALIGN | #TPM_RIGHTBUTTON | #TPM_NONOTIFY | #TPM_RETURNCMD, LOWORD(lParam), HIWORD(lParam), 0, hwnd, #Null);
If uMenuID > 0 And uMenuID < 256
Select uMenuID
Case #VK_LWIN
If vkCode
fModSet ! #MOD_WIN
fModRel | (fModSet & #MOD_WIN)
EndIf
Case #VK_CONTROL
If vkCode
fModSet ! #MOD_CONTROL
fModRel | (fModSet & #MOD_CONTROL)
EndIf
Case #VK_SHIFT
If vkCode
fModSet ! #MOD_SHIFT
fModRel | (fModSet & #MOD_SHIFT)
EndIf
Case #VK_MENU
If vkCode
fModSet ! #MOD_ALT
fModRel | (fModSet & #MOD_ALT)
EndIf
Default
vkCode = uMenuID
fIsPressed = #False
EndSelect
dwWhcData = MAKEWHCDATA(vkCode, fModSet, fModRel, fIsPressed)
SetWindowLong_(hwnd, #GWL_USERDATA, dwWhcData);
_SetWhcText(hwnd, dwWhcData)
SetFocus_(hwnd)
EndIf
DestroyMenu_(hmenu)
ProcedureReturn #False
Case #WM_CHAR
ProcedureReturn #False
Case #WM_SETCURSOR
ProcedureReturn #False
Case #WM_DESTROY
If hwnd = _hwndWhc
_UninstallKbHook()
EndIf
EndSelect
ProcedureReturn CallWindowProc_(_wpEditProc, hwnd, uMsg, wParam, lParam)
EndProcedure
Code: Alles auswählen
Global Dim s_pszKeys.s(255)
Procedure.s GetKeyName(vkCode)
vkCode & $FF
s_pszKeys(0) = "Unused"
s_pszKeys(1) = "Left mouse button"
s_pszKeys(2) = "Right mouse button"
s_pszKeys(3) = "Control-break"
s_pszKeys(4) = "Middle mouse button"
s_pszKeys(5) = "X1 mouse button"
s_pszKeys(6) = "X2 mouse button"
s_pszKeys(7) = "Undefined"
s_pszKeys(8) = "Backspace"
s_pszKeys(9) = "Tab"
s_pszKeys(10) = "Unknown"
s_pszKeys(11) = "Unknown"
s_pszKeys(12) = "Clear"
s_pszKeys(13) = "Enter"
s_pszKeys(14) = "Unknown"
s_pszKeys(15) = "Unknown"
s_pszKeys(16) = "Shift"
s_pszKeys(17) = "Control"
s_pszKeys(18) = "Alt"
s_pszKeys(19) = "Pause"
s_pszKeys(20) = "Caps Lock"
s_pszKeys(21) = "IME Kana mode"
s_pszKeys(22) = "Unknown"
s_pszKeys(23) = "IME Junja mode"
s_pszKeys(24) = "IME final mode"
s_pszKeys(25) = "IME Hanja mode"
s_pszKeys(26) = "Unknown"
s_pszKeys(27) = "Esc"
s_pszKeys(28) = "IME convert"
s_pszKeys(29) = "IME nonconvert"
s_pszKeys(30) = "IME accept"
s_pszKeys(31) = "IME mode change"
s_pszKeys(32) = "Space"
s_pszKeys(33) = "Page Up"
s_pszKeys(34) = "Page Down"
s_pszKeys(35) = "End"
s_pszKeys(36) = "Home"
s_pszKeys(37) = "Left Arrow"
s_pszKeys(38) = "Up Arrow"
s_pszKeys(39) = "Right Arrow"
s_pszKeys(40) = "Down Arrow"
s_pszKeys(41) = "Select"
s_pszKeys(42) = "Print"
s_pszKeys(43) = "Execute"
s_pszKeys(44) = "Print Screen"
s_pszKeys(45) = "Insert"
s_pszKeys(46) = "Delete"
s_pszKeys(47) = "Help"
s_pszKeys(48) = "0"
s_pszKeys(49) = "1"
s_pszKeys(50) = "2"
s_pszKeys(51) = "3"
s_pszKeys(52) = "4"
s_pszKeys(53) = "5"
s_pszKeys(54) = "6"
s_pszKeys(55) = "7"
s_pszKeys(56) = "8"
s_pszKeys(57) = "9"
s_pszKeys(58) = "Unknown"
s_pszKeys(59) = "Unknown"
s_pszKeys(60) = "Unknown"
s_pszKeys(61) = "Unknown"
s_pszKeys(62) = "Unknown"
s_pszKeys(63) = "Unknown"
s_pszKeys(64) = "Unknown"
s_pszKeys(65) = "A"
s_pszKeys(66) = "B"
s_pszKeys(67) = "C"
s_pszKeys(68) = "D"
s_pszKeys(69) = "E"
s_pszKeys(70) = "F"
s_pszKeys(71) = "G"
s_pszKeys(72) = "H"
s_pszKeys(73) = "I"
s_pszKeys(74) = "J"
s_pszKeys(75) = "K"
s_pszKeys(76) = "L"
s_pszKeys(77) = "M"
s_pszKeys(78) = "N"
s_pszKeys(79) = "O"
s_pszKeys(80) = "P"
s_pszKeys(81) = "Q"
s_pszKeys(82) = "R"
s_pszKeys(83) = "S"
s_pszKeys(84) = "T"
s_pszKeys(85) = "U"
s_pszKeys(86) = "V"
s_pszKeys(87) = "W"
s_pszKeys(88) = "X"
s_pszKeys(89) = "Y"
s_pszKeys(90) = "Z"
s_pszKeys(91) = "Left Win"
s_pszKeys(92) = "Right Win"
s_pszKeys(93) = "App"
s_pszKeys(94) = "Unknown"
s_pszKeys(95) = "Sleep"
s_pszKeys(96) = "Num 0"
s_pszKeys(97) = "Num 1"
s_pszKeys(98) = "Num 2"
s_pszKeys(99) = "Num 3"
s_pszKeys(100) = "Num 4"
s_pszKeys(101) = "Num 5"
s_pszKeys(102) = "Num 6"
s_pszKeys(103) = "Num 7"
s_pszKeys(104) = "Num 8"
s_pszKeys(105) = "Num 9"
s_pszKeys(106) = "Mul"
s_pszKeys(107) = "Add"
s_pszKeys(108) = "Separator"
s_pszKeys(109) = "Sub"
s_pszKeys(110) = "Decimal"
s_pszKeys(111) = "Div"
s_pszKeys(112) = "F1"
s_pszKeys(113) = "F2"
s_pszKeys(114) = "F3"
s_pszKeys(115) = "F4"
s_pszKeys(116) = "F5"
s_pszKeys(117) = "F6"
s_pszKeys(118) = "F7"
s_pszKeys(119) = "F8"
s_pszKeys(120) = "F9"
s_pszKeys(121) = "F10"
s_pszKeys(122) = "F11"
s_pszKeys(123) = "F12"
s_pszKeys(124) = "F13"
s_pszKeys(125) = "F14"
s_pszKeys(126) = "F15"
s_pszKeys(127) = "F16"
s_pszKeys(128) = "F17"
s_pszKeys(129) = "F18"
s_pszKeys(130) = "F19"
s_pszKeys(131) = "F20"
s_pszKeys(132) = "F21"
s_pszKeys(133) = "F22"
s_pszKeys(134) = "F23"
s_pszKeys(135) = "F24"
s_pszKeys(136) = "Unknown"
s_pszKeys(137) = "Unknown"
s_pszKeys(138) = "Unknown"
s_pszKeys(139) = "Unknown"
s_pszKeys(140) = "Unknown"
s_pszKeys(141) = "Unknown"
s_pszKeys(142) = "Unknown"
s_pszKeys(143) = "Unknown"
s_pszKeys(144) = "Num Lock"
s_pszKeys(145) = "Scroll Lock"
s_pszKeys(146) = "OEM"
s_pszKeys(147) = "OEM"
s_pszKeys(148) = "OEM"
s_pszKeys(149) = "OEM"
s_pszKeys(150) = "OEM"
s_pszKeys(151) = "Unknown"
s_pszKeys(152) = "Unknown"
s_pszKeys(153) = "Unknown"
s_pszKeys(154) = "Unknown"
s_pszKeys(155) = "Unknown"
s_pszKeys(156) = "Unknown"
s_pszKeys(157) = "Unknown"
s_pszKeys(158) = "Unknown"
s_pszKeys(159) = "Unknown"
s_pszKeys(160) = "Left Shift"
s_pszKeys(161) = "Right Shift"
s_pszKeys(162) = "Left Control"
s_pszKeys(163) = "Right Control"
s_pszKeys(164) = "Left Alt"
s_pszKeys(165) = "Right Alt"
s_pszKeys(166) = "Browser Back"
s_pszKeys(167) = "Browser Forward"
s_pszKeys(168) = "Browser Refresh"
s_pszKeys(169) = "Browser Stop"
s_pszKeys(170) = "Browser Search"
s_pszKeys(171) = "Browser Favorites"
s_pszKeys(172) = "Browser Home"
s_pszKeys(173) = "Volume Mute"
s_pszKeys(174) = "Volume Down"
s_pszKeys(175) = "Volume Up"
s_pszKeys(176) = "Next Track"
s_pszKeys(177) = "Previous Track"
s_pszKeys(178) = "Stop Media"
s_pszKeys(179) = "Play/Pause Media"
s_pszKeys(180) = "Start Mail"
s_pszKeys(181) = "Select Media"
s_pszKeys(182) = "Start App 1"
s_pszKeys(183) = "Start App 2"
s_pszKeys(184) = "Unknown"
s_pszKeys(185) = "Unknown"
s_pszKeys(186) = ";:"
s_pszKeys(187) = "=+"
s_pszKeys(188) = "<"
s_pszKeys(189) = "-_"
s_pszKeys(190) = ".>"
s_pszKeys(191) = "/?"
s_pszKeys(192) = "`~"
s_pszKeys(193) = "Unknown"
s_pszKeys(194) = "Unknown"
s_pszKeys(195) = "Unknown"
s_pszKeys(196) = "Unknown"
s_pszKeys(197) = "Unknown"
s_pszKeys(198) = "Unknown"
s_pszKeys(199) = "Unknown"
s_pszKeys(200) = "Unknown"
s_pszKeys(201) = "Unknown"
s_pszKeys(202) = "Unknown"
s_pszKeys(203) = "Unknown"
s_pszKeys(204) = "Unknown"
s_pszKeys(205) = "Unknown"
s_pszKeys(206) = "Unknown"
s_pszKeys(207) = "Unknown"
s_pszKeys(208) = "Unknown"
s_pszKeys(209) = "Unknown"
s_pszKeys(210) = "Unknown"
s_pszKeys(211) = "Unknown"
s_pszKeys(212) = "Unknown"
s_pszKeys(213) = "Unknown"
s_pszKeys(214) = "Unknown"
s_pszKeys(215) = "Unknown"
s_pszKeys(216) = "Unknown"
s_pszKeys(217) = "Unknown"
s_pszKeys(218) = "Unknown"
s_pszKeys(219) = "[{"
s_pszKeys(220) = "|"
s_pszKeys(221) = "]}"
s_pszKeys(222) = "'"+Chr(34)
s_pszKeys(223) = "OEM"
s_pszKeys(224) = "Unknown"
s_pszKeys(225) = "OEM"
s_pszKeys(226) = "<> or |"
s_pszKeys(227) = "OEM"
s_pszKeys(228) = "OEM"
s_pszKeys(229) = "IME Process key"
s_pszKeys(230) = "OEM"
s_pszKeys(231) = "VK_PACKET"
s_pszKeys(232) = "Unknown"
s_pszKeys(233) = "OEM"
s_pszKeys(234) = "OEM"
s_pszKeys(235) = "OEM"
s_pszKeys(236) = "OEM"
s_pszKeys(237) = "OEM"
s_pszKeys(238) = "OEM"
s_pszKeys(239) = "OEM"
s_pszKeys(240) = "OEM"
s_pszKeys(241) = "OEM"
s_pszKeys(242) = "OEM"
s_pszKeys(243) = "OEM"
s_pszKeys(244) = "OEM"
s_pszKeys(245) = "OEM"
s_pszKeys(246) = "Attn"
s_pszKeys(247) = "CrSel"
s_pszKeys(248) = "ExSel"
s_pszKeys(249) = "Erase EOF"
s_pszKeys(250) = "Play"
s_pszKeys(251) = "Zoom"
s_pszKeys(252) = "Unknown"
s_pszKeys(253) = "PA1"
s_pszKeys(254) = "Clear"
s_pszKeys(255) = "Unknown"
ProcedureReturn s_pszKeys(vkCode)
EndProcedure
Procedure.s HotkeyToString(vkCode, fModifiers)
Protected pBuffer.s
If (fModifiers & #MOD_WIN)
If Right(pBuffer, 1) = Chr(0)
pBuffer = Left(pBuffer, Len(pBuffer) - 1)
EndIf
pBuffer+"Win + "+Chr(0)
EndIf
If (fModifiers & #MOD_CONTROL)
If Right(pBuffer, 1) = Chr(0)
pBuffer = Left(pBuffer, Len(pBuffer) - 1)
EndIf
pBuffer+"Ctrl + "+Chr(0)
EndIf
If (fModifiers & #MOD_ALT)
If Right(pBuffer, 1) = Chr(0)
pBuffer = Left(pBuffer, Len(pBuffer) - 1)
EndIf
pBuffer+"Alt + "+Chr(0)
EndIf
If (fModifiers & #MOD_SHIFT)
If Right(pBuffer, 1) = Chr(0)
pBuffer = Left(pBuffer, Len(pBuffer) - 1)
EndIf
pBuffer+"Shift + "+Chr(0)
EndIf
If vkCode
If Len(Hex(vkCode)) = 1
pszCode.s = "< "+GetKeyName(vkCode)+" (0x0"+Hex(vkCode)+") >"
Else
pszCode.s = "< "+GetKeyName(vkCode)+" (0x"+Hex(vkCode)+") >"
EndIf
If Right(pBuffer, 1) = Chr(0)
pBuffer = Left(pBuffer, Len(pBuffer) - 1)
EndIf
pBuffer+pszCode+Chr(0)
EndIf
ProcedureReturn pBuffer
EndProcedure
Code: Alles auswählen
XIncludeFile "WinHotkeyCtrl.pb"
Enumeration
#Window_0
EndEnumeration
Enumeration
#String_0
#String_1
#Button_0
EndEnumeration
If OpenWindow(#Window_0, 0, 0, 250, 95, "WinHotkeyCtrl", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
If CreateGadgetList(WindowID(#Window_0))
StringGadget(#String_0, 5, 5, 240, 20, "")
StringGadget(#String_1, 5, 30, 240, 20, "")
ButtonGadget(#Button_0, 5, 70, 50, 20, "Exit")
SetHotkeyControl(GadgetID(#String_0))
SetHotkeyControl(GadgetID(#String_1))
EndIf
EndIf
Repeat
Until EventGadget() = #Button_0 Or WaitWindowEvent() = #PB_Event_CloseWindow
Debug GetHotkey(GadgetID(#String_0))
Debug GetHotkey(GadgetID(#String_1))