2016-11-24 5 views
1

2 개의 Guitar Pro 파일을 열고 여러 화면 설정에서 다른 화면에 표시 할 프로그램을 개발하려고합니다.프로그래밍 방식으로 마우스 끌기 창

나는 모든 화면에 화면 1에서 1 윈도우의 이동을 제외하고 작업이 2

기타 프로는 약간 사기이고 어떤 이유로 화면 1 만 열려있는 파일은 ... 나는 이동하려고 할 것이다 창 핸들을 잡아 창을 열지 만 주 컨테이너 만 이동하고 모든 하위 창을 제자리에 둡니다. 나는 조금을 속이고 프로그램을 클릭 마우스 커서를 이동하고 화면 화면에서 창을 드래그하기로 결정했습니다,하지만 여전히 위의 코드를 사용하여

[System.Runtime.InteropServices.DllImport("user32.dll")] 
static extern bool SetCursorPos(int x, int y); 

[System.Runtime.InteropServices.DllImport("user32.dll")] 
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

public void OpenFileFn() 
    { 
    Process file1 = new Process(); 
    file1.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
    file1.StartInfo.FileName = file; 
    file1.Start(); 
    Thread.Sleep(500); 
    Process file2 = new Process(); 
    file2.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
    file2.StartInfo.FileName = file; 
    file2.Start(); 
    file2.WaitForInputIdle(); 
    Thread.Sleep(3000); 
    int posX = Cursor.Position.X; 
    int posY = Cursor.Position.Y; 
    SetCursorPos(-960, 15); 
    mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
    SetCursorPos(960, 15); 
    mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 
    SetCursorPos(posX, posY); 
    } 

... 문제로 실행하고 커서를 수평으로 이동 하지만 창문이 ... 커서 Y 축을 변경하면 창이 수직으로 이동합니다 ...

어떻게 해결할 수있는 아이디어? 사전에 감사합니다 ...

+2

당신은 [SetWindowPosition] 더 많은 행운을해야 할 수도 있습니다 (http://www.pinvoke.net/default.aspx/user32.setwindowpos) 프로그래밍 방식으로 마우스 끌기를 다시 작성하는 대신 –

+0

이것은 C#이 아닌 것 같습니다. 꼬리표가 그리웠 니? 또는 코드의 대부분을 놓치셨습니까? – nvoigt

+0

@nvoigt는 WPF와 비슷하지만 코드는 C#을 정확히 대표하지 않습니다. –

답변

1

이 시도 :

public class MouseManager 
{ 
    public void MoveCursor(int x, int y) 
    { 
     Win32.POINT p = new Win32.POINT 
     { 
      x = x, 
      y = y 
     }; 

     Win32.SetCursorPos(p.x, p.y); 
    } 

    public int GetX() 
    { 
     var p = Win32.GetCursorPosition(); 
     return p.x; 
    } 

    public int GetY() 
    { 
     var p = Win32.GetCursorPosition(); 
     return p.y; 
    } 

    public void Click() 
    { 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftDown); 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftUp); 
    } 

    public void RightClick() 
    { 
     Win32.MouseEvent(Win32.MouseEventFlags.RightDown); 
     Win32.MouseEvent(Win32.MouseEventFlags.RightUp); 
    } 

    public void DoubleClick() 
    { 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftDown); 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftUp); 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftDown); 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftUp); 
    } 

    public void Scroll(int y) 
    { 
     Win32.Scroll(y); 
    } 

    public void ClickDown() 
    { 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftDown); 
    } 

    public void ClickUp() 
    { 
     Win32.MouseEvent(Win32.MouseEventFlags.LeftUp); 
    } 
} 

단계 :

  1. 이동 커서 창 위치

  2. 아래로 클릭

  3. 이동 커서로 다시 창을 옮기기 위해서

  4. 최대 클릭

단계 :

var manager= new MouseManager(); 
manager.MoveCursor(-960,15); 
manager.ClickDown(); 
manager.MoveCursor(960,15); 
manager.ClickUp();