Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Indigo Rose AutoPlay Media Studio (часть 5)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

KerberX



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
User32 = Library.Load("User32.dll");
POINTER = UINT; -- Change to QWORD if AMS will ever become 64-bit program.
 
MOUSEINPUT = MemoryEx.DefineStruct(
{
    DWORD("dx");
    DWORD("dy");
    DWORD("mouseData");
    DWORD("dwFlags");
    DWORD("time");
    POINTER("dwExtraInfo");
});
KEYBDINPUT = MemoryEx.DefineStruct(
{
    WORD("wVk");
    WORD("wScan");
    DWORD("dwFlags");
    DWORD("time");
    POINTER("dwExtraInfo");
});
HARDWAREINPUT = MemoryEx.DefineStruct(
{
    DWORD("uMsg");
    WORD("wParamL");
    WORD("wParamH");
});
 
SENDINPUT = MemoryEx.DefineStruct(
{
    DWORD("type");
    BYTE("Union", MemoryEx.StructSize(MOUSEINPUT));
});
 
INPUT_MOUSE = 0;
INPUT_KEYBOARD = 1;
INPUT_HARDWARE = 2;
 
-- Mouse
MOUSEEVENTF_ABSOLUTE = 0x8000;
MOUSEEVENTF_HWHEEL = 0x01000;
MOUSEEVENTF_MOVE = 0x0001;
MOUSEEVENTF_MOVE_NOCOALESCE = 0x2000;
MOUSEEVENTF_LEFTDOWN = 0x0002;
MOUSEEVENTF_LEFTUP = 0x0004;
MOUSEEVENTF_RIGHTDOWN = 0x0008;
MOUSEEVENTF_RIGHTUP = 0x0010;
MOUSEEVENTF_MIDDLEDOWN = 0x0020;
MOUSEEVENTF_MIDDLEUP = 0x0040;
MOUSEEVENTF_VIRTUALDESK = 0x4000;
MOUSEEVENTF_WHEEL = 0x0800;
MOUSEEVENTF_XDOWN = 0x0080;
MOUSEEVENTF_XUP = 0x0100;
WHEEL_DELTA = 120;
XBUTTON1 = 0x0001;
XBUTTON2 = 0x0002;
 
-- Keyboard
KEYEVENTF_EXTENDEDKEY = 0x0001;
KEYEVENTF_KEYUP = 0x0002;
KEYEVENTF_SCANCODE = 0x0008;
KEYEVENTF_UNICODE = 0x0004;
 
-- SendInput: https://msdn.microsoft.com/en-us/library/ms646310(v=vs.85).aspx
function System.SendInput(nType, ...)
    -- arg = {...}; -- For Lua 5.2+
    local tStruct;
    if (nType == INPUT_MOUSE) then
        local tCoords = arg[1];
        local nFlags = arg[2];
        local nData = arg[3] or 0;
 
        tStruct = MOUSEINPUT:New();
        tStruct.dx = tCoords.X;
        tStruct.dy = tCoords.Y;
        tStruct.dwFlags = nFlags;
        tStruct.mouseData = nData;
        tStruct.time = 0;
        tStruct.dwExtraInfo = User32.GetMessageExtraInfo();
    elseif (nType == INPUT_KEYBOARD) then
        local nKeyCode = arg[1]; -- https://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx
        local nFlags = arg[2];
 
        tStruct = KEYBDINPUT:New();
        tStruct.wVk = nKeyCode;
        tStruct.wVk = 0;
        if (Bitwise.And(nFlags, KEYEVENTF_SCANCODE)) then
            tStruct.wScan = nKeyCode;
        elseif (Bitwise.And(nFlags, KEYEVENTF_UNICODE)) then
            tStruct.wVk = 0;
            tStruct.wScan = nKeyCode;
        end
 
        tStruct.dwFlags = nFlags;
        tStruct.time = 0;
        tStruct.dwExtraInfo = User32.GetMessageExtraInfo();
    elseif (nType == INPUT_KEYBOARD) then
        local nMsg = arg[1];
 
        tStruct = HARDWAREINPUT:New();
        tStruct.uMsg = nMsg;
        tStruct.wParamL = Bitwise.And(nMsg, 0xffff);
        tStruct.wParamH = Bitwise.And(Bitwise.ASR(nMsg, 16), 0xffff);
    else
        error("unknown input type: "..tostring(nType));
    end
 
    local tInput = SENDINPUT:New();
    tInput.type = nType;
    MemoryEx.Copy(tStruct:GetPointer(), tInput:GetPointer()+tInput:Offset("Union"), tStruct:Size());
    tStruct:Free();
 
    local nRet = User32.SendInput(1, tInput:GetPointer(), tInput:Size());
    tInput:Free();
    return nRet;
end

 
Вызывается она так:

Код:
System.SendInput(INPUT_KEYBOARD, 38, 0);


Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 18:30 23-06-2017 | Исправлено: KerberX, 18:35 23-06-2017
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Indigo Rose AutoPlay Media Studio (часть 5)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru