Seite 1 von 1

Backslash

Verfasst: 06.05.2014 18:45
von mk-soft
Bei der Mac Tastatur ist ja Backslash auf "Shift-Alt-7" versteckt.
Kann man zusätzlich diese auch auf z.B. Ctrl-7 legen.

OS X 10.9.2

FF 8)

Re: Backslash

Verfasst: 06.05.2014 18:57
von RSBasic
mk-soft hat geschrieben:Kann man zusätzlich diese auch auf z.B. Ctrl-7 legen.
Ist das eine Frage oder ein Satz? ;)

Wenn Frage, willst du das mit PureBasic unter OSX ändern oder ist das eine allgemeine Frage bzw. suchst du ein Programm, womit du Tasten umbelegen kannst? Wenn zweiteres: http://www.macwelt.de/downloads/Tastatu ... 88942.html
Bitte genauer sagen, was du möchtest. Wenn es nichts mit PB zu tun hat, muss ich dein Thread verschieben.

Re: Backslash

Verfasst: 06.05.2014 19:22
von mk-soft
War eine Frage :roll:

Am besten nur für den PB-Editor die Taste Ctrl-7 für Backslash hinzufügen.

Re: Backslash

Verfasst: 06.05.2014 19:34
von RSBasic
Vielleicht kannst du was damit anfangen und den Code für deine Tastenkombination anpassen: http://www.purebasic.fr/english/viewtop ... 79#p394079

Re: Backslash

Verfasst: 10.05.2014 19:33
von mk-soft
Dank Hilfe aus dem englischen Forum :allright:

Code: Alles auswählen

;-TOP

; Comment : Backslash over Ctrl+ß
; Author  : mk-soft

; *******************************
; Sendkey and Hotkey from Shardik
; *******************************

EnableExplicit

#kCGHIDEventTap= 0

; ----- Virtual keycodes (defined in Events.h)

#kVK_ANSI_A                    = $00
#kVK_ANSI_S                    = $01
#kVK_ANSI_D                    = $02
#kVK_ANSI_F                    = $03
#kVK_ANSI_H                    = $04
#kVK_ANSI_G                    = $05
#kVK_ANSI_Z                    = $06
#kVK_ANSI_X                    = $07
#kVK_ANSI_C                    = $08
#kVK_ANSI_V                    = $09
#kVK_ANSI_B                    = $0B
#kVK_ANSI_Q                    = $0C
#kVK_ANSI_W                    = $0D
#kVK_ANSI_E                    = $0E
#kVK_ANSI_R                    = $0F
#kVK_ANSI_Y                    = $10
#kVK_ANSI_T                    = $11
#kVK_ANSI_1                    = $12
#kVK_ANSI_2                    = $13
#kVK_ANSI_3                    = $14
#kVK_ANSI_4                    = $15
#kVK_ANSI_6                    = $16
#kVK_ANSI_5                    = $17
#kVK_ANSI_Equal                = $18
#kVK_ANSI_9                    = $19
#kVK_ANSI_7                    = $1A
#kVK_ANSI_Minus                = $1B
#kVK_ANSI_8                    = $1C
#kVK_ANSI_0                    = $1D
#kVK_ANSI_RightBracket         = $1E
#kVK_ANSI_O                    = $1F
#kVK_ANSI_U                    = $20
#kVK_ANSI_LeftBracket          = $21
#kVK_ANSI_I                    = $22
#kVK_ANSI_P                    = $23
#kVK_ANSI_L                    = $25
#kVK_ANSI_J                    = $26
#kVK_ANSI_Quote                = $27
#kVK_ANSI_K                    = $28
#kVK_ANSI_Semicolon            = $29
#kVK_ANSI_Backslash            = $2A
#kVK_ANSI_Comma                = $2B
#kVK_ANSI_Slash                = $2C
#kVK_ANSI_N                    = $2D
#kVK_ANSI_M                    = $2E
#kVK_ANSI_Period               = $2F
#kVK_ANSI_Grave                = $32
#kVK_ANSI_KeypadDecimal        = $41
#kVK_ANSI_KeypadMultiply       = $43
#kVK_ANSI_KeypadPlus           = $45
#kVK_ANSI_KeypadClear          = $47
#kVK_ANSI_KeypadDivide         = $4B
#kVK_ANSI_KeypadEnter          = $4C
#kVK_ANSI_KeypadMinus          = $4E
#kVK_ANSI_KeypadEquals         = $51
#kVK_ANSI_Keypad0              = $52
#kVK_ANSI_Keypad1              = $53
#kVK_ANSI_Keypad2              = $54
#kVK_ANSI_Keypad3              = $55
#kVK_ANSI_Keypad4              = $56
#kVK_ANSI_Keypad5              = $57
#kVK_ANSI_Keypad6              = $58
#kVK_ANSI_Keypad7              = $59
#kVK_ANSI_Keypad8              = $5B
#kVK_ANSI_Keypad9              = $5C

