Кто-нибудь знает, как имитировать перетаскивание мышью с помощью SendInput на С++? Я хочу программно переместить значок на рабочий стол. Я ожидал, что последовательность (Переместите мышь к A)->(Нажмите левую кнопку вниз)->(Переместите мышь к B)->(Отпустите левую кнопку) будет работать, но это не так. Мышь перемещается к A, а затем к B, но значок не перемещается. Я думаю, что Drag'n'Drop (SHDoDragDrop()) не подходит для этой задачи - для работы требуются IDataObject и IDropSource. Благодарен за любые подсказки или идеи.
Симуляция перетаскивания с помощью SendInput C++
Ответы (2)
Извините, это не ответ - просто фрагмент кода, который я пытался достичь своей цели. Цель может быть достигнута разными средствами, но меня интересует именно этот.
INPUT inputs[4] = { 0 };
inputs[0].type = INPUT_MOUSE;
inputs[0].mi.dx = (from.x * 65535) / screen_w; inputs[0].mi.dy = (from.y * 65535) / screen_h;
inputs[0].mi.mouseData = 0; inputs[0].mi.time = 0;
inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
inputs[1].type = INPUT_MOUSE;
inputs[1].mi.dx = (from.x * 65535) / screen_w; inputs[1].mi.dy = (from.y * 65535) / screen_h;
inputs[1].mi.mouseData = 0; inputs[1].mi.time = 0;
inputs[1].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN;
inputs[2].type = INPUT_MOUSE;
inputs[2].mi.dx = (to.x * 65535) / screen_w; inputs[2].mi.dy = (to.y * 65535) / screen_h;
inputs[2].mi.mouseData = 0; inputs[2].mi.time = 0;
inputs[2].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
inputs[3].type = INPUT_MOUSE;
inputs[3].mi.dx = (to.x * 65535) / screen_w; inputs[3].mi.dy = (to.y * 65535) / screen_h;
inputs[3].mi.mouseData = 0; inputs[3].mi.time = 0;
inputs[3].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP;
UINT uSent = SendInput(4, inputs, sizeof(INPUT));
person
YuriRzhanov
schedule
04.03.2021
Ответ прост - SendInput() должен вызываться один за другим для каждого действия. Также после каждого вызова может понадобиться ненадолго добавить Sleep(). Обычно работает аргумент 10, но иногда системе требуется более длительный сон.
person
YuriRzhanov
schedule
16.03.2021
ListView_HitTest()
иListView_SetItemPositiion/32()
вместо того, чтобы вообще манипулировать мышью. - person Remy Lebeau   schedule 02.03.2021