Конференция "WinAPI" » Перетащить чужое окно мышью
 
  • Артём (04.08.13 03:13) [0]
    Задача такая. Мы берём мышь, щёлкаем по заголовку окна и перетаскиваем окно в заданное место.
    Теперь надо это реализовать программно. Надо именно мышью, подобие SetWindowPos и через мув_виндоу не предлагать.
    Пытался так: устанавливаем курсор над заголовком, щёлкаем, затем устанавливаем новые координаты мыши, отпускаем. Но что то как то не получилось

    SetCursorPos(80,15);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    SetCursorPos(700,15);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

  • DVM © (04.08.13 10:13) [1]

    > Надо именно мышью, подобие SetWindowPos и через мув_виндоу
    > не предлагать.

    Мышь по-твоему с помощью волшебства окна перемещает? Без SetWindowPos или MoveWindow никак не обойтись в любом случае.
  • Артём (04.08.13 16:28) [2]

     SetCursorPos(0+33, 0+15);
     mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
     MoveWindow(GetForegroundWindow, 477, 0, 491, 365, true);
     SetCursorPos(477+33, 0+15);
     mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);


    так?
    вроде есть ещё такая штука я не знаю использовать её или нет MOUSEEVENTF_MOVE
  • brother © (04.08.13 18:26) [3]
    что за "ручные" оффсеты и позиции курсора?
  • Артём (04.08.13 19:30) [4]
    ?) не понял) не силён в программировании, для покера надо было помощника написать, вот пришлось кое что вспомнить.

    если вы про (0+33, 0+15) - то тут у меня изначально окно (которое нужно перетащить) располагается в верхнем углу экрана, чтобы взять его прям за заголовок я добавил отступ по вертикали 15 и горизонтали 33,
    после того как я установил курсор над заголовком я щёлкаю левой кнопкой мыши
    только тут сейчас у меня с координатами
    mouse_event(MOUSEEVENTF_LEFTDOWN,0+40,0+12,0,0);


    далее перемещаю само окно
    устанавливаю туда курсос
    и затем отпускаю левую клавишу мыши.

    Ну вроде бы это как то работает (вроде 1 раз из 5 или 6 окно встаёт не туда О_О как так хз), вот хочу понять может здесь надо как то использовать MOUSEEVENTF_MOVE (по логике его надо как то тут использовать)
    ещё есть
  • Артём (04.08.13 19:32) [5]
    ну и всё это выглядит у меня так


     SetCursorPos(0+40, 0+12);
                      mouse_event(MOUSEEVENTF_LEFTDOWN,0+40,0+12,0,0);
                      SetWindowPos(ActiveWindow, HWND_TOP, sX[1][1], sX[2][1], 491, 365, SWP_NOsize  );
                      SetCursorPos(sX[1][1]+40, sX[2][1]+12);
                      mouse_event(MOUSEEVENTF_LEFTUP,sX[1][1]+40+40,sX[2][1]+12,0,0);



    где sX массив с координатами
 
Конференция "WinAPI" » Перетащить чужое окно мышью
Есть новые Нет новых   [119107   +102][b:0][p:0.001]