2011-08-10 3 views
0

매크로 레코더 (PyHook 기반)를 쓰고 있는데 # 1에 Alt 키가 있으면 키 조합 # 1을 연결 한 후 # 2 키 조합을 누르지 못하게합니다. 수정 자 키를 누르지 않고 무엇을해야합니까? (alt, ctrl, shift)? 아래에는 두 가지 주요 기능이 있습니다.매크로 레코더의 Alt 키 문제

def press_key(Key, gModifiers = []): 
    keybd_event(KeyDict["alt"], 0, KEYEVENTF_KEYUP, 0) 
    keybd_event(KeyDict["ctrl"], 0, KEYEVENTF_KEYUP, 0) 
    keybd_event(KeyDict["shift"], 0, KEYEVENTF_KEYUP, 0) 
    for Modifier in gModifiers: 
     keybd_event(KeyDict[Modifier], 0, 0, 0) 
    keybd_event(KeyDict[Key], 0, 0, 0) 
    keybd_event(KeyDict[Key], 0, KEYEVENTF_KEYUP, 0) 
    for Modifier in reversed(gModifiers): 
     keybd_event(KeyDict[Modifier], 0, KEYEVENTF_KEYUP, 0) 

def OnKeyboardEvent(Event): 
    global HM, Mode, PressedKeys, PrevKeyName 
    if Mode == "play": 
     return True 
    PyHookKeyName = Event.Key 
    IsAppend = 1 
    if PyHookKeyName in PyHookDict: 
     KeyName = PyHookDict[PyHookKeyName] 
     if is_modifier(KeyName) and KeyName == PrevKeyName: 
      IsAppend = 0 
    elif len(PyHookKeyName) > 1 and PyHookKeyName[0] == "F": # F1 .. F12 
     KeyName = PyHookKeyName 
    else: 
     KeyName = Event.Key 
    if Mode == "record" and IsAppend: 
     append(PressedKeys, KeyName) 
    if not is_modifier(PrevKeyName): 
     AppsPressed = 0 
     WinPressed = 0 
    if KeyName == "apps": 
     AppsPressed = 1 
    elif KeyName == "win": 
     WinPressed = 1 
    if Mode == "hook" and KeyName in MacrosKeysDict: 
     Mode = "play" 
     PressedModifiersSum = pressed_modifiers_sum() 
     if PressedModifiersSum in MacrosKeysDict[KeyName]: 
      MacroBlock = MacrosDict[(KeyName, PressedModifiersSum)] 
      Events = MacroBlock[2] 
      for Event in Events: 
       press_key(Event[0], Event[1]) 
     Mode = "hook" 
    PrevKeyName = KeyName 
    # return True to pass the event to other handlers 
    return True 

답변

0

keybd_event(KeyDict["ctrl"], 0, KEYEVENTF_KEYUP, 0) 
keybd_event(KeyDict["shift"], 0, KEYEVENTF_KEYUP, 0) 
keybd_event(KeyDict["alt"], 0, KEYEVENTF_KEYUP, 0) 

keybd_event(KeyDict["alt"], 0, KEYEVENTF_KEYUP, 0) 
keybd_event(KeyDict["ctrl"], 0, KEYEVENTF_KEYUP, 0) 
keybd_event(KeyDict["shift"], 0, KEYEVENTF_KEYUP, 0) 

로부터의 코드를 변경하여 문제를 해결한다. 그것은 내가 이제까지 보았던 가장 나쁜 종류의 마술이다! !!