Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Нужен совет по direct input


Автор: coop 10.7.2011, 20:14
Есть задача написать функцию принимающую хендл окна игры на directx и opengl , и относительные координаты в окне.Окно  не активно. Цель функции не затрагивая основной курсор(возможно создать для окна новое устройство мыши) симулировать нажатие кнопок мыши в окне по заданным координатам. 
На сколько я понял это можно сделать с помощью direct input, но нахожу только обрывки информации. Подскажите действительно ли это возможно и какую литературу стоит почитать(без разницы англ или русская). Понятно что пример будет просто бесценен. 
Да, конечная цель запуск нескольких окон которые будут работать одновременно, если можно каждое со своим устройством.
За ответы буду очень благодарен.

Автор: DCODE 11.8.2011, 23:40
используй функции win32:

bool GetCursorPos(LPPOINT point);//для асинхронного опредиления текущей позиции курсора на экране

SHORT GetAsyncKeyState(int vKey);//для асинхронного опредиления состояния ввода

например:

ТАК ЧИТАЕМ ПОЗИЦИЮ КУРСОРА НА ЭКРАНЕ, работает даже если форма не в фокусе...

Код

#include <iostream>

using namespace std;

#include <windows.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")

//работает даже если окно не в фокусе

int main()
{

    POINT p;//точка экрана

    while(1)
    {

    //так читаем асинхронно позицию курсора на экране
    //ВАЖНО в координатах экрана
    
    GetCursorPos(&p);//извлекаем позицию курсора

    cout<<"CursorPos=\t"<<p.x<<"\t"<<p.y<<endl;


    }

    return 0;
}






а так асинхронно читаем клавиши мыши
список кодов  клавиш сдесь: http://vsokovikov.narod.ru/New_MSDN_API/Other/virtual_key_code.htm 

Код



#include <iostream>

using namespace std;

#include <windows.h>

#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")

//работает даже если окно не в фокусе

int main()
{

    bool run=true;//флаг работы программы

    while(run)
    {

        system("cls");

        //так читаем асинхронно коды клавиш ввода

        //нажата левая клавиша мыши
        if(GetAsyncKeyState(VK_LBUTTON))
        { 
            cout<<"Left Button Down"<<endl;
        }

        //нажата правая клавиша мыши
        if(GetAsyncKeyState(VK_RBUTTON))
        {
            cout<<"Right Button Down"<<endl;
        }

        //нажата средняя клавиша мыши
        if(GetAsyncKeyState(VK_MBUTTON))
        {
            cout<<"Middle Button Down"<<endl;
        }

        

        //это просто проверка нажатия клавиши Esc для выхода
        if(GetAsyncKeyState(VK_ESCAPE))
        {
          run = false;
        }


    }

    return 0;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)