Я писал небольшой макрос, который должен был циклически перемещаться по моим огневым группам, пока я стрелял гауссом вместо гаусса-гатлинга. Я, конечно, мог бы использовать уже доступный инструмент, но я предпочел попробовать что-то сам. Однако во время тестирования я открыл редактор и проверил, будет ли программа постоянно нажимать «N», пока нажата кнопка запуска на моем джойстике, и я был рад видеть, что это работало, даже когда приложение работало в фоновом режиме. Однако затем началась Elite Dangerous, мой корабль вывели из штаб-квартиры, и программа просто не стала делать то, что должна была делать. Я проверил:
- я назначил правую кнопку для циклического переключения групп огня и
- как только я переключаюсь на другое приложение, например редактор, оно снова работает отлично.
Это означает, что программа как будто блокирует показания джойстика, когда окно игры находится в фокусе.
Код:
/>JoystickMonitor.xaml.cs
using GamepadInterfaces.KeyboardAndMouse;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Windows.Gaming.Input;
namespace GamepadInterfaces
{
///
/// Interaktionslogik für JoystickMonitor.xaml
///
public partial class JoystickMonitor : Window
{
private GatlingGaussMakro GaussMakro;
private SimpleBackgroundLoop GatlingGaussLoop;
private SimpleBackgroundLoop BackgroundLoop;
private RawGameController GameController;
private bool[] ButtonStateList;
private double[] AxisStateList;
private ObservableCollection ObservableButtonStates;
private ObservableCollection ObservableAxisStates;
public JoystickMonitor(RawGameController controller)
{
InitializeComponent();
GaussMakro = new GatlingGaussMakro(TimeSpan.FromMilliseconds(750), GetCodeForFireGroupButton());
GameController = controller;
BackgroundLoop = new SimpleBackgroundLoop();
GatlingGaussLoop = new SimpleBackgroundLoop();
ButtonStateList = new bool[GameController.ButtonCount];
AxisStateList = new double[GameController.AxisCount];
ObservableButtonStates = new ObservableCollection();
ObservableAxisStates = new ObservableCollection();
lvButtons.ItemsSource = ObservableButtonStates;
lvAxises.ItemsSource = ObservableAxisStates;
GatlingGaussLoop.Run(CallGatlingGaussMakro);
Thread.Sleep(200);
//BackgroundLoop.Run(UpdateLists);
}
private object CallGatlingGaussMakro()
{
GameController.GetCurrentReading(ButtonStateList, new GameControllerSwitchPosition[GameController.SwitchCount], AxisStateList);
GaussMakro.Activate(ButtonStateList[0]);
return null;
}
/// Some Code redacted for Stackoverflow
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... cused-wind