2010-07-28 4 views
3

teamplayer을 사용하고 있습니다. 더 많은 마우스를 컴퓨터에 연결하여 동시에 사용할 수 있습니다. 또한 다음 코드를 사용하여, 마우스 이벤트를 캡처하는 pyHook을 사용하고 있습니다 :이상한 방식으로 팀 플레이와 pyhook 상호 작용

import pyHook 
import pythoncom 

def onclick(event): 
    # called when mouse events are received 
    print 'MessageName:',event.MessageName 
    print 'Message:',event.Message 
    print 'Time:',event.Time 
    print 'WindowName:',event.WindowName 
    print 'Position:',event.Position 
    print '---' 
    return True 

hm = pyHook.HookManager() 
hm.MouseLeftDown = onclick 
hm.MouseLeftUp = onclick 
hm.HookMouse() 
pythoncom.PumpMessages() 

코드는 teamplayer없이 잘 작동 - 그것은 아래 위로 정확하게 마우스 버튼을 감지합니다. 프로그램을 실행하는 동안 팀 플레이를 시작하면 두 선수의 마우스 클릭을 정확하게 감지하여 잘 작동합니다. 내가 teamplayer가 시작 후 프로그램을 시작하면

그러나, 다음, 모든 마우스 클릭 두 번이된다 :

MessageName: mouse left down 
Message: 513 
Time: 7231317 
WindowName: None 
Position: (673, 367) 
--- 
MessageName: mouse left down 
Message: 513 
Time: 7231317 
WindowName: None 
Position: (673, 367) 
--- 
MessageName: mouse left up 
Message: 514 
Time: 7231379 
WindowName: None 
Position: (673, 367) 
--- 
MessageName: mouse left up 
Message: 514 
Time: 7231379 
WindowName: None 
Position: (673, 367) 

이 확인 될 것 - 나는 같은 타임 스탬프 클릭을 감지하고 두 번째를 무시할 수 있습니다. 그러나, 나는 다른 마우스로 클릭하면 패턴이 이상하다 :

입니다
MessageName: mouse left down 
Message: 513 
Time: 7305916 
WindowName: C:\Python25\python.exe 
Position: (569, 306) 
--- 
MessageName: mouse left down 
Message: 513 
Time: 7305916 
WindowName: C:\Python25\python.exe 
Position: (722, 365) 
--- 
MessageName: mouse left up 
Message: 514 
Time: 7309598 
WindowName: C:\Python25\python.exe 
Position: (722, 365) 
--- 
MessageName: mouse left up 
Message: 514 
Time: 7309598 
WindowName: C:\Python25\python.exe 
Position: (722, 365) 

는 첫 번째 다운 이벤트는 최대 마지막 이벤트에서 좌표를 사용합니다! 문제는 잘못된 이벤트가 먼저 발생하여 정확한 이벤트를 탐지하기가 더 어렵게됩니다. 팀 플레이가 꺼져 있거나 하나의 마우스 만 연결되어 있다면 그 이벤트가 유일하기 때문에 "첫 번째 이벤트 무시"라고 말할 수 없습니다!)

왜 이런 일이 벌어지는 지에 대한 아이디어와 일반적인 마우스 이벤트를 얻으려면 어떻게해야합니까?

답변

1

여러 아이디어 :

  • 이 같은 타임 스탬프에서 중복 클릭을 감지하고, 그 중 첫 번째를 무시합니다. 이렇게하면 나중에 한 번 눈금까지 처리가 지연되어 코드에서 문제가 다소 복잡해집니다.
  • pyhook 소스를 변경하여 중복 항목을 처리 할 수 ​​있습니다. 소스 코드 내에서 디버깅을하면 어떤 일이 벌어지고 있는지 더 많은 통찰력을 얻을 수 있습니다. 간단히 살펴보면 메시지를 대기열에 넣고 플러시하여 HookManagerMouseSwitch 함수에서이 작업을 수행 할 수 있습니다. 어떤 일이 일어나면 수정하지 않아도되는 객체를 래핑 할 수 있습니다. pyhook
  • SetWindowsHookEx API가 중복 이벤트를 생성하는 것일 가능성이 높습니다. 왜냐하면 팀원은 여러 마리의 마우스로 복잡한 작업을하기 때문입니다. 팀원에게보고하십시오. 그들은 어느 시점에서 그들의 편에서 그것을 고치기를 원할지도 모른다.