Como usar controles DirectInput em jogos XInput

Índice

  1. Introdução
  2. Antes de tudo
    1. Direcionais, Feedback, triggers LT/RT (Invert, Half, Dead Zone) e Exclusividade
    2. Instalação do driver de controle genérico
    3. Descobrindo se o jogo é 32 ou 64-bits
    4. Descobrindo o diretório de instalação do jogo
  3. x360ce
    1. Configurando o x360ce
  4. XOutput
    1. Instalando o XOutput
    2. Configurando o XOutput
  5. XInput Plus
    1. Instalando o XInput Plus
    2. Configurando o XInput Plus
  6. vJoy e UJR
    1. Instalação do vJoy
    2. Configuração do vJoy
    3. Instalação do UJR
    4. Configuração do UJR
  7. Antimicro
  8. Extras
    1. DirectInput Blocker/Spoffer
    2. Joy2Key
    3. xbox360cemu
    4. Pinnacle Game Profiler
    5. MediaProperties

Com exceção do vJoy e UJR e XOutput e XInput Plus, nenhum dos métodos abaixo devem ser utilizados em conjunto! O vJoy, por exemplo, causa interferência no XOutput, e o x360ce causa interferência no XInput Plus.

1. Introdução

Recentemente, adquiri o jogo “The Flame in the Flood” e a série de jogos Batman Arkham (Asylum, City e Origins) na Steam. Porém, eles não reconheciam meu controle genérico de Xbox 360 (Multilaser JS046), sendo compatíveis apenas com controles originais de Xbox 360.

Controle genérico de Xbox 360 modelo Multilaser JS046

Até meados de 2011, jogos Windows usavam a interface de programação (API) do DirectX (DInput) para receber chamadas de controles (joysticks). Com a integração Xbox-PC [XACT], jogos multiplataforma (lançados tanto para PC, quanto para Xbox 360), usam a API XInput para receber chamadas de controles. [11] Alguns controles, como o Logitech F710, oferecem uma chave de seleção para alternar o funcionamento entre DInput e XInput:

Chave de seleção XInput/DInput do Logitech F710

O controle original do Xbox 360 oferece suporte tanto a API DInput quanto XInput ao mesmo tempo (sem a necessidade de uma chave de seleção). Porém, a grande maioria dos controles genéricos oferecem suporte apenas a API DInput.

Para jogar jogos modernos, donos de controles genéricos recorrem a programas como o x360ce, que traduz chamadas XInput dos jogos para chamadas DInput, tornando controles genéricos compatíveis com a nova API.

Semana passada recebi um e-mail da Steam informando que o jogo “The Wolf Among Us” da Telltale (que estava na minha Lista de desejos) estava em promoção por R$ 12,90 por tempo limitado. Imediatamente, realizei a compra. Após baixar o jogo, ao iniciá-lo meu controle era reconhecido, mas os acionadores RT e LT estavam invertidos com os botões Start e Back, e o botão A e Y estavam invertidos, e o jogo não oferece opção para alterar os controles, assim como o Windows não oferece opção para remapear os botões do controle.

Em todos os fóruns da Internet que visitei (Steam e fóruns oficiais da Telltale), pude encontrar pessoas com a mesma dificuldade (botões invertidos em jogos da Telltale). Algumas pessoas desistiam e jogavam o jogo com os botões invertidos. Outras tiveram sucesso através do x360ce (como no jogo “Game of Thrones”, da Telltale).

Como todo bom brasileiro, não desisto nunca. Quando estava quase perdendo as esperanças consegui, através do XOutput e do XInput Plus, remapear os botões invertidos e configurar corretamente meu controle no jogo.

O objetivo deste post é justamente documentar esta busca incessante durante 2 dias para configurar meu controle genérico no jogo “The Wolf Among Us”, entre outros jogos,  na esperança de ajudar outras pessoas que estejam passando por problemas parecidos.

2. Antes de tudo

2.1 Direcionais, Feedback, Analógicos e triggers LT/RT (Invert, Half, Dead Zone) e Exclusividade


Direcionais

Direcionais (D-Pad/POV/Hats) podem atuar de dois modos: Discreto (Discrete) ou Contínuo (Continuous) [7].

  • No modo discreto, apenas 4 posições (Norte, Sul, Leste e Oeste) estarão disponíveis.
  • No modo contínuo, todas as posições estão disponíveis.

Por padrão, o Xbox usa o modo contínuo. Tanto o vJoy (Configure vJoy) quanto o XInput Plus (aba Key Assign > opção DPAD: Only 4 directions) permitem alterar a configuração para o modo discreto. Porém, alguns jogos, como a série de jogos Batman Arkham, utilizam direcionais no modo contínuo para selecionar objetos do inventário.

Vibração e Analógicos e triggers LT/RT (Invert, Half, Dead Zone)

O controle de Xbox 360 é enumerado corretamente no DirectInput, e pode ser utilizado com a API DirectInput. Porém, algumas funcionalidades providas pelo XInput não estão implementadas na implementação DirectInput [3]:

  • Os triggers LT RT irão agir como um botão único, não como botões independentes;
  • Os efeitos de vibração não estarão disponíveis;
  • A consulta por dispositivos headset não estará disponível.

Tanto o x360ce (aba Force Feeback > opção Enable Force Feedback) quanto o XInput Plus (aba DirectInput > opção Enable ForceFeedback Emulation) possuem a opção Force Feedback (Vibração, entre outros efeitos). Porém, poucos controles genéricos possuem vibração e, os poucos que suportam, geralmente acompanham um CD de instalação do driver específico do controle com suporte a vibração.

No Xbox, triggers não são considerados botões, mas sim eixos adicionais de analógicos. [5] Alguns jogos para Xbox, como o Assassin’s Creed 4, além dos eixos X e Y convencionais (2D), usam os triggers LT/RT (equivalentes ao L2 e R2 do PlayStation) como eixo Z (3D) para mover a câmera para cima e para baixo, por exemplo.

Ao configurar o analógico e triggers, você verá as opções a seguir. [2]

Invert – Inverte o eixo. Se, por exemplo, você estiver jogando seu jogo e o seu carro estiver acelerando quando deveria estar parando, você precisa inverter o eixo.

Half (+) – Veja abaixo.

Half (-) – Esta opção precisa de uma pequena explicação. No DirectInput, um eixo analógico possuí uma faixa de valores digitais de -10000 a +10000. O problema é que alguns jogos esperam que a posição de descanso seja -10000 enquanto outros esperam que seja 0. Se você estiver usando um joystick (há diferenças entre joystick joypad), por exemplo, a posição de descanso será 0, enquanto levar o analógico para trás será -10000 e puxá-lo para frente seria +10000.

No Xinput Plus, se você não possuí Half (+) nem Half (-) selecionado, os triggers LT/RT terão posição -10000 em descanso, indo para +10000 quando totalmente pressionados. Se você selecionar Half (+), os triggers terão valor de 0 em descanso, indo para +10000 quando totalmente pressionados. Selecionando Half (-) significa que os triggers terão valor 0 em descanso, indo para -10000 quando totalmente pressionados. [2]

Quando você deveria usar estas configurações? Se o seu carro acelera antes de você tocar no controle, mas não alcança velocidade máxima quando você pressiona fundo o trigger, você precisará das opções Half (+) ou Half (-). Caso contrário, se a deadzone do trigger (ou seja, o quanto você precisa pressioná-lo para registrar qualquer movimento) parece alto, você precisará configurar estas opções também. [2]

Exclusividade

XOutput (opção Exclusivity) permite disponibilizar o controle apenas para um processo, e o vJoy Device List permite visualizar o ID do processo que está usando o controle virtual (apenas para controles virtuais do vJoy).

Ao executarmos o UJR, notamos que o ID do processo do UJR é exibido no vJoy Device List. Como alguns jogos requerem uso exclusivo do controle, uma dica (caso o controle virtual vJoy) não esteja sendo identificado pelo jogo, seria executar o UJR apenas após a iniciação do jogo (assim, o controle virtual estaria livre antes da execução do jogo).

2.2 Instalação do driver do controle genérico


Um controle genérico é todo aquele que usa os drivers padrões do Windows. O driver padrão do Windows possuí funcionalidade limitada (efeitos, como vibração, são ausentes ou limitados).

Alguns controles acompanham CDs de instalação de controladores (drivers) que adicionam suporte a todas as funcionalidades do controle (ao instalar o driver do controle Multilaser JS046, por exemplo, é adicionado suporte a vibração). Alguns controles possuem, inclusive, programas próprios que permitem realizar o remapeamento de botões (controles da marca Logitech possuem o Logitech Profiler).

Após a instalação do software de dispositivo do Multilaser JS046, apesar do Gerenciador de Dispositivos (Abra o Menu iniciar e digite devmgmt.msc) continuar a exibir o controle como genérico (devido ao uso do driver genérico da Microsoft), a tela de configuração de controladores de jogos USB (Painel de controle > Dispositivos e impressoras > Configurar controladores de jogos USB) mudou da tela abaixo:

Controle genérico

Para:

Note que o nome do controle mudou de Generic USB Joystick para USB Vibration Joystick (JS). Além disso, após a instalação do software de dispositivo, a aba Vibration Test foi adicionada e o jogo “The Wolf Among Us” passou a reconhecer o controle (não reconhecia anteriormente, sem a instalação do software), ainda que com o mapeamento de botões incorreto.

É importante notar que, ao adicionar o controle, o Gerenciador de Dispositivos (Abra o Menu iniciar e digite devmgmt.msc) deve atualizar a lista de dispositivos.

Ao adicionar um controle, a lista no Gerenciador de Dispositivos é atualizada.Se ao adicionar o dispositivo a lista atualize mas mostre um ponto de interrogação amarelo Ponto de Exclamação Gerenciador de Dispositivos do Windows XP, isso significa que o controle pode estar com mau-contato no cabo ou a porta USB na qual o controle está conectado não forneça energia suficiente a ele (recomendo usar o controle na porta de trás do computador, localizadas na placa-mãe, ao invés das portas USB localizadas na frente do gabinete).

2.3 Descobrindo se o jogo é 32 ou 64-bits

O x360ce possuí duas versões: 32 e 64-bits. A versão que você vai baixar depende da arquitetura do jogo (32 ou 64-bits) e do Windows. Para verificar a arquitetura do Windows, pressione a combinação de teclas <Win>+<Pause Break> ou dê botão direito em Computador > Propriedades (se sua versão do Windows é 32-bits, pode pular esta etapa e baixar somente a versão 32-bits do x360ce).

Se você baixar a versão 32-bits mas o jogo for 64-bits, por exemplo, o x360ce não funcionará com este jogo específico. A grande maioria dos jogos são 32-bits (para ser compatível tanto com arquiteturas 32-bits, quanto 64-bits), porém, alguns jogos podem ter versões específicas para cada plataforma, como o jogo “The Flame in the Wood”. [1]

A melhor forma de descobrir se o jogo é 32 ou 64-bits é através do Gerenciador de tarefas.

  1. Inicie o jogo.
  2. Pressione a combinação de teclas <CTRL>+<ALT>+<DEL> e selecione Iniciar Gerenciador de tarefas.
  3. Na aba Aplicativos, dê botão direito no jogo e selecione Ir para processo.

    1. No Windows 8 e superiores, caso esta opção esteja indisponível, clique em Mais detalhes e procure pelo jogo na aba Detalhes.
  4. Caso o jogo possua *32 após o nome do executável, o jogo é 32-bits. Caso o jogo não possua *32 e o sistema for 64-bits, o jogo é 64-bits. A imagem abaixo confirma que o jogo “The Flame in the Wood” (RiverGame-Win64-Shipping.exe) é um jogo 64-bits. Note que processos 32-bit possuem a marcação *32 (como o Steam e Lightshot).

2.4 Descobrindo o diretório de instalação do jogo

O “x360ce” e o “XInput Plus”, para traduzirem chamadas XInput para DInput, precisam interceptar chamadas da biblioteca xinput1_3.dll dos jogos, e a única forma de realizar esta interceptação é implementando uma versão modificada desta DLL no diretório do executável do jogo.

Para descobrir o diretório do executável de um jogo, realize o mesmo processo utilizado para identificar se um jogo é 32 ou 64-bits mas, na aba detalhes, dê botão direito no processo relacionado ao jogo e clique em Abrir local do arquivo.

3. x360ce


Vou iniciar nossa lista com o queridinho de todo dono de controles genéricos: o x360ce. Como comentado anteriormente, o x360ce traduz chamadas XInput dos jogos para chamadas DInput, tornando nosso controle genérico compatível com jogos que usam a nova API.

