2014-06-09 4 views
0

나는 윈도우 7과 VB2010을 사용하고있다. 그러나 나는 결코 그것을 공부하지 않았다. 나는 autodidact이다. (나는 인터넷에서 코드를 복사하고 함께 작동하기를 바라고 붙여 둔다. 영어도하지 않지만, 내가 쓰고있는 것을 이해하면 잘하면.마우스 이벤트 후 오른쪽 및 왼쪽 클릭 스왑 후

나는 또 다른 창 (다른 프로세스)에서 클릭하는 프로그램을 만들려고 노력하고 있으며, 꽤 잘 작동하는 것 같다. 그러나 프로세스가 끝나면 닫고 다시 시작해야합니다.
하지만 여기 버그가 있습니다 : 어디에서나 클릭 (이제 바탕 화면을 클릭하고 있습니다)을 시뮬레이트하려고하면 작동하지 않습니다. 오히려 내가 왼쪽 클릭을 시뮬레이션 할 때 데스크탑 메뉴가 열리 며 (바탕 화면 옵션이있는 폴더, 새 폴더 작성, 바탕 화면 배경 변경 등), 내 양식에서도 아무 것도 클릭하지 않으면 아무 일도 일어나지 않습니다. 버튼 위에 마우스를 올려 놓더라도 강조 표시되지 않습니다). 마우스 오른쪽 버튼을 시뮬레이션하려고해도 아무 일도 일어나지 않습니다.
다시 원래 상태로 되돌릴 수있는 유일한 방법은 물리적으로 마우스 오른쪽 버튼을 누른 다음 마우스 왼쪽 버튼을 클릭하는 것입니다. 하지만 내 개입 없이는 이런 일이 필요해. 이 문제를 해결할 방법이 있습니까?
(데스크톱에서 임의의 대체 좌우 클릭을 시뮬레이트하더라도 가끔씩 발생하는 것처럼 보입니다.)
이 내 코드입니다 :

Private Declare Sub mouse_event Lib "user32" (ByVal dwflags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cbuttons As Integer, ByVal dwextrainfo As Integer) 
Private Const mouseclickdown = 2 
Private Const mouseclickup = 4 
Private Const rightclickdown = 8 
Private Const rightclickup = 10 


Cursor.Position = New Point(x,y) 
System.Threading.Thread.Sleep(100) 
mouse_event(mouseclickdown, 0, 0, 0, 0) 
System.Threading.Thread.Sleep(100) 
mouse_event(mouseclickup, 0, 0, 0, 0) 


Cursor.Position = New Point(x,y) 
System.Threading.Thread.Sleep(100) 
mouse_event(rightclickdown, 0, 0, 0, 0) 
System.Threading.Thread.Sleep(100) 
mouse_event(rightclickup, 0, 0, 0, 0) 

답변

0

귀하의 코드가 가깝습니다,하지만 난 몇 가지 잠재적 인 문제를 참조하십시오.

먼저 rightclickup은 10이 아니라 16이어야합니다. 온라인에서 찾은 코드 조각은 일반적으로 이러한 상수에 대해 16 진수를 사용합니다. 16은 16 진수로 표시됩니다.

둘째, C#의 mouse_event() 선언은 실제로 마지막 인수에 대한 포인터를 사용합니다. 0을 전달하는 대신 IntPtr의 새 인스턴스를 전달합니다. 나는이 시점에서 VB와 동등한 것이 확실하지 않다. 그것은 진짜 문제가 아닐 수도 있습니다.

그 상수를 변경해보고 나중에 작동하는지 알려주세요.

관련 문제