;	/* keycodes For keys that are independent of keyboard layout*/
#kVK_Return                    = $24
#kVK_Tab                       = $30
#kVK_Space                     = $31
#kVK_Delete                    = $33
#kVK_Escape                    = $35
#kVK_Command                   = $37
#kVK_Shift                     = $38
#kVK_CapsLock                  = $39
#kVK_Option                    = $3A
#kVK_Control                   = $3B
#kVK_RightShift                = $3C
#kVK_RightOption               = $3D
#kVK_RightControl              = $3E
#kVK_Function                  = $3F
#kVK_F17                       = $40
#kVK_VolumeUp                  = $48
#kVK_VolumeDown                = $49
#kVK_Mute                      = $4A
#kVK_F18                       = $4F
#kVK_F19                       = $50
#kVK_F20                       = $5A
#kVK_F5                        = $60
#kVK_F6                        = $61
#kVK_F7                        = $62
#kVK_F3                        = $63
#kVK_F8                        = $64
#kVK_F9                        = $65
#kVK_F11                       = $67
#kVK_F13                       = $69
#kVK_F16                       = $6A
#kVK_F14                       = $6B
#kVK_F10                       = $6D
#kVK_F12                       = $6F
#kVK_F15                       = $71
#kVK_Help                      = $72
#kVK_Home                      = $73
#kVK_PageUp                    = $74
#kVK_ForwardDelete             = $75
#kVK_F4                        = $76
#kVK_End                       = $77
#kVK_F2                        = $78
#kVK_PageDown                  = $79
#kVK_F1                        = $7A
#kVK_LeftArrow                 = $7B
#kVK_RightArrow                = $7C
#kVK_DownArrow                 = $7D
#kVK_UpArrow                   = $7E

; ----- Modifier key masks (defined in IOLLEvent.h)

#kCGEventFlagMaskShift     = $020000 ; = NX_SHIFTMASK
#kCGEventFlagMaskControl   = $040000 ; = NX_CONTROLMASK
#kCGEventFlagMaskAlternate = $080000 ; = NX_ALTERNATEMASK
#kCGEventFlagMaskCommand   = $100000 ; = NX_COMMANDMASK

; ----- Keyboard Hotkey
#kEventClassKeyboard = $6B657962     ; 'keyb'
#kEventHotKeyPressed = 5
#kEventParamDirectObject = $2D2D2D2D ; '----'
#typeEventHotKeyID = $686B6964       ; 'hkid'

#controlKeyBit = 12
#controlKey = 1 << #controlKeyBit
#shiftKeyBit = 9
#shiftKey = 1 << #shiftKeyBit

; ---------------------------------------------------------------------------------------

ImportC ""
  ; Sendkey
  CFRelease(CFTypeRef.L)
  CGEventCreateKeyboardEvent(CGEventSourceRef.L, CGVirtualKeyCode.U, KeyDown.L)
  CGEventPost(CGEventTapLocation.L, CGEventRef.L)
  CGEventSetFlags(CGEventRef.L, CGEventFlags.L)
  ; Keyboard Hotkey
  GetApplicationEventTarget()
  RegisterEventHotKey(HotKeyCode.L, HotKeyModifiers.L, HotKeyID.Q, EventTargetRef.I, OptionBits.L, *EventHotKeyRef)
  UnregisterEventHotKey(EventHotKeyRef.I)
EndImport

; ---------------------------------------------------------------------------------------

