2016-11-24 2 views
1

Я пытаюсь разработать программу, которая откроет 2 файла Guitar Pro и отобразит их на разных экранах моей многоэкранной настройки.Программно программно мышь для мыши

у меня все работает, кроме перемещения 1 окна с экрана 1 на экран 2.

Guitar Pro является немного хитроумный и по какой-то причине будет открывать только файлы в окне 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(); 
Смежные вопросы