O x360ce é gratuito e possuí código aberto. Ele pode ser baixado no site oficial do projeto (link no topo da página). Baixe a versão de acordo com a arquitetura do jogo (32 ou 64-bits) e extraia o arquivo baixado no diretório do executável do jogo.

3.1 Configurando o x360ce

Para traduzir chamadas XInput dos jogos, o x360ce intercepta as chamadas de função da biblioteca xinput1_3.dll do sistema operacional. Para isso, ele instala sua própria versão da biblioteca no diretório do executável do jogo. Com isso, ao invés do jogo utilizar a biblioteca XInput do sistema, ele utiliza a biblioteca XInput do x360ce, permitindo que suas mudanças tenham efeito sem alterar o jogo em si.

O x360ce possuí, basicamente, três arquivos:

  1. xinput1_3.dll: biblioteca que realiza a interceptação de chamadas XInput.
  2. x360ce.ini: arquivo de configuração do x360ce, utilizados pela biblioteca xinput1_3.dll para mapear os botões XInput para os botões DInput correspondentes, entre outras configurações.
  3. x360ce.exe: interface gráfica para configuração do arquivo x360ce.ini.

A interface gráfica do x360ce possibilita a configuração rápida e simplificada do arquivo de configuração do x360ce.

Os dois principais recursos do x360ce são:

  1. Ao conectar um dispositivo, ele procura na Internet alguém que tenha configurado o mesmo modelo de controle que o seu para realizar a configuração/mapeamento dos botões automaticamente.
  2. Ele possuí uma função chamada Record que, durante o mapeamento dos botões, identifica o botão pressionado e realiza o mapeamento do botão automaticamente. Tanto o XOutput quanto o XInput Plus requer conhecimento prévio dos botões para configuração (não possuem função Record), por isso, ao configurar ambos, indiquei que usa-se a configuração do x360 como referência para poupar tempo nos testes de tentativa e erro na configuração dos mapeamentos.

4. XOutput


O XOutput permite o mapeamento de botões do controle genérico (físico) para um controle virtual do Xbox 360. Com isso, jogos que funcionam apenas através da API XInput ou apenas com o controle original do Xbox 360 reconhecerão nosso controle genérico automaticamente.

Em todos os jogos que pude testar e que suportam o controle original do Xbox 360 nativamente (“The Flame in the Wood” e a série de jogos Batman Arkham), ele funcionou normalmente, como o controle original do Xbox 360 funcionaria, sem a necessidade do XInput Plus ou x360ce.

4.1 Instalação do XOutput

O XOutput é gratuito e de código aberto. Ele pode ser encontrado no repositório oficial do projeto (baixe o arquivo ZIP).

  1. O XOutput não requer instalação. Após o download do XOutput, extraia o arquivo baixado em qualquer diretório do sistema. Eu recomendo extraí-lo em C:\Arquivos de programas (x86)\XOutput e criar um atalho na área de trabalho para o executável, porém, você pode extraí-lo em qualquer diretório que desejar;
  2. Acesse a página de download de dispositivos da Microsoft e baixe o driver do controle do Xbox 360 para Windows (Xbox 360 Controller for Windows):
    1. Selecione a opção conforme a arquitetura do seu Windows, 32 bits ou 64 bits;
    2. Execute o instalador e siga as instruções para concluir a instalação.
  3. Após a instalação do driver oficial, precisamos instalar o driver do barramento virtual (local onde nosso controle virtual será instalado no sistema). Ele está disponível no diretório ScpDriver do XOutput. Execute o arquivo ScpDriver.exe e clique em Install.

4.2 Configuração do XOutput


Com o XOutput instalado, podemos iniciar a configuração do mesmo (mapeamento dos botões do controle genérico [físico] para o virtual) executando o arquivo XOutput.exe.

A interface do XOutput é simples e vai direto ao ponto:

  • Ela exibe uma lista de controles detectados (no meu caso, USB Vibration Joystick (VS));
  • Possuí um botão de engrenagem () para o mapeamento dos botões do controle físico para o virtual;
  • Possuí uma seta para cima e para baixo para alterar a ordem dos controles físicos (caso você possua mais de um controle, é possível criar múltiplos controles de Xbox 360 virtuais), e;
  • Uma caixa de seleção Enabled. Caso você possua mais de um controle, é possível criar um controle virtual apenas para um controle específico.
  • A opção Exclusivity permite configurar a exclusividade do controle virtual.

Para configurar o mapeamento dos botões do controle físico para virtual no XOutput:

  1. Clique na caixa Enabled no controle físico que você deseja criar o mapeamento.
  2. Clique no ícone da engrenagem () para abrir a janela de configuração.

Print da configuração do controle Multilaser JS046

Você pode usar como base sua configuração do x360ce (que oferece interface gráfica) para o mapeamento dos botões.

Comparação da configuração do x360ce com XOutput

NOTA: Você não precisa do x360ce para o XOutput funcionar. Eu apenas recomendo configurar o XOutput tendo como base a configuração do x360ce, que possuí uma interface gráfica mais amigável para configuração dos botões. NÃO EXTRAIA O x360ce NO DIRETÓRIO DO JOGO OU DO XOUTPUT: O x360ce IRÁ INTERCEPTAR CHAMADAS XINPUT DO XOUTPUT E DO JOGO, CONFIGURANDO OS BOTÕES DE ACORDO COM O x360ce AO INVÉS DE USAR A CONFIGURAÇÃO DO XOUTPUT.

Note que a configuração do XOutput é idêntica ao x360ce (no meu controle), com duas exceções (com destaque em vermelho no print acima): os analógicos esquerdo e direito. Por algum motivo, o analógico esquerdo (Left Analog) estava com o sentido de rotação invertido (ao pressionar o eixo para cima, ele ia para baixo e vice-versa), e o analógico direito mostrava como em direção ao canto superior esquerdo o tempo todo, como se eu estivesse pressionando-o para aquela direção constantemente. Tive que, através de tentativa e erro, configurar o XOutput para mapear o analógico corretamente de acordo com meu controle.