Procedure.i SendKey(VirtualKey.U, ModifierKey.i = 0)
  Protected KeyEvent.i

  KeyEvent = CGEventCreateKeyboardEvent(0, VirtualKey, #True)

  If KeyEvent
    ; ----- Press key
    CGEventSetFlags(KeyEvent, ModifierKey)
    CGEventPost(#kCGHIDEventTap, KeyEvent)
    CFRelease(KeyEvent)

    KeyEvent = CGEventCreateKeyboardEvent(0, VirtualKey, #False)
    CGEventSetFlags(KeyEvent, ModifierKey)

    If KeyEvent
      ; ----- Release key
      CGEventPost(#kCGHIDEventTap, KeyEvent)
      CFRelease(KeyEvent)
    EndIf
  EndIf

  ProcedureReturn KeyEvent
EndProcedure

; ---------------------------------------------------------------------------------------

Structure EventTypeSpec
  EventClass.L
  EventKind.L
EndStructure

Structure EventHotKeyID
  Signature.L
  ID.L
EndStructure

; ---------------------------------------------------------------------------------------

ProcedureC HotKeyHandler(NextHandlerRef.I, EventRef.I, *UserData)
  Protected HotKey.Q
  If GetEventParameter_(EventRef, #kEventParamDirectObject, #typeEventHotKeyID, 0, SizeOf(EventHotKeyID), 0, @HotKey) = 0
    If PeekL(HotKey) = $68746B31 ; HotKey\Signature = 'htk1' ?
      If PeekL(HotKey + 4)   ; HotKey\ID = 1 ?
        ;Delay(200)
        SendKey(#kVK_ANSI_7, #kCGEventFlagMaskShift | #kCGEventFlagMaskAlternate)
      EndIf
    EndIf
  EndIf
EndProcedure

; ---------------------------------------------------------------------------------------

Procedure IsRunning(App.s)
  
  Protected RunningApps = CocoaMessage(0, CocoaMessage(0, 0, "NSWorkspace sharedWorkspace"), "runningApplications")
  Protected RunningAppsCount = CocoaMessage(0, RunningApps, "count")
  Protected RunningApp, AppName.s
  Protected i, count
  
  While i < RunningAppsCount
    RunningApp = CocoaMessage(0, RunningApps, "objectAtIndex:", i)
    AppName.s = PeekS(CocoaMessage(0, CocoaMessage(0, RunningApp, "localizedName"), "UTF8String"), -1, #PB_UTF8)
    If AppName = App
      count + 1
    EndIf
    i + 1
  Wend
  If count > 1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

If IsRunning("Backslash")
  End
EndIf


Define HotKey.EventHotKeyID
Define HotKeyRef.I

Dim EventTypes.EventTypeSpec(0)

EventTypes(0)\EventClass = #kEventClassKeyboard
EventTypes(0)\EventKind = #kEventHotKeyPressed

HotKey\Signature = $68746B31 ; 'htk1'
HotKey\ID = 1

OpenWindow(0, #PB_Ignore, #PB_Ignore, 160, 30, "Backslash", #PB_Window_SystemMenu)
TextGadget(0, 0, 0, 160, 30, "Backslash (Ctrl+ß)", #PB_Text_Center)

; ----- Install EventHandler to react to pressing of hot key(s)
If InstallEventHandler_(GetApplicationEventTarget(), @HotKeyHandler(), 1, @EventTypes(), 0, 0) = 0
  ; ----- Register hot key (Control+Shift+Space)
  RegisterEventHotKey(27, #controlKey, @HotKey, GetApplicationEventTarget(), 0, @HotKeyRef)
EndIf

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

; ----- You do not need to unregister a hot key when your application
;       terminates; the system takes care of that for you. You can use this
;       function if the user changes a hot key for something in your
;       application - you would unregister the previous key and register your
;       new key.
UnregisterEventHotKey(HotKeyRef)

Re: Backslash

Verfasst: 11.05.2014 03:34
von mk-soft
Kleines Update.

Da es wohl Konflikte mit der gleichen Taste von Shortcut und SendKey gibt habe ich den Shortcut auf 'ß' geändert.

Re: Backslash

Verfasst: 11.05.2014 16:55
von mk-soft
Kleines Update 2
- App wird nicht mehr doppelt gestartet

FF :wink: