きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

ドラッグ&ドロップ

にて謎が解決しました。ありがとうございます。〔私は質問者ではないのですが〕

以下のようにマウスの移動および移動中のフラグをMOUSEEVENTF_LEFTDOWNとすることでドラッグ&ドロップが再現できました。ただし、移動のdx, dyは絶対で移動したい場合、MOUSEEVENTF_ABSOLUTEフラグを立てて係数65535 / GetSystemMetrics(SM_CXSCREEN)を掛ける必要があります。最小の例なのでここでは省略してあります。

INPUT inputs[4];

inputs[0].type = INPUT_MOUSE;
inputs[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
inputs[0].mi.dx = (DWORD)53 * 65535 / GetSystemMetrics(SM_CXSCREEN);
inputs[0].mi.dy = (DWORD)57 * 65535 / GetSystemMetrics(SM_CXSCREEN);

inputs[1].type = INPUT_MOUSE;
inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;

inputs[2].type = INPUT_MOUSE;
inputs[2].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN;
inputs[2].mi.dx = 100;
inputs[2].mi.dy = 100;

inputs[3].type = INPUT_MOUSE;
inputs[3].mi.dwFlags = MOUSEEVENTF_LEFTUP;