Left Trigger: LT (Xbox 360) ou L2 (PlayStation). Right Trigger: RT (Xbox 360) ou R2 (PlayStation).
Left Lumper: LB (Xbox 360) ou L1 (PlayStation). Right Lumper: RB (Xbox 360) ou R1 (PlayStation).
Left Analog Button: Pressionamento do analógico esquerdo (sim, o analógico, ao ser pressionado, atua como um botão. Nem todos os controles genéricos possuem este botão.) Right Analog Button: Pressionamento do analógico direito (sim, o analógico, ao ser pressionado, atua como um botão. Nem todos os controles genéricos possuem este botão.)
Left Analog X: Eixo horizontal (X) do analógico esquerdo. Right Analog X: Eixo horizontal (X) do analógico direito.
Left Analog Y: Eixo vertical (Y) do analógico esquerdo. Right Analog Y: Eixo vertical (Y) do analógico direito.
Up: Direcional para cima (direcional, não analógico!). A: A (Xbox 360) ou X (PlayStation).
Down: Direcional para baixo. B: B (Xbox 360) ou Bolinha (PlayStation).
Left: Direcional para esquerda. X: X (Xbox 360) ou Quadrado (PlayStation).
Right: Direcional para direita. Y: Y (Xbox 360) ou Triângulo (PlayStation).
Back: Back < (Xbox 360) ou Select (PlayStation). Home: Botão inexistente no controle de PlayStation 1 e 2.

No controle do PlayStation 3 e 4, refere-se ao botão PS (PlayStation).

No Xbox 360, o botão Home é o botão Guide [Guia] (botão no centro do controle, com o logo do Xbox 360).

No controle genérico de Xbox 360 da Multilaser (JS046), este botão não possuí correspondência física: ao pressioná-lo, ele muda de cor (para vermelho) e o analógico direito passa a corresponder aos botões A, B, X e Y (por isso, ele não possui nenhum mapeamento na minha configuração).

Start: Start (Xbox 360 e PlayStation)

Para iniciarmos nosso controle virtual, feche a janela Controller Options do XOutput e clique em Start. Ao clicar em Start pela primeira vez, o Windows exibirá a tela de instalação de novo dispositivo de hardware. O Windows usará o driver oficial do Xbox 360 instalado anteriormente ou irá baixar o driver automaticamente do Windows Update.

Esta tela aparecerá apenas na primeira vez que você iniciar o XOutput, da mesma forma como ocorre quando plugamos nosso controle ou outro dispositivo USB no computador pela primeira vez: nas próximas vezes, ele será reconhecido instantaneamente e esta tela não deverá aparecer.

Caso o controle virtual tenha sido reconhecido normalmente, ele deverá aparecer em Dispositivos e Impressoras (no Menu iniciar) como Xbox 360 Controller for Windows, como um controle real de Xbox 360 apareceria.

Infelizmente, o XOutput não acompanha nenhuma ferramenta para testarmos o mapeamento do nosso controle virtual. Pude encontrar um utilitário de testes XInput com o x360cemu, e decidi disponibilizá-lo separadamente através da minha conta no MediaFire:

XInput Test (XInputTest.exe)

Após o download, recomendo salvá-lo no mesmo diretório do XOutput para fácil localização. NÃO SALVE O XInputTest.exe NO MESMO DIRETÓRIO x360ce OU XInput Plus POR QUE DEVIDO A ELES INTERCEPTAREM CHAMADAS XINPUT, O XInput Test EXIBIRÁ A CONFIGURAÇÃO DO x360ce OU XInput Plus AO INVÉS DA CONFIGURAÇÃO DO XOuput.

Execute o XInput Test para testar a configuração do controle. É importante que o mapeamento esteja configurado corretamente.

Note que o controle virtual foi reconhecido corretamente. Caso o XInput Test não tenha exibido Connected em verde no topo da janela, tente alterar o controle em Select a controller to control e, se ainda assim exibir Not connected em vermelho, verifique se você clicou no botão Start no XOutput (que deverá continuar executando minimizado) e que o controle virtual foi reconhecido em Dispositivos e Impressoras.

APARENTEMENTE, O VJOY CAUSA INTERFERÊNCIA NO XINPUT TEST E O CONTROLE VIRTUAL DE XBOX 360, APESAR DE SER RECONHECIDO (CONNECTED), NENHUM BOTÃO, ANALÓGICO OU TRIGGER FUNCIONAVA. APÓS DESINSTALAR O VJOY, ELE IDENTIFICOU O CONTROLE NORMALMENTE.

Ao pressionar os botões do controle genérico (físico), o XInput Test mostrará o mapeamento dos botões correspondentes no XOutput. Cada botão pressionado no controle aparecerá destacado com um círculo verde ao redor (similar aos analógicos no print acima).

Caso você pressione um botão e ele não corresponda ao mapeamento do Xbox 360, você precisará parar o XOutput (clique no botão Stop) e abrir a configuração de mapeamento () novamente para corrigir o mesmo.

SE VOCÊ ESTIVER TENDO PROBLEMAS DE MAPEAMENTO (NO MEU CASO, TIVE PROBLEMAS DO ANALÓGICO ESQUERDO INVERTIDO E BOTÕES A E Y TROCADOS) NO JOGO, MAS NO XInput Test O MAPEAMENTO É EXIBIDO CORRETAMENTE, DEVEMOS ALTERAR A CONFIGURAÇÃO DO XInput Plus (JOGO) E NÃO DO XOuput (CONTROLE)!

4.3 Definindo o controle virtual como padrão

Após a instalação do software de driver do XOutput, ele é definido automaticamente como controle padrão do sistema. Porém, após a instalação/desinstalação do vJoy (por exemplo), o controle preferencial é alterado para (nenhum). Para nos certificarmos que o Xbox 360 Controller for WIndows é, de fato, o controle preferencial, abra o Painel de controle > Dispositivos e impressoras > Configurar controladores de jogos USB. Agora, clique no botão Avançado… e certifique-se que o controle virtual está definido como Dispositivo preferencial:

5. XInput Plus

O XInput Plus realiza uma função parecida (porém, não idêntica) ao x360ce: Ele intercepta chamadas XInput através da biblioteca xinput1_3.dll (assim como o x360ce), porém, sua missão principal é realizar o remapeamento de botões e analógicos de controles XInput (já que o Windows não oferece suporte nativo para remapeamento de botões e para que o remapeamento seja possível, esta função deve ser desenvolvida pelos desenvolvedores nos jogos – infelizmente, a maioria dos jogos não possuem interface para remapeamento de botões).

Assim como o x360ce, o XInput Plus também permite a tradução de chamadas XInput para DInput, e possuí um “plus” a mais, no mínimo, interessante: permite, além do remapeamento de botões XInput, o remapeamento de botões DInput (interceptando a biblioteca dinput*.dll).

A grande maioria dos jogos atuais usam a API XInput, porém, jogos antigos (como Rollcage) e, contrariamente, alguns jogos “modernos” (como “The Wolf Among Us”), ainda usam a antiga API DInput.

Apesar de controles genéricos normalmente funcionarem normalmente através da API DInput, no “The Wolf Among Us”, apesar do meu controle genérico ser reconhecido sem a necessidade de hacks (como x360ce, XInput Plus ou XOutput), o botão Start estava trocado com o RT, e o botão Back estava trocado com o LT, assim como os botões Y e A estavam trocados. Apesar de ser possível jogar o jogo nestas condições (e, de fato, muitas pessoas relataram no fórum oficial da Telltale terem jogado o jogo desta forma), decidi encontrar uma forma de corrigir o mapeamento dos botões no jogo.

Porém, como comentado anteriormente, o Windows não oferece o suporte nativo ao redirecionamento de botões de controles (joysticks). Por isso, em jogos DInput, o XInput Plus é bem-vindo, justamente por permitir o remapeamento dos botões dos mesmos.

5.1 Configuração do XInput Plus

O XInput Plus pode ser baixado da sua página inicial aqui. Você notará que a página está em Japonês, mas o link para a última versão pode ser facilmente encontrado no topo da página (atualmente, ele encontra-se na versão 4.14.3. As versões anteriores do XInput Plus não suportam a customização de botões DInput). O programa é baixado como um arquivo ZIP, então simplesmente extraia-o para um diretório conveniente e execute-o.

Caso o programa esteja em Japonês, mas você não é Otaku o suficiente para entender Japonês, não entre em pânico! Clique nos menus destacados na imagem abaixo e, em Language, altere para English e aplique as alterações. Agora, feche o programa no “X” do topo da janela e inicie o programa novamente.

Ao reabrir o programa, ele deverá estar totalmente em inglês e a janela abaixo deverá aparecer:

Como você pode ver, existe uma série de recursos e funções para ajudá-lo a remapear os botões e analógicos do seu controle. Você pode ajustar a sensibilidade e inverter o eixo dos analógicos (Stick) e triggers (LT e RT [L1 e R2]) e adicionar funções de disparo rápido para botões na aba Buttons.

Assim como o x360ce, o XInput Plus precisa conhecer qual jogo você gostaria de configurar. Para configurarmos o XInput Plus para nosso jogo, clique no botão Select no topo da janela e selecione o executável do jogo. Após a seleção, a caixa Target Program deverá mudar para exibir o caminho do jogo selecionado. Se você configurou este jogo no passado, o Xinput Plus detectará e perguntará se você deseja carregar a configuração existente.

A maioria dos jogos antigos para Windows usam DirectInput (DInput), então se você deseja corrigir ou alterar controles para um jogo antigo, clique na aba DirectInput e certifique-se que a opção “Enable DirectInput Output” está marcada.

Ao marcar esta opção, será possível alterar o mapeamento de botões para jogos antigos (DInput).

Right Stick

Analógico direito.

Por padrão, ele é mapeado para os eixos X (horizontal) e Y (vertical), porém, o XInput Plus permite mapeá-los para os triggers LT/RT (Z Axis / Z Rot) do Xbox 360.

LT/RT

Por padrão, os triggers LT/RT (equivalentes ao L2 e R2 do PlayStation) são mapeados na coordenada Z.

Por questão de compatibilidade com jogos antigos (não desenvolvidos para Xbox), você pode alterar a configuração dos triggers LT/RT para funções idênticas ao L2 e R2 do PlayStation, definindo-os para os botões 11/12 (ou outros botões correspondentes ao L2 e R2 do seu controle através do botão Customize).

DPAD

Direcionais (direcionais, não analógicos!)

Por padrão, os direcionais são mapeados para POV. Alguns controles implementam os direcionais como botões independentes (13-16 ou 14-17) e não como POV.

Guide

Como citado anteriormente (na configuração do XOutput), meu controle genérico não possuí o botão Guide/Home funcional (botão com o logo do XBOX 360, no centro do controle). Por padrão, o XInput Plus mapeia o botão Guide no botão 11.

Caso você possua o botão PS (PlayStation 3 e 4) ou Guide/Home (Xbox 360) funcional, você pode mapeá-lo para o botão correspondente, ou definir um botão acima do número de botões disponíveis no seu controle para não mapeá-lo.

O XInput Plus exibe apenas as configurações mais comuns para os botões/eixos nos menus suspensos, mas é possível mapeá-los manualmente através do botão Customize. Ao clicá-lo, deverá aparecer a janela DirectInput Key Assign a seguir:

O padrão XInput possui mapeamentos diferentes do DInput. [4] Note que na figura acima (configuração do meu controle), os botões A, Y e X  e Back e Start (botões 9 e 10) estão trocados em relação ao x360ce.

Durante o jogo, notei que os botões LB RB (botões 5 e 6) estavam trocados em relação aos triggers LT e RT e realizei a inversão. Porém, não pude realizar o a inversão de botões aos triggers LT e RT através da interface gráfica (tive de editar manualmente o arquivo XInputPlus.ini no diretório do executável do jogo para realizar a mudança).

Ainda na aba DirectInput, clique na aba Advanced. Em Controller 1, clique em Detect. Exibirá uma pequena janela pedindo para que você pressione qualquer botão do controle para que ele detecte o ID (identificação) do nosso controle.

Note que, após detectar o controle, ele preencherá automaticamente o campo Controller 1 com a identificação do nosso controle.

Após configurar os mapeamentos (que podem ser diferentes dos meus, dependendo do seu controle – é um processo longo de tentativa e erro), clique no botão Total Test (localizado no canto inferior esquerdo do XInput Plus) para verificar os mapeamentos e se o seu controle foi reconhecido pelo XInput Plus. Ao clicar no botão Total Test, o XInput Plus tocará um sinal sonoro (o mesmo sinal deverá ser ouvido quando iniciar o jogo).

Infelizmente, o XInput Plus funciona apenas com controles XInput, e a grande maioria de controles genéricos são DInput. Caso você pressione os botões, triggers e analógicos, mas o XInput Plus não demonstra sinal de vida, você pode usar o XOutput para criar um controle virtual do Xbox 360 (XInput) através do mapeamento de botões do controle físico (DInput). Caso seu controle não seja reconhecido pelo XInput Plus, instale e configure o XOutput.

Note que, no vídeo acima, os mapeamentos XInput são demonstrados graficamente, através de um círculo vermelho quando pressionamos o botão correspondente. Caso você tenha habilitado o mapeamento DInput, o XInput Plus mostrará, ao pressionar um botão, além da demonstração gráfica XInput, o número do botão correspondente na seção DInput (correspondente aos mapeamentos realizados na aba DirectInput).

Ao clicar no botão Apply, no canto inferior da tela, o XInput Plus irá salvar os mapeamentos no diretório selecionado do jogo (arquivos xinput1_3.dll xinputplus.ini, assim como Dinput.dll Dinput8.dll caso você tenha habilitado o mapeamento de botões DInput). Assim como o x360ce, o XInput Plus não precisa estar executando em segundo plano para o mapeamento funcionar (com exceção do XOutput, que deve estar executando em segundo plano, caso seu controle genérico seja apenas DInput).

Caso você tenha iniciado o jogo e o XInput Plus não reproduziu o som característico indicando que foi carregado, porém o controle está sendo identificado normalmente no Total Test, verifique se realizou a detecção do controle na aba DirectInput > Advanced.

Outra dica seria marcar todas as caixas de seleção em Setting > DLL Files, na esperança que o jogo utilize uma DLL diferente para realizar chamadas XInput, então clique em Apply novamente. Este passo não deve ser necessário para a maioria dos jogos, mas como os arquivos dll não ocupam muito espaço, isso dificilmente importa.

6. vJoy e UJR


O vJoy, diferente do XInput Plus e do x360ce, instala um novo controle virtual DInput (similar ao XOutput, com a diferença que o XOutput instala um controle virtual XInput compatível com Xbox 360).

Minha esperança, ao usar o vJoy, seria remapear os botões do meu controle genérico físico (que, apesar de ser reconhecido pelo “The Wolf Among Us”, estava com os botões A e Y invertidos, assim como os botões Back e Start trocados com LT e RT [L2 e R2, no PlayStation]) no controle virtual do vJoy. Infelizmente, o jogo não reconheceu o controle virtual do vJoy, ou se reconheceu, acabou utilizando o controle físico no lugar do controle virtual.

O “The Wolf Among Us”, assim como outros jogos (como a série de jogos Batman Arkham e “The Flame in the Wood”), alternam os controles de acordo com o meio utilizado. Por exemplo: Posso estar jogando Batman Arkham Asylum no controle, e ao pressionar uma tecla do teclado, ele automaticamente irá mapear os controles novamente para o teclado, e ao pressionar um botão do controle, voltará a usar os botões do controle. Na prática, apesar da facilidade, nenhum dos jogos oferece a possibilidade de identificar qual controle você gostaria de usar no jogo, e isso afeta diretamente o vJoy: ao pressionar um botão do controle físico, o jogo identifica o pressionamento tanto no botão físico quanto no virtual, e não há como configurar que você gostaria de usar apenas o controle virtual. Como consequência, o jogo acaba escolhendo o controle real no lugar do virtual e não há como alterar essa configuração.

Ainda assim, decidi documentar minha experiência com o vJoy, que pode ser útil em outros cenários (por exemplo, você possuí um controle XInput, mas gostaria que ele fosse visto como um controle virtual DInput), ou com jogos que, de alguma forma, priorizem o controle virtual ao invés do controle físico.

6.1 Instalação do vJoy

O vJoy é open-source e pode ser obtido no site oficial do projeto.

Após a instalação (com suas configurações padrões), o vJoy criará automaticamente um controle virtual DInput e instalará dois utilitários:

  • Configure vJoy: permite configurar as funcionalidades do controle virtual, como o número de direcionais (D-Pad/POV/Hats) e de botões. Por padrão, o vJoy possuí 1 controle, 4 analógicos e 8 botões [6].
  • vJoy Feeder e Monitor vJoy: úteis para testar nosso controle virtual. O vJoy Feeder permite pressionarmos “virtualmente” um ou mais botões do nosso controle virtual para testar seu funcionamento, e o vJoy Monitor permite monitorar o pressionamento de botões de forma similar ao teste oferecido pelo Windows no Painel de controle > Dispositivos e Impressoras > Configurar controladores de jogos USB.
  • vJoy Device List: lista todos os controles virtuais do vJoy configurados no computador, assim como a identificação do processo (PID) que está utilizando o controle.

Por padrão, após a instalação do vJoy, ele é definido automaticamente como controle padrão do sistema. Para nos certificarmos que o vJoy é, de fato, o controle preferencial, abra o Painel de controle > Dispositivos e impressoras > Configurar controladores de jogos USB. Agora, clique no botão Avançado… e certifique-se que o controle virtual está definido como Dispositivo preferencial:

6.2 Configuração do vJoy

Após a instalação do vJoy, precisamos configurar o controle virtual de acordo com as funcionalidades do nosso controle real, como número de direcionais e botões.

Nossa intenção é configurar nosso controle virtual com as mesmas funcionalidades do nosso controle. Para listar as funcionalidades do nosso controle, a Microsoft disponibilizava uma ferramenta do DirectX chamada Joystick Position Information (Poswdm.exe), hoje indisponível no site oficial, porém pude encontrá-la na Internet e disponibilizá-la para download na minha conta do MediaFire:

Joystick Position Information (Poswdm.exe)

Poswdm.exe não requer instalação. Após o download, dê dois cliques para abri-lo. A ferramenta exibirá dois controles disponíveis: vJoy Device e nosso controle físico. Entre na aba do nosso controle físico e clique no botão Device Details…

Ele listará todas as funcionalidades suportadas por nosso controle físico. No meu caso, meu controle suporta os eixos (axis) X e Y (analógico), eixo Z (triggers LT/RT) e eixo R. Ele possuí um único direcional (POV0) e 12 botões.

Conhecendo as funcionalidades do nosso controle físico, estamos prontos para configurar nosso controle virtual de acordo com as funcionalidades do nosso controle físico. Você pode encontrar o configurador do vJoy no Menu iniciar > Todos os programas > vJoy > Configure vJoy.

No topo da janela, o vJoyConf possuí 16 abas. Cada aba permite adicionar um novo controle virtual. Durante a instalação do vJoy, é adicionado automaticamente um controle virtual (aba 1).

  • Axes (Eixos): é possível definir os eixos analógicos disponíveis. Normalmente, todo controle suporta ao menos dois eixos: X (horizontal) e Y (vertical), correspondentes aos analógicos. O controle do Xbox suporta um eixo adicional (Z).
  • Number of Buttons (Número de botões): é possível configurar o número de botões disponíveis no nosso controle virtual.
  • POV Hat Switch (Direcionais): é possível definir o número de direcionais disponíveis no nosso controle virtual e o modo de operação (discreto/contínuo).
  • Force Feedback (Efeitos): é possível definir se e quais efeitos estarão disponíveis no nosso controle virtual (como vibração).

Note que, no print acima, configurei o vJoy de acordo com as funcionalidades do meu controle físico (12 botões, 1 directional [POV], com eixos X, Y, Z e R). Cada caso é um caso.

Após a configuração do vJoy, clique no botão Apply para aplicar as alterações.

6.3 Configuração do UJR

O vJoy é a base do nosso controle virtual, porém, ele não permite o mapeamento do nosso controle físico para o virtual. Para esta tarefa, precisamos do UJR.

O UJR é um programa desenvolvido em AHK (Auto Hot Key, que permite a automatização de ações) que captura os botões, triggers e analógicos pressionados no nosso controle físico e replica a ação no nosso controle virtual. Ele pode ser encontrado no fórum do AHK (arquivo zip).

Atualmente, o UJR foi substituído por uma nova ferramenta do mesmo desenvolvedor: UCR. O principal objetivo do UCR é tentar encontrar uma forma de “esconder” o controle real dos jogos, expondo apenas o controle virtual; porém, ainda não foi encontrado uma forma de fazer isso, mas foi adicionado uma opção de delay (atraso), que permite executar o comando de acionamento dos botões no controle virtual primeiro (antes do controle real) adicionando um delay (atraso) no tempo de resposta do controle real. Jogos que detectam o controle ao executar (diferente de jogos que alternam o meio automaticamente) tendem a identificar o controle virtual primeiro que o controle real.

Porém, achei a interface do UCR um tanto confusa e trabalhosa, já que requer adicionar todos os botões, analógicos e triggers manualmente. O UJR (antecessor) possuí todas as configurações em abas.

Após o download do UJR, extraia-o para qualquer diretório conveniente do sistema e execute-o.

A aba Axes 1 permite configurarmos o mapeamento dos analógicos do nosso controle físico para nosso controle virtual, assim como configurarmos a sensibilidade e o sentido (normal/invertido).

As colunas que precisamos alterar são as seguintes:

  • No topo da tela, em vJoy Stick ID, devemos selecionar qual controle virtual vJoy iremos usar para mapear os botões do nosso controle físico. Normalmente, o ID do controle é 1 (o vJoy instala apenas um controle virtual durante a instalação). Se o URJ detectar nosso controle virtual, ele exibirá a mensagem Connected em verde.
  • Na coluna Physical Stick ID, precisamos selecionar o ID do controle referente ao nosso controle virtual.
    • Para descobrirmos o ID do nosso controle real, precisamos do JoyIDs. Após a instalação, ele pode ser encontrado no Menu iniciar > Todos os programas > JoyIDs.
    • Você pode automatizar o preenchimento da coluna Physical Stick ID definindo o ID do controle real no menu ao lado do botão Auto Configure Stick ID. Após selecionar o ID correspondente, clique no botão Auto Configure Stick ID para preencher a coluna.
  • Na coluna Physical Axis, precisamos configurar o eixo (axis) do nosso controle real referente a coluna Virtual Axis. Não pude encontrar nenhuma referência de como identificar o número do eixo (axis) real (o número do eixo exibido pelo UJR não corresponde aos números do x360ce ou XOutput) e tive de configurar por tentativa e erro, mas o UJR fornece uma barra de estado (coluna State) que, ao movermos o analógico correspondente, ela se move, como pode ser visto no print no formato gif acima, da aba Axis 1 do UJR. (horizontal) e (vertical) referem-se ao analógico esquerdo, e RX (horizontal) e RY (vertical) refere-se ao analógico direito (Right).

Na aba Button 1, realize o mapeamento de botões de acordo com o x360ce ou XOutput. Note que, assim como na aba Axis 1, a coluna Stick ID (identificação do nosso controle real) pode ser preenchida automaticamente através do botão Auto Configure Stick ID e existe uma coluna chamada State que, ao pressionar o botão correspondente, muda o estado de Off para On.

Agora, na aba Hats (Direcionais), selecione o Physical Stick ID do seu controle real e pressione os direcionais para verificar se o estado, na aba State, é alterado.

Com isso, nosso controle está configurado! Outra funcionalidade que o UJR possuí é o suporte a perfis (aba Profiles), que permite a troca de mapeamento rápida. Você pode criar diversos perfis com mapeamentos diferentes para cada tipo de jogo, por exemplo.

Para que o mapeamento ocorra, é necessário manter o UJR executando na barra de tarefas. Execute o jogo e torça para que ele dê prioridade ao controle virtual ou possua opções para definir o controle padrão. Antes de desistir do UJR (caso o jogo não identifique o controle virtual), seria iniciar o UJR apenas após executar o jogo (devido a exclusividade).

7. Antimicro

O Antimicro é a “última alternativa” para utilizar o controle em um jogo. Ele é compatível com todos os jogos por que, diferente do XInput Plus, XOutput e do x360ce, ele realiza o mapeamento do mouse e teclado para botões, analógicos e triggers do controle. Com isso, é possível jogar no controle mesmo jogos que foram desenvolvidos para mouse e teclado, como a série de jogos Mass Effect.

Antes de descobrir que o “The Flame in the Wood” era um jogo 64-bits e que deveria usar a versão 64-bits do x360ce para usar nativamente meu controle genérico para o jogo, usei o Antimicro para realizar o mapeamento do mouse e teclado no controle para poder jogar utilizando meu controle genérico. Assim como o x360ce, ele possuí interface gráfica para mapeamento dos botões e não requer instalação (na sua versão portátil).

O Antimicro funcionou bem com o “The Flame in the Wood”, com uma limitação: para coletar itens para o inventário e para navegar entre os menus, era necessário usar o mouse. Apesar de ser possível mapear o mouse no controle, era custoso acertar os itens de menu do jogo com ele, mesmo ajustando a sensibilidade do mouse no Antimicro. Se o jogo possuí-se um suporte melhor aos direcionais do teclado (W, A, S, D) para navegar entre os menus, o Antimicro funcionaria perfeitamente no “The Flame in the Wood”!

Outro efeito colateral óbvio do Antimicro é que o jogo não exibirá qual botão do controle você deve pressionar (como jogos que suportam tanto controle quanto teclado/mouse), mas sim qual botão do teclado/mouse você deve pressionar.

O Antimicro é gratuito e de código aberto. Ele pode ser encontrado na página oficial do projeto e está disponível tanto em versão portátil quanto com instalador.

8. Extras

Esta seção destina-se a comentar sobre utilitários e ferramentas que podem ser úteis para nós que possuímos jogos genéricos, ou apenas explicações do por quê um programa não ter sido recomendado/utilizado no post.

8.1 DInput Blocker/Spoffer

Assim como o x360ce e XInput Plus interceptam chamadas a API XInput, é possível interceptar chamadas a API DInput.

  • Jogos que suportam tanto as API’s DInput e X Input podem acabar exibindo dois controles no jogo, resultando em movimentos repetidos ou a capacidade de iniciar uma partida de 2 jogadores usando um único controle (SF4/SSF4 e DMC por exemplo). O DInput Blocker permite ocultar a capacidade DirectInput do controle, forçando o uso de mouse/teclado ou dispositivos XInput em jogos.
  • O DInput Spoofer permite mascarar o nome de todos os controles DInput conectados para o nome do controle original do Xbox 360. Como pode ser visto em praticamente todas as imagens deste post, meu controle genérico é reconhecido como USB Vibration Joystick (VS). Alguns jogos/aplicativos realizam o mapeamento de botões de acordo com o nome do controle ou verificam se o nome do controle corresponde ao nome do controle original do Xbox 360 (Xbox 360 Controller for Windows) para permitir o uso do mesmo. Apesar do meu controle possuir os mesmos botões disponíveis no Xbox 360, o modo Big Picture da Steam mapeou os botões A e Y do meu controle invertidos (porém, como o modo Big Picture da Steam suporta o remapeamento de controles nas configurações, pude corrigir os controles sem a necessidade de usar hacks).

O DirectInput Blocker/Spoffer pode ser encontrado no Google Drive da ToCAEDIT (arquivo dinput8-x360cev21.zip), desenvolvedora do x360ce. Após o download, o método de instalação da DLL dinput8.dll é idêntico ao x360ce (extraia a DLL no mesmo diretório do executável do jogo).

8.2 Joy2Key

Assim como o Antimicro, o Joy2Key permite o mapeamento do teclado para controles. Porém, ele não suporta o mapeamento do mouse para controles, o que limita seu uso apenas para jogos que não utilizam mouse.

8.3 x360cemu

Aparentemente, o x360cemu possuí as mesmas funcionalidades do xbox360ce, porém, não possuí interface gráfica (é necessário alterar o arquivo de configuração manualmente para realizar os mapeamentos). Não pude encontrar páginas ou responsáveis oficiais, por isso, recomendo o uso do xbox360ce ao invés do xbox360cemu, devido ao primeiro ainda ser desenvolvido ativamente.

8.4 Pinnacle Game Profiler

Pude encontrá-lo ao tentar encontrar uma forma de jogar o “The Wolf Among Us” com controle genérico. Aparentemente, ele possuía um arquivo de configuração pronto, com o mapeamento do controle para o jogo.

Ao instalar o aplicativo e importar o arquivo de configuração, descobri que o arquivo era similar ao Antimicro (mapeava mouse/teclado ao controle). Além disso, considerei a interface confusa, sendo necessário abrir diversos menus para alterar o mapeamento dos controles.

Ainda assim, o programa possuí uma função, no mínimo, interessante: possuí perfis prontos para controlar o computador através do controle, com sensibilidade e botões do mouse fluídos.

8.6 XBCD

O XBCD é um driver alternativo para o controle Xbox 360 que permitir o uso do controle como um controle genérico e o mapeamento de botões e eixos.

8.7 MediaProperties

Novos registros são adicionados em chaves específicas do fabricante (OEM) quando um controle é conectado pela primeira vez no caminho HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM. [7]

Controles genéricos que não possuem CD de instalação (ou seja, não possuem driver específico e utilizam o driver genérico do sistema) aparentemente não criam registros nesta chave.

Antes de ler a documentação da Microsoft com calma e descobrir que somente os eixos poderiam ser alterados, eu tentei alterar o mapeamento dos botões exportando a chave de registro para arquivo *.reg e invertendo o valor Attributes dos botões que estavam trocados no jogo, na esperança de corrigir o mapeamento. Reiniciei o computador, tirei e coloquei o controle, instalei e desinstalei o driver, porém o Windows não reconhecia o remapeamento.

De acordo com a Microsoft, devido a complexidade e variedade de dispositivos de entrada, não é possível definir um conjunto de mapeamentos; o DInput obtém as informações de mapeamento através do driver do dispositivo [9] e que estas informações são mantidas apenas com propósito de referência no registro [8], porém, os registros relacionados ao mapeamento de eixos (Axes) podem ser alterados [9][10]. Esta informação pôde ser confirmada quando encontrei uma página do fórum ReCaged onde aparentemente foi possível desabilitar o eixo Y alterando o valor Attributes referente ao eixo Y para ff,ff,ff,ff,ff,ff,ff,ff.

Em HKEY_CURRENT_USER, a mesma chave (System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM) pode ser encontrada, porém, aparentemente, ela salva apenas informações relacionadas a calibração do controle (possivelmente, as configurações de calibragem são definidas por usuário – ou seja, aparentemente, dois usuários que usam o mesmo controle podem ter configurações de calibragem diferentes).

Referências

  1. Game Compatibility: The Flame in the Flood · Issue #380 · x360ce_x360ce – GitHub
  2. XInput Plus Tutorial – Play-Old-PC-Games.com
  3. XInput and DirectInput (Windows) – MSDN
  4. L2/R2 trigger. X/Y rotation. Z axis. – InputMapper
  5. What are all the joystick buttons for an Xbox 360/PC Controller? – Unity Answers
  6. Configuration of vJoy Devices – vJoy
  7. Architecture of the configurable driver – vJoy
  8. OEMForceFeedback Registry Settings – Microsoft Docs
  9. Special Case Mappings – Microsoft Docs
  10. Axis Selection Overrides – Microsoft Docs
  11. Taking Advantage of High-Definition Mouse Movement (Windows) – MSDN
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s