Merge pull request #8 from Ryochan7/jay

Merge changes from Ryochan7/DS4Windows
This commit is contained in:
Yuki-nyan 2018-06-23 21:09:39 +01:00 committed by GitHub
commit cf5ea7a5f9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
198 changed files with 39322 additions and 24357 deletions

5
.gitignore vendored
View File

@ -97,7 +97,7 @@ publish/
# NuGet Packages Directory
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
#packages/
packages/
# Windows Azure Build Output
csx
@ -154,3 +154,6 @@ $RECYCLE.BIN/
# Mac desktop service store files
.DS_Store
.vs/

File diff suppressed because it is too large Load Diff

View File

@ -9,18 +9,24 @@ Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.ActiveCfg = Debug|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.Build.0 = Debug|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.ActiveCfg = Debug|x64
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x64.Build.0 = Debug|x64
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x86.ActiveCfg = Debug|x86
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Debug|x86.Build.0 = Debug|x86
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|Any CPU.Build.0 = Release|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.ActiveCfg = Release|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.Build.0 = Release|Any CPU
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.ActiveCfg = Release|x64
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x64.Build.0 = Release|x64
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x86.ActiveCfg = Release|x86
{7B9354BF-AF82-4CCB-A83D-4BEB1E9D8C96}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,851 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
using System.Media;
using System.Threading.Tasks;
using static DS4Windows.Global;
namespace DS4Windows
{
public class ControlService
{
public X360Device x360Bus;
public DS4Device[] DS4Controllers = new DS4Device[4];
public Mouse[] touchPad = new Mouse[4];
private bool running = false;
private DS4State[] MappedState = new DS4State[4];
private DS4State[] CurrentState = new DS4State[4];
private DS4State[] PreviousState = new DS4State[4];
public DS4StateExposed[] ExposedState = new DS4StateExposed[4];
public bool recordingMacro = false;
public event EventHandler<DebugEventArgs> Debug = null;
public bool eastertime = false;
private int eCode = 0;
bool[] buttonsdown = { false, false, false, false };
List<DS4Controls> dcs = new List<DS4Controls>();
bool[] held = new bool[4];
int[] oldmouse = new int[4] { -1, -1, -1, -1 };
SoundPlayer sp = new SoundPlayer();
private class X360Data
{
public byte[] Report = new byte[28];
public byte[] Rumble = new byte[8];
}
private X360Data[] processingData = new X360Data[4];
public ControlService()
{
sp.Stream = Properties.Resources.EE;
x360Bus = new X360Device();
AddtoDS4List();
for (int i = 0; i < DS4Controllers.Length; i++)
{
processingData[i] = new X360Data();
MappedState[i] = new DS4State();
CurrentState[i] = new DS4State();
PreviousState[i] = new DS4State();
ExposedState[i] = new DS4StateExposed(CurrentState[i]);
}
}
void AddtoDS4List()
{
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Circle);
dcs.Add(DS4Controls.Square);
dcs.Add(DS4Controls.Triangle);
dcs.Add(DS4Controls.Options);
dcs.Add(DS4Controls.Share);
dcs.Add(DS4Controls.DpadUp);
dcs.Add(DS4Controls.DpadDown);
dcs.Add(DS4Controls.DpadLeft);
dcs.Add(DS4Controls.DpadRight);
dcs.Add(DS4Controls.PS);
dcs.Add(DS4Controls.L1);
dcs.Add(DS4Controls.R1);
dcs.Add(DS4Controls.L2);
dcs.Add(DS4Controls.R2);
dcs.Add(DS4Controls.L3);
dcs.Add(DS4Controls.R3);
dcs.Add(DS4Controls.LXPos);
dcs.Add(DS4Controls.LXNeg);
dcs.Add(DS4Controls.LYPos);
dcs.Add(DS4Controls.LYNeg);
dcs.Add(DS4Controls.RXPos);
dcs.Add(DS4Controls.RXNeg);
dcs.Add(DS4Controls.RYPos);
dcs.Add(DS4Controls.RYNeg);
dcs.Add(DS4Controls.SwipeUp);
dcs.Add(DS4Controls.SwipeDown);
dcs.Add(DS4Controls.SwipeLeft);
dcs.Add(DS4Controls.SwipeRight);
}
private async void WarnExclusiveModeFailure(DS4Device device)
{
if (DS4Devices.isExclusiveMode && !device.IsExclusive)
{
await System.Threading.Tasks.Task.Delay(5);
String message = Properties.Resources.CouldNotOpenDS4.Replace("*Mac address*", device.MacAddress) + " " + Properties.Resources.QuitOtherPrograms;
LogDebug(message, true);
Log.LogToTray(message, true);
}
}
public bool Start(bool showlog = true)
{
if (x360Bus.Open() && x360Bus.Start())
{
if (showlog)
LogDebug(Properties.Resources.Starting);
DS4Devices.isExclusiveMode = UseExclusiveMode;
if (showlog)
{
LogDebug(Properties.Resources.SearchingController);
LogDebug(DS4Devices.isExclusiveMode ? Properties.Resources.UsingExclusive: Properties.Resources.UsingShared);
}
try
{
DS4Devices.findControllers();
IEnumerable<DS4Device> devices = DS4Devices.getDS4Controllers();
int ind = 0;
DS4LightBar.defualtLight = false;
foreach (DS4Device device in devices)
{
if (showlog)
LogDebug(Properties.Resources.FoundController + device.MacAddress + " (" + device.ConnectionType + ")");
WarnExclusiveModeFailure(device);
DS4Controllers[ind] = device;
device.Removal -= DS4Devices.On_Removal;
device.Removal += this.On_DS4Removal;
device.Removal += DS4Devices.On_Removal;
touchPad[ind] = new Mouse(ind, device);
device.LightBarColor = MainColor[ind];
if (!DinputOnly[ind])
x360Bus.Plugin(ind);
device.Report += this.On_Report;
TouchPadOn(ind, device);
//string filename = ProfilePath[ind];
ind++;
if (showlog)
if (System.IO.File.Exists(appdatapath + "\\Profiles\\" + ProfilePath[ind-1] + ".xml"))
{
string prolog = Properties.Resources.UsingProfile.Replace("*number*", ind.ToString()).Replace("*Profile name*", ProfilePath[ind-1]);
LogDebug(prolog);
Log.LogToTray(prolog);
}
else
{
string prolog = Properties.Resources.NotUsingProfile.Replace("*number*", (ind).ToString());
LogDebug(prolog);
Log.LogToTray(prolog);
}
if (ind >= 4) // out of Xinput devices!
break;
}
}
catch (Exception e)
{
LogDebug(e.Message);
Log.LogToTray(e.Message);
}
running = true;
}
return true;
}
public bool Stop(bool showlog = true)
{
if (running)
{
running = false;
if (showlog)
LogDebug(Properties.Resources.StoppingX360);
bool anyUnplugged = false;
for (int i = 0; i < DS4Controllers.Length; i++)
{
if (DS4Controllers[i] != null)
{
if (DCBTatStop && !DS4Controllers[i].Charging && showlog)
DS4Controllers[i].DisconnectBT();
else
{
DS4LightBar.forcelight[i] = false;
DS4LightBar.forcedFlash[i] = 0;
DS4LightBar.defualtLight = true;
DS4LightBar.updateLightBar(DS4Controllers[i], i, CurrentState[i], ExposedState[i], touchPad[i]);
System.Threading.Thread.Sleep(50);
}
CurrentState[i].Battery = PreviousState[i].Battery = 0; // Reset for the next connection's initial status change.
x360Bus.Unplug(i);
anyUnplugged = true;
DS4Controllers[i] = null;
touchPad[i] = null;
}
}
if (anyUnplugged)
System.Threading.Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME);
x360Bus.UnplugAll();
x360Bus.Stop();
if (showlog)
LogDebug(Properties.Resources.StoppingDS4);
DS4Devices.stopControllers();
if (showlog)
LogDebug(Properties.Resources.StoppedDS4Windows);
ControllerStatusChanged(this);
}
return true;
}
public bool HotPlug()
{
if (running)
{
DS4Devices.findControllers();
IEnumerable<DS4Device> devices = DS4Devices.getDS4Controllers();
foreach (DS4Device device in devices)
{
if (device.IsDisconnecting)
continue;
if (((Func<bool>)delegate
{
for (Int32 Index = 0; Index < DS4Controllers.Length; Index++)
if (DS4Controllers[Index] != null && DS4Controllers[Index].MacAddress == device.MacAddress)
return true;
return false;
})())
continue;
for (Int32 Index = 0; Index < DS4Controllers.Length; Index++)
if (DS4Controllers[Index] == null)
{
LogDebug(Properties.Resources.FoundController + device.MacAddress + " (" + device.ConnectionType + ")");
WarnExclusiveModeFailure(device);
DS4Controllers[Index] = device;
device.Removal -= DS4Devices.On_Removal;
device.Removal += this.On_DS4Removal;
device.Removal += DS4Devices.On_Removal;
touchPad[Index] = new Mouse(Index, device);
device.LightBarColor = MainColor[Index];
device.Report += this.On_Report;
if (!DinputOnly[Index])
x360Bus.Plugin(Index);
TouchPadOn(Index, device);
//string filename = Path.GetFileName(ProfilePath[Index]);
if (System.IO.File.Exists(appdatapath + "\\Profiles\\" + ProfilePath[Index] + ".xml"))
{
string prolog = Properties.Resources.UsingProfile.Replace("*number*", (Index + 1).ToString()).Replace("*Profile name*", ProfilePath[Index]);
LogDebug(prolog);
Log.LogToTray(prolog);
}
else
{
string prolog = Properties.Resources.NotUsingProfile.Replace("*number*", (Index + 1).ToString());
LogDebug(prolog);
Log.LogToTray(prolog);
}
break;
}
}
}
return true;
}
public void TouchPadOn(int ind, DS4Device device)
{
ITouchpadBehaviour tPad = touchPad[ind];
device.Touchpad.TouchButtonDown += tPad.touchButtonDown;
device.Touchpad.TouchButtonUp += tPad.touchButtonUp;
device.Touchpad.TouchesBegan += tPad.touchesBegan;
device.Touchpad.TouchesMoved += tPad.touchesMoved;
device.Touchpad.TouchesEnded += tPad.touchesEnded;
device.Touchpad.TouchUnchanged += tPad.touchUnchanged;
device.SixAxis.SixAccelMoved += tPad.sixaxisMoved;
//LogDebug("Touchpad mode for " + device.MacAddress + " is now " + tmode.ToString());
//Log.LogToTray("Touchpad mode for " + device.MacAddress + " is now " + tmode.ToString());
ControllerStatusChanged(this);
}
public void TimeoutConnection(DS4Device d)
{
try
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
while (!d.IsAlive())
{
if (sw.ElapsedMilliseconds < 1000)
System.Threading.Thread.SpinWait(500);
//If weve been waiting less than 1 second let the thread keep its processing chunk
else
System.Threading.Thread.Sleep(500);
//If weve been waiting more than 1 second give up some resources
if (sw.ElapsedMilliseconds > 5000) throw new TimeoutException(); //Weve waited long enough
}
sw.Reset();
}
catch (TimeoutException)
{
Stop(false);
Start(false);
}
}
public string getDS4ControllerInfo(int index)
{
if (DS4Controllers[index] != null)
{
DS4Device d = DS4Controllers[index];
if (!d.IsAlive())
//return "Connecting..."; // awaiting the first battery charge indication
{
var TimeoutThread = new System.Threading.Thread(() => TimeoutConnection(d));
TimeoutThread.IsBackground = true;
TimeoutThread.Name = "TimeoutFor" + d.MacAddress.ToString();
TimeoutThread.Start();
return Properties.Resources.Connecting;
}
String battery;
if (d.Charging)
{
if (d.Battery >= 100)
battery = Properties.Resources.Charged;
else
battery = Properties.Resources.Charging.Replace("*number*", d.Battery.ToString());
}
else
{
battery = Properties.Resources.Battery.Replace("*number*", d.Battery.ToString());
}
return d.MacAddress + " (" + d.ConnectionType + "), " + battery;
//return d.MacAddress + " (" + d.ConnectionType + "), Battery is " + battery + ", Touchpad in " + modeSwitcher[index].ToString();
}
else
return String.Empty;
}
public string getDS4MacAddress(int index)
{
if (DS4Controllers[index] != null)
{
DS4Device d = DS4Controllers[index];
if (!d.IsAlive())
//return "Connecting..."; // awaiting the first battery charge indication
{
var TimeoutThread = new System.Threading.Thread(() => TimeoutConnection(d));
TimeoutThread.IsBackground = true;
TimeoutThread.Name = "TimeoutFor" + d.MacAddress.ToString();
TimeoutThread.Start();
return Properties.Resources.Connecting;
}
return d.MacAddress;
}
else
return String.Empty;
}
public string getShortDS4ControllerInfo(int index)
{
if (DS4Controllers[index] != null)
{
DS4Device d = DS4Controllers[index];
String battery;
if (!d.IsAlive())
battery = "...";
if (d.Charging)
{
if (d.Battery >= 100)
battery = Properties.Resources.Full;
else
battery = d.Battery + "%+";
}
else
{
battery = d.Battery + "%";
}
return (d.ConnectionType + " " + battery);
}
else
return Properties.Resources.NoneText;
}
public string getDS4Battery(int index)
{
if (DS4Controllers[index] != null)
{
DS4Device d = DS4Controllers[index];
String battery;
if (!d.IsAlive())
battery = "...";
if (d.Charging)
{
if (d.Battery >= 100)
battery = Properties.Resources.Full;
else
battery = d.Battery + "%+";
}
else
{
battery = d.Battery + "%";
}
return battery;
}
else
return Properties.Resources.NA;
}
public string getDS4Status(int index)
{
if (DS4Controllers[index] != null)
{
DS4Device d = DS4Controllers[index];
return d.ConnectionType+"";
}
else
return Properties.Resources.NoneText;
}
private int XINPUT_UNPLUG_SETTLE_TIME = 250; // Inhibit races that occur with the asynchronous teardown of ScpVBus -> X360 driver instance.
//Called when DS4 is disconnected or timed out
protected virtual void On_DS4Removal(object sender, EventArgs e)
{
DS4Device device = (DS4Device)sender;
int ind = -1;
for (int i = 0; i < DS4Controllers.Length; i++)
if (DS4Controllers[i] != null && device.MacAddress == DS4Controllers[i].MacAddress)
ind = i;
if (ind != -1)
{
CurrentState[ind].Battery = PreviousState[ind].Battery = 0; // Reset for the next connection's initial status change.
x360Bus.Unplug(ind);
string removed = Properties.Resources.ControllerWasRemoved.Replace("*Mac address*", (ind +1).ToString());
if (DS4Controllers[ind].Battery <= 20 &&
DS4Controllers[ind].ConnectionType == ConnectionType.BT && !DS4Controllers[ind].Charging)
removed += ". " + Properties.Resources.ChargeController;
LogDebug(removed);
Log.LogToTray(removed);
System.Threading.Thread.Sleep(XINPUT_UNPLUG_SETTLE_TIME);
DS4Controllers[ind] = null;
touchPad[ind] = null;
ControllerStatusChanged(this);
}
}
public bool[] lag = { false, false, false, false };
//Called every time the new input report has arrived
protected virtual void On_Report(object sender, EventArgs e)
{
DS4Device device = (DS4Device)sender;
int ind = -1;
for (int i = 0; i < DS4Controllers.Length; i++)
if (device == DS4Controllers[i])
ind = i;
if (ind != -1)
{
if (FlushHIDQueue[ind])
device.FlushHID();
if (!string.IsNullOrEmpty(device.error))
{
LogDebug(device.error);
}
if (DateTime.UtcNow - device.firstActive > TimeSpan.FromSeconds(5))
{
if (device.Latency >= FlashWhenLateAt && !lag[ind])
LagFlashWarning(ind, true);
else if (device.Latency < FlashWhenLateAt && lag[ind])
LagFlashWarning(ind, false);
}
device.getExposedState(ExposedState[ind], CurrentState[ind]);
DS4State cState = CurrentState[ind];
device.getPreviousState(PreviousState[ind]);
DS4State pState = PreviousState[ind];
if (pState.Battery != cState.Battery)
ControllerStatusChanged(this);
CheckForHotkeys(ind, cState, pState);
if (eastertime)
EasterTime(ind);
GetInputkeys(ind);
if (LSCurve[ind] != 0 || RSCurve[ind] != 0 || LSDeadzone[ind] != 0 || RSDeadzone[ind] != 0 ||
L2Deadzone[ind] != 0 || R2Deadzone[ind] != 0 || LSSens[ind] != 0 || RSSens[ind] != 0 ||
L2Sens[ind] != 0 || R2Sens[ind] != 0) //if a curve or deadzone is in place
cState = Mapping.SetCurveAndDeadzone(ind, cState);
if (!recordingMacro && (!string.IsNullOrEmpty(tempprofilename[ind]) ||
HasCustomAction(ind) || HasCustomExtras(ind) || ProfileActions[ind].Count > 0))
{
Mapping.MapCustom(ind, cState, MappedState[ind], ExposedState[ind], touchPad[ind], this);
cState = MappedState[ind];
}
//if (HasCustomExtras(ind))
// DoExtras(ind);
// Update the GUI/whatever.
DS4LightBar.updateLightBar(device, ind, cState, ExposedState[ind], touchPad[ind]);
x360Bus.Parse(cState, processingData[ind].Report, ind);
// We push the translated Xinput state, and simultaneously we
// pull back any possible rumble data coming from Xinput consumers.
if (x360Bus.Report(processingData[ind].Report, processingData[ind].Rumble))
{
Byte Big = (Byte)(processingData[ind].Rumble[3]);
Byte Small = (Byte)(processingData[ind].Rumble[4]);
if (processingData[ind].Rumble[1] == 0x08)
{
setRumble(Big, Small, ind);
}
}
// Output any synthetic events.
Mapping.Commit(ind);
// Pull settings updates.
device.IdleTimeout = IdleDisconnectTimeout[ind];
}
}
public void LagFlashWarning(int ind, bool on)
{
if (on)
{
lag[ind] = true;
LogDebug(Properties.Resources.LatencyOverTen.Replace("*number*", (ind + 1).ToString()), true);
if (FlashWhenLate)
{
DS4Color color = new DS4Color { red = 50, green = 0, blue = 0 };
DS4LightBar.forcedColor[ind] = color;
DS4LightBar.forcedFlash[ind] = 2;
DS4LightBar.forcelight[ind] = true;
}
}
else
{
lag[ind] = false;
LogDebug(Properties.Resources.LatencyNotOverTen.Replace("*number*", (ind + 1).ToString()));
DS4LightBar.forcelight[ind] = false;
DS4LightBar.forcedFlash[ind] = 0;
}
}
/* private void DoExtras(int ind)
{
DS4State cState = CurrentState[ind];
DS4StateExposed eState = ExposedState[ind];
Mouse tp = touchPad[ind];
DS4Controls helddown = DS4Controls.None;
foreach (KeyValuePair<DS4Controls, string> p in getCustomExtras(ind))
{
if (Mapping.getBoolMapping(ind, p.Key, cState, eState, tp))
{
helddown = p.Key;
break;
}
}
if (helddown != DS4Controls.None)
{
string p = getCustomExtras(ind)[helddown];
string[] extraS = p.Split(',');
int[] extras = new int[extraS.Length];
for (int i = 0; i < extraS.Length; i++)
{
int b;
if (int.TryParse(extraS[i], out b))
extras[i] = b;
}
held[ind] = true;
try
{
if (!(extras[0] == extras[1] && extras[1] == 0))
setRumble((byte)extras[0], (byte)extras[1], ind);
if (extras[2] == 1)
{
DS4Color color = new DS4Color { red = (byte)extras[3], green = (byte)extras[4], blue = (byte)extras[5] };
DS4LightBar.forcedColor[ind] = color;
DS4LightBar.forcedFlash[ind] = (byte)extras[6];
DS4LightBar.forcelight[ind] = true;
}
if (extras[7] == 1)
{
if (oldmouse[ind] == -1)
oldmouse[ind] = ButtonMouseSensitivity[ind];
ButtonMouseSensitivity[ind] = extras[8];
}
}
catch { }
}
else if (held[ind])
{
DS4LightBar.forcelight[ind] = false;
DS4LightBar.forcedFlash[ind] = 0;
ButtonMouseSensitivity[ind] = oldmouse[ind];
oldmouse[ind] = -1;
setRumble(0, 0, ind);
held[ind] = false;
}
}*/
public void EasterTime(int ind)
{
DS4State cState = CurrentState[ind];
DS4StateExposed eState = ExposedState[ind];
Mouse tp = touchPad[ind];
bool pb = false;
foreach (DS4Controls dc in dcs)
{
if (Mapping.getBoolMapping(ind, dc, cState, eState, tp))
{
pb = true;
break;
}
}
int temp = eCode;
//Looks like you found the easter egg code, since you're already cheating,
//I scrambled the code for you :)
if (pb && !buttonsdown[ind])
{
if (cState.Cross && eCode == 9)
eCode++;
else if (!cState.Cross && eCode == 9)
eCode = 0;
else if (cState.DpadLeft && eCode == 6)
eCode++;
else if (!cState.DpadLeft && eCode == 6)
eCode = 0;
else if (cState.DpadRight && eCode == 7)
eCode++;
else if (!cState.DpadRight && eCode == 7)
eCode = 0;
else if (cState.DpadLeft && eCode == 4)
eCode++;
else if (!cState.DpadLeft && eCode == 4)
eCode = 0;
else if (cState.DpadDown && eCode == 2)
eCode++;
else if (!cState.DpadDown && eCode == 2)
eCode = 0;
else if (cState.DpadRight && eCode == 5)
eCode++;
else if (!cState.DpadRight && eCode == 5)
eCode = 0;
else if (cState.DpadUp && eCode == 1)
eCode++;
else if (!cState.DpadUp && eCode == 1)
eCode = 0;
else if (cState.DpadDown && eCode == 3)
eCode++;
else if (!cState.DpadDown && eCode == 3)
eCode = 0;
else if (cState.Circle && eCode == 8)
eCode++;
else if (!cState.Circle && eCode == 8)
eCode = 0;
if (cState.DpadUp && eCode == 0)
eCode++;
if (eCode == 10)
{
string message = "(!)";
sp.Play();
LogDebug(message, true);
eCode = 0;
}
if (temp != eCode)
Console.WriteLine(eCode);
buttonsdown[ind] = true;
}
else if (!pb)
buttonsdown[ind] = false;
}
public string GetInputkeys(int ind)
{
DS4State cState = CurrentState[ind];
DS4StateExposed eState = ExposedState[ind];
Mouse tp = touchPad[ind];
if (DS4Controllers[ind] != null)
if (Mapping.getBoolMapping(ind, DS4Controls.Cross, cState, eState, tp)) return "Cross";
else if (Mapping.getBoolMapping(ind, DS4Controls.Circle, cState, eState, tp)) return "Circle";
else if (Mapping.getBoolMapping(ind, DS4Controls.Triangle, cState, eState, tp)) return "Triangle";
else if (Mapping.getBoolMapping(ind, DS4Controls.Square, cState, eState, tp)) return "Square";
else if (Mapping.getBoolMapping(ind, DS4Controls.L1, cState, eState, tp)) return "L1";
else if (Mapping.getBoolMapping(ind, DS4Controls.R1, cState, eState, tp)) return "R1";
else if (Mapping.getBoolMapping(ind, DS4Controls.L2, cState, eState, tp)) return "L2";
else if (Mapping.getBoolMapping(ind, DS4Controls.R2, cState, eState, tp)) return "R2";
else if (Mapping.getBoolMapping(ind, DS4Controls.L3, cState, eState, tp)) return "L3";
else if (Mapping.getBoolMapping(ind, DS4Controls.R3, cState, eState, tp)) return "R3";
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadUp, cState, eState, tp)) return "Up";
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadDown, cState, eState, tp)) return "Down";
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadLeft, cState, eState, tp)) return "Left";
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadRight, cState, eState, tp)) return "Right";
else if (Mapping.getBoolMapping(ind, DS4Controls.Share, cState, eState, tp)) return "Share";
else if (Mapping.getBoolMapping(ind, DS4Controls.Options, cState, eState, tp)) return "Options";
else if (Mapping.getBoolMapping(ind, DS4Controls.PS, cState, eState, tp)) return "PS";
else if (Mapping.getBoolMapping(ind, DS4Controls.LXPos, cState, eState, tp)) return "LS Right";
else if (Mapping.getBoolMapping(ind, DS4Controls.LXNeg, cState, eState, tp)) return "LS Left";
else if (Mapping.getBoolMapping(ind, DS4Controls.LYPos, cState, eState, tp)) return "LS Down";
else if (Mapping.getBoolMapping(ind, DS4Controls.LYNeg, cState, eState, tp)) return "LS Up";
else if (Mapping.getBoolMapping(ind, DS4Controls.RXPos, cState, eState, tp)) return "RS Right";
else if (Mapping.getBoolMapping(ind, DS4Controls.RXNeg, cState, eState, tp)) return "RS Left";
else if (Mapping.getBoolMapping(ind, DS4Controls.RYPos, cState, eState, tp)) return "RS Down";
else if (Mapping.getBoolMapping(ind, DS4Controls.RYNeg, cState, eState, tp)) return "RS Up";
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchLeft, cState, eState, tp)) return "Touch Left";
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchRight, cState, eState, tp)) return "Touch Right";
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchMulti, cState, eState, tp)) return "Touch Multi";
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchUpper, cState, eState, tp)) return "Touch Upper";
return "nothing";
}
public DS4Controls GetInputkeysDS4(int ind)
{
DS4State cState = CurrentState[ind];
DS4StateExposed eState = ExposedState[ind];
Mouse tp = touchPad[ind];
if (DS4Controllers[ind] != null)
if (Mapping.getBoolMapping(ind, DS4Controls.Cross, cState, eState, tp)) return DS4Controls.Cross;
else if (Mapping.getBoolMapping(ind, DS4Controls.Circle, cState, eState, tp)) return DS4Controls.Circle;
else if (Mapping.getBoolMapping(ind, DS4Controls.Triangle, cState, eState, tp)) return DS4Controls.Triangle;
else if (Mapping.getBoolMapping(ind, DS4Controls.Square, cState, eState, tp)) return DS4Controls.Square;
else if (Mapping.getBoolMapping(ind, DS4Controls.L1, cState, eState, tp)) return DS4Controls.L1;
else if (Mapping.getBoolMapping(ind, DS4Controls.R1, cState, eState, tp)) return DS4Controls.R1;
else if (Mapping.getBoolMapping(ind, DS4Controls.L2, cState, eState, tp)) return DS4Controls.L2;
else if (Mapping.getBoolMapping(ind, DS4Controls.R2, cState, eState, tp)) return DS4Controls.R2;
else if (Mapping.getBoolMapping(ind, DS4Controls.L3, cState, eState, tp)) return DS4Controls.L3;
else if (Mapping.getBoolMapping(ind, DS4Controls.R3, cState, eState, tp)) return DS4Controls.R3;
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadUp, cState, eState, tp)) return DS4Controls.DpadUp;
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadDown, cState, eState, tp)) return DS4Controls.DpadDown;
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadLeft, cState, eState, tp)) return DS4Controls.DpadLeft;
else if (Mapping.getBoolMapping(ind, DS4Controls.DpadRight, cState, eState, tp)) return DS4Controls.DpadRight;
else if (Mapping.getBoolMapping(ind, DS4Controls.Share, cState, eState, tp)) return DS4Controls.Share;
else if (Mapping.getBoolMapping(ind, DS4Controls.Options, cState, eState, tp)) return DS4Controls.Options;
else if (Mapping.getBoolMapping(ind, DS4Controls.PS, cState, eState, tp)) return DS4Controls.PS;
else if (Mapping.getBoolMapping(ind, DS4Controls.LXPos, cState, eState, tp)) return DS4Controls.LXPos;
else if (Mapping.getBoolMapping(ind, DS4Controls.LXNeg, cState, eState, tp)) return DS4Controls.LXNeg;
else if (Mapping.getBoolMapping(ind, DS4Controls.LYPos, cState, eState, tp)) return DS4Controls.LYPos;
else if (Mapping.getBoolMapping(ind, DS4Controls.LYNeg, cState, eState, tp)) return DS4Controls.LYNeg;
else if (Mapping.getBoolMapping(ind, DS4Controls.RXPos, cState, eState, tp)) return DS4Controls.RXPos;
else if (Mapping.getBoolMapping(ind, DS4Controls.RXNeg, cState, eState, tp)) return DS4Controls.RXNeg;
else if (Mapping.getBoolMapping(ind, DS4Controls.RYPos, cState, eState, tp)) return DS4Controls.RYPos;
else if (Mapping.getBoolMapping(ind, DS4Controls.RYNeg, cState, eState, tp)) return DS4Controls.RYNeg;
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchLeft, cState, eState, tp)) return DS4Controls.TouchLeft;
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchRight, cState, eState, tp)) return DS4Controls.TouchRight;
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchMulti, cState, eState, tp)) return DS4Controls.TouchMulti;
else if (Mapping.getBoolMapping(ind, DS4Controls.TouchUpper, cState, eState, tp)) return DS4Controls.TouchUpper;
return DS4Controls.None;
}
public bool[] touchreleased = { true, true, true, true }, touchslid = { false, false, false, false };
public byte[] oldtouchvalue = { 0, 0, 0, 0 };
public int[] oldscrollvalue = { 0, 0, 0, 0 };
protected virtual void CheckForHotkeys(int deviceID, DS4State cState, DS4State pState)
{
if (!UseTPforControls[deviceID] && cState.Touch1 && pState.PS)
{
if (TouchSensitivity[deviceID] > 0 && touchreleased[deviceID])
{
oldtouchvalue[deviceID] = TouchSensitivity[deviceID];
oldscrollvalue[deviceID] = ScrollSensitivity[deviceID];
TouchSensitivity[deviceID] = 0;
ScrollSensitivity[deviceID] = 0;
LogDebug(TouchSensitivity[deviceID] > 0 ? Properties.Resources.TouchpadMovementOn : Properties.Resources.TouchpadMovementOff);
Log.LogToTray(TouchSensitivity[deviceID] > 0 ? Properties.Resources.TouchpadMovementOn : Properties.Resources.TouchpadMovementOff);
touchreleased[deviceID] = false;
}
else if (touchreleased[deviceID])
{
TouchSensitivity[deviceID] = oldtouchvalue[deviceID];
ScrollSensitivity[deviceID] = oldscrollvalue[deviceID];
LogDebug(TouchSensitivity[deviceID] > 0 ? Properties.Resources.TouchpadMovementOn : Properties.Resources.TouchpadMovementOff);
Log.LogToTray(TouchSensitivity[deviceID] > 0 ? Properties.Resources.TouchpadMovementOn : Properties.Resources.TouchpadMovementOff);
touchreleased[deviceID] = false;
}
}
else
touchreleased[deviceID] = true;
}
public virtual void StartTPOff(int deviceID)
{
if (deviceID < 4)
{
oldtouchvalue[deviceID] = TouchSensitivity[deviceID];
oldscrollvalue[deviceID] = ScrollSensitivity[deviceID];
TouchSensitivity[deviceID] = 0;
ScrollSensitivity[deviceID] = 0;
}
}
public virtual string TouchpadSlide(int ind)
{
DS4State cState = CurrentState[ind];
string slidedir = "none";
if (DS4Controllers[ind] != null && cState.Touch2 && !(touchPad[ind].dragging || touchPad[ind].dragging2))
if (touchPad[ind].slideright && !touchslid[ind])
{
slidedir = "right";
touchslid[ind] = true;
}
else if (touchPad[ind].slideleft && !touchslid[ind])
{
slidedir = "left";
touchslid[ind] = true;
}
else if (!touchPad[ind].slideleft && !touchPad[ind].slideright)
{
slidedir = "";
touchslid[ind] = false;
}
return slidedir;
}
public virtual void LogDebug(String Data, bool warning = false)
{
Console.WriteLine(System.DateTime.Now.ToString("G") + "> " + Data);
if (Debug != null)
{
DebugEventArgs args = new DebugEventArgs(Data, warning);
OnDebug(this, args);
}
}
public virtual void OnDebug(object sender, DebugEventArgs args)
{
if (Debug != null)
Debug(this, args);
}
//sets the rumble adjusted with rumble boost
public virtual void setRumble(byte heavyMotor, byte lightMotor, int deviceNum)
{
byte boost = RumbleBoost[deviceNum];
uint lightBoosted = ((uint)lightMotor * (uint)boost) / 100;
if (lightBoosted > 255)
lightBoosted = 255;
uint heavyBoosted = ((uint)heavyMotor * (uint)boost) / 100;
if (heavyBoosted > 255)
heavyBoosted = 255;
if (deviceNum < 4)
if (DS4Controllers[deviceNum] != null)
DS4Controllers[deviceNum].setRumble((byte)lightBoosted, (byte)heavyBoosted);
}
public DS4State getDS4State(int ind)
{
return CurrentState[ind];
}
public DS4State getDS4StateMapped(int ind)
{
return MappedState[ind];
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using static System.Math;
using static DS4Windows.Global;
using System.Diagnostics;
namespace DS4Windows
{
public class DS4LightBar
@ -19,128 +18,222 @@ namespace DS4Windows
{ 140, 140 },
{ 168, 112 },
{ 196, 84 },
{ 224, 56}, // on 80% of the time at 80, etc.
{ 224, 56 }, // on 80% of the time at 80, etc.
{ 252, 28 } // on 90% of the time at 90
};
static double[] counters = new double[4] { 0, 0, 0, 0 };
public static double[] fadetimer = new double[4] { 0, 0, 0, 0 };
public static Stopwatch[] fadewatches = new Stopwatch[4]
{ new Stopwatch(), new Stopwatch(), new Stopwatch(), new Stopwatch() };
static bool[] fadedirection = new bool[4] { false, false, false, false };
static DateTime oldnow = DateTime.UtcNow;
static DateTime[] oldnow = new DateTime[4]
{ DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow, DateTime.UtcNow };
public static bool[] forcelight = new bool[4] { false, false, false, false };
public static DS4Color[] forcedColor = new DS4Color[4];
public static byte[] forcedFlash = new byte[4];
public static void updateLightBar(DS4Device device, int deviceNum, DS4State cState, DS4StateExposed eState, Mouse tp)
internal const int PULSE_FLASH_DURATION = 2000;
internal const double PULSE_FLASH_SEGMENTS = PULSE_FLASH_DURATION / 40;
internal const int PULSE_CHARGING_DURATION = 4000;
internal const double PULSE_CHARGING_SEGMENTS = (PULSE_CHARGING_DURATION / 40) - 2;
public static void updateLightBar(DS4Device device, int deviceNum)
{
DS4Color color;
if (!defualtLight && !forcelight[deviceNum])
if (!defaultLight && !forcelight[deviceNum])
{
if (UseCustomLed[deviceNum])
if (getUseCustomLed(deviceNum))
{
if (LedAsBatteryIndicator[deviceNum])
if (getLedAsBatteryIndicator(deviceNum))
{
DS4Color fullColor = CustomColor[deviceNum];
DS4Color lowColor = LowColor[deviceNum];
color = getTransitionedColor(lowColor, fullColor, device.Battery);
DS4Color fullColor = getCustomColor(deviceNum);
DS4Color lowColor = getLowColor(deviceNum);
color = getTransitionedColor(lowColor, fullColor, device.getBattery());
}
else
color = CustomColor[deviceNum];
color = getCustomColor(deviceNum);
}
else
{
if (Rainbow[deviceNum] > 0)
{// Display rainbow
double rainbow = getRainbow(deviceNum);
if (rainbow > 0)
{
// Display rainbow
DateTime now = DateTime.UtcNow;
if (now >= oldnow + TimeSpan.FromMilliseconds(10)) //update by the millisecond that way it's a smooth transtion
if (now >= oldnow[deviceNum] + TimeSpan.FromMilliseconds(10)) //update by the millisecond that way it's a smooth transtion
{
oldnow = now;
if (device.Charging)
counters[deviceNum] -= 1.5 * 3 / Rainbow[deviceNum];
oldnow[deviceNum] = now;
if (device.isCharging())
counters[deviceNum] -= 1.5 * 3 / rainbow;
else
counters[deviceNum] += 1.5 * 3 / Rainbow[deviceNum];
counters[deviceNum] += 1.5 * 3 / rainbow;
}
if (counters[deviceNum] < 0)
counters[deviceNum] = 180000;
if (counters[deviceNum] > 180000)
else if (counters[deviceNum] > 180000)
counters[deviceNum] = 0;
if (LedAsBatteryIndicator[deviceNum])
color = HuetoRGB((float)counters[deviceNum] % 360, (byte)(2.55 * device.Battery));
if (getLedAsBatteryIndicator(deviceNum))
color = HuetoRGB((float)counters[deviceNum] % 360, (byte)(device.getBattery() * 2.55));
else
color = HuetoRGB((float)counters[deviceNum] % 360, 255);
}
else if (LedAsBatteryIndicator[deviceNum])
else if (getLedAsBatteryIndicator(deviceNum))
{
//if (device.Charging == false || device.Battery >= 100) // when charged, don't show the charging animation
{
DS4Color fullColor = MainColor[deviceNum];
DS4Color lowColor = LowColor[deviceNum];
color = getTransitionedColor(lowColor, fullColor, (uint)device.Battery);
}
DS4Color fullColor = getMainColor(deviceNum);
DS4Color lowColor = getLowColor(deviceNum);
color = getTransitionedColor(lowColor, fullColor, device.getBattery());
}
else
{
color = MainColor[deviceNum];
color = getMainColor(deviceNum);
}
}
if (device.Battery <= FlashAt[deviceNum] && !defualtLight && !device.Charging)
if (device.getBattery() <= getFlashAt(deviceNum) && !defaultLight && !device.isCharging())
{
if (!(FlashColor[deviceNum].red == 0 &&
FlashColor[deviceNum].green == 0 &&
FlashColor[deviceNum].blue == 0))
color = FlashColor[deviceNum];
if (FlashType[deviceNum] == 1)
DS4Color flashColor = getFlashColor(deviceNum);
if (!(flashColor.red == 0 &&
flashColor.green == 0 &&
flashColor.blue == 0))
color = flashColor;
if (getFlashType(deviceNum) == 1)
{
if (fadetimer[deviceNum] <= 0)
fadedirection[deviceNum] = true;
else if (fadetimer[deviceNum] >= 100)
fadedirection[deviceNum] = false;
if (fadedirection[deviceNum])
fadetimer[deviceNum] += 1;
double ratio = 0.0;
if (!fadewatches[deviceNum].IsRunning)
{
bool temp = fadedirection[deviceNum];
fadedirection[deviceNum] = !temp;
fadewatches[deviceNum].Restart();
ratio = temp ? 100.0 : 0.0;
}
else
fadetimer[deviceNum] -= 1;
color = getTransitionedColor(color, new DS4Color(0, 0, 0), fadetimer[deviceNum]);
{
long elapsed = fadewatches[deviceNum].ElapsedMilliseconds;
if (fadedirection[deviceNum])
{
if (elapsed < PULSE_FLASH_DURATION)
{
elapsed = elapsed / 40;
ratio = 100.0 * (elapsed / PULSE_FLASH_SEGMENTS);
}
else
{
ratio = 100.0;
fadewatches[deviceNum].Stop();
}
}
else
{
if (elapsed < PULSE_FLASH_DURATION)
{
elapsed = elapsed / 40;
ratio = (0 - 100.0) * (elapsed / PULSE_FLASH_SEGMENTS) + 100.0;
}
else
{
ratio = 0.0;
fadewatches[deviceNum].Stop();
}
}
}
color = getTransitionedColor(color, new DS4Color(0, 0, 0), ratio);
}
}
if (IdleDisconnectTimeout[deviceNum] > 0 && LedAsBatteryIndicator[deviceNum] && (!device.Charging || device.Battery >= 100))
{//Fade lightbar by idle time
int idleDisconnectTimeout = getIdleDisconnectTimeout(deviceNum);
if (idleDisconnectTimeout > 0 && getLedAsBatteryIndicator(deviceNum) &&
(!device.isCharging() || device.getBattery() >= 100))
{
//Fade lightbar by idle time
TimeSpan timeratio = new TimeSpan(DateTime.UtcNow.Ticks - device.lastActive.Ticks);
double botratio = timeratio.TotalMilliseconds;
double topratio = TimeSpan.FromSeconds(IdleDisconnectTimeout[deviceNum]).TotalMilliseconds;
double ratio = ((botratio / topratio) * 100);
if (ratio >= 50 && ratio <= 100)
color = getTransitionedColor(color, new DS4Color(0, 0, 0), (uint)((ratio - 50) * 2));
else if (ratio >= 100)
color = getTransitionedColor(color, new DS4Color(0, 0, 0), 100);
double topratio = TimeSpan.FromSeconds(idleDisconnectTimeout).TotalMilliseconds;
double ratio = 100.0 * (botratio / topratio), elapsed = ratio;
if (ratio >= 50.0 && ratio < 100.0)
{
color = getTransitionedColor(color, new DS4Color(0, 0, 0),
(uint)(-100.0 * (elapsed = 0.02 * (ratio - 50.0)) * (elapsed - 2.0)));
}
else if (ratio >= 100.0)
color = getTransitionedColor(color, new DS4Color(0, 0, 0), 100.0);
}
if (device.Charging && device.Battery < 100)
switch (ChargingType[deviceNum])
if (device.isCharging() && device.getBattery() < 100)
{
switch (getChargingType(deviceNum))
{
case 1:
if (fadetimer[deviceNum] <= 0)
fadedirection[deviceNum] = true;
else if (fadetimer[deviceNum] >= 105)
fadedirection[deviceNum] = false;
if (fadedirection[deviceNum])
fadetimer[deviceNum] += .1;
{
double ratio = 0.0;
if (!fadewatches[deviceNum].IsRunning)
{
bool temp = fadedirection[deviceNum];
fadedirection[deviceNum] = !temp;
fadewatches[deviceNum].Restart();
ratio = temp ? 100.0 : 0.0;
}
else
fadetimer[deviceNum] -= .1;
color = getTransitionedColor(color, new DS4Color(0, 0, 0), fadetimer[deviceNum]);
{
long elapsed = fadewatches[deviceNum].ElapsedMilliseconds;
if (fadedirection[deviceNum])
{
if (elapsed < PULSE_CHARGING_DURATION)
{
elapsed = elapsed / 40;
if (elapsed > PULSE_CHARGING_SEGMENTS)
elapsed = (long)PULSE_CHARGING_SEGMENTS;
ratio = 100.0 * (elapsed / PULSE_CHARGING_SEGMENTS);
}
else
{
ratio = 100.0;
fadewatches[deviceNum].Stop();
}
}
else
{
if (elapsed < PULSE_CHARGING_DURATION)
{
elapsed = elapsed / 40;
if (elapsed > PULSE_CHARGING_SEGMENTS)
elapsed = (long)PULSE_CHARGING_SEGMENTS;
ratio = (0 - 100.0) * (elapsed / PULSE_CHARGING_SEGMENTS) + 100.0;
}
else
{
ratio = 0.0;
fadewatches[deviceNum].Stop();
}
}
}
color = getTransitionedColor(color, new DS4Color(0, 0, 0), ratio);
break;
}
case 2:
counters[deviceNum] += .167;
{
counters[deviceNum] += 0.167;
color = HuetoRGB((float)counters[deviceNum] % 360, 255);
break;
}
case 3:
color = ChargingColor[deviceNum];
break;
default:
{
color = getChargingColor(deviceNum);
break;
}
default: break;
}
}
}
else if (forcelight[deviceNum])
{
@ -150,25 +243,30 @@ namespace DS4Windows
color = new DS4Color(0, 0, 0);
else
{
if (device.ConnectionType == ConnectionType.BT)
if (device.getConnectionType() == ConnectionType.BT)
color = new DS4Color(32, 64, 64);
else
color = new DS4Color(0, 0, 0);
}
bool distanceprofile = (ProfilePath[deviceNum].ToLower().Contains("distance") || tempprofilename[deviceNum].ToLower().Contains("distance"));
if (distanceprofile && !defualtLight)
{ //Thing I did for Distance
float rumble = device.LeftHeavySlowRumble / 2.55f;
bool distanceprofile = DistanceProfiles[deviceNum] || tempprofileDistance[deviceNum];
//distanceprofile = (ProfilePath[deviceNum].ToLower().Contains("distance") || tempprofilename[deviceNum].ToLower().Contains("distance"));
if (distanceprofile && !defaultLight)
{
// Thing I did for Distance
float rumble = device.getLeftHeavySlowRumble() / 2.55f;
byte max = Max(color.red, Max(color.green, color.blue));
if (device.LeftHeavySlowRumble > 100)
if (device.getLeftHeavySlowRumble() > 100)
color = getTransitionedColor(new DS4Color(max, max, 0), new DS4Color(255, 0, 0), rumble);
else
color = getTransitionedColor(color, getTransitionedColor(new DS4Color(max, max, 0), new DS4Color(255, 0, 0), 39.6078f), device.LeftHeavySlowRumble);
color = getTransitionedColor(color, getTransitionedColor(new DS4Color(max, max, 0), new DS4Color(255, 0, 0), 39.6078f), device.getLeftHeavySlowRumble());
}
DS4HapticState haptics = new DS4HapticState
{
LightBarColor = color
};
if (haptics.IsLightBarSet())
{
if (forcelight[deviceNum] && forcedFlash[deviceNum] > 0)
@ -176,17 +274,18 @@ namespace DS4Windows
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = (byte)(25 - forcedFlash[deviceNum]);
haptics.LightBarExplicitlyOff = true;
}
else if (device.Battery <= FlashAt[deviceNum] && FlashType[deviceNum] == 0 && !defualtLight && !device.Charging)
else if (device.getBattery() <= getFlashAt(deviceNum) && getFlashType(deviceNum) == 0 && !defaultLight && !device.isCharging())
{
int level = device.Battery / 10;
//if (level >= 10)
//level = 0; // all values of ~0% or >~100% are rendered the same
int level = device.getBattery() / 10;
if (level >= 10)
level = 0; // all values of ~0% or >~100% are rendered the same
haptics.LightBarFlashDurationOn = BatteryIndicatorDurations[level, 0];
haptics.LightBarFlashDurationOff = BatteryIndicatorDurations[level, 1];
}
else if (distanceprofile && device.LeftHeavySlowRumble > 155) //also part of Distance
else if (distanceprofile && device.getLeftHeavySlowRumble() > 155) //also part of Distance
{
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = (byte)((-device.LeftHeavySlowRumble + 265));
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = (byte)((-device.getLeftHeavySlowRumble() + 265));
haptics.LightBarExplicitlyOff = true;
}
else
@ -200,14 +299,15 @@ namespace DS4Windows
{
haptics.LightBarExplicitlyOff = true;
}
if (device.LightBarOnDuration != haptics.LightBarFlashDurationOn && device.LightBarOnDuration != 1 && haptics.LightBarFlashDurationOn == 0)
byte tempLightBarOnDuration = device.getLightBarOnDuration();
if (tempLightBarOnDuration != haptics.LightBarFlashDurationOn && tempLightBarOnDuration != 1 && haptics.LightBarFlashDurationOn == 0)
haptics.LightBarFlashDurationOff = haptics.LightBarFlashDurationOn = 1;
if (device.LightBarOnDuration == 1) //helps better reset the color
System.Threading.Thread.Sleep(5);
device.pushHapticState(haptics);
device.pushHapticState(ref haptics);
}
public static bool defualtLight = false, shuttingdown = false;
public static bool defaultLight = false, shuttingdown = false;
public static DS4Color HuetoRGB(float hue, byte sat)
{

View File

@ -0,0 +1,155 @@

namespace DS4Windows
{
public class DS4StateFieldMapping
{
public enum ControlType: int { Unknown = 0, Button, AxisDir, Trigger, Touch, GyroDir, SwipeDir }
public bool[] buttons = new bool[(int)DS4Controls.SwipeDown + 1];
public byte[] axisdirs = new byte[(int)DS4Controls.SwipeDown + 1];
public byte[] triggers = new byte[(int)DS4Controls.SwipeDown + 1];
public int[] gryodirs = new int[(int)DS4Controls.SwipeDown + 1];
public byte[] swipedirs = new byte[(int)DS4Controls.SwipeDown + 1];
public bool[] swipedirbools = new bool[(int)DS4Controls.SwipeDown + 1];
public static ControlType[] mappedType = new ControlType[38] { ControlType.Unknown, // DS4Controls.None
ControlType.AxisDir, // DS4Controls.LXNeg
ControlType.AxisDir, // DS4Controls.LXPos
ControlType.AxisDir, // DS4Controls.LYNeg
ControlType.AxisDir, // DS4Controls.LYPos
ControlType.AxisDir, // DS4Controls.RXNeg
ControlType.AxisDir, // DS4Controls.RXPos
ControlType.AxisDir, // DS4Controls.RYNeg
ControlType.AxisDir, // DS4Controls.RYPos
ControlType.Button, // DS4Controls.L1
ControlType.Trigger, // DS4Controls.L2
ControlType.Button, // DS4Controls.L3
ControlType.Button, // DS4Controls.R1
ControlType.Trigger, // DS4Controls.R2
ControlType.Button, // DS4Controls.R3
ControlType.Button, // DS4Controls.Square
ControlType.Button, // DS4Controls.Triangle
ControlType.Button, // DS4Controls.Circle
ControlType.Button, // DS4Controls.Cross
ControlType.Button, // DS4Controls.DpadUp
ControlType.Button, // DS4Controls.DpadRight
ControlType.Button, // DS4Controls.DpadDown
ControlType.Button, // DS4Controls.DpadLeft
ControlType.Button, // DS4Controls.PS
ControlType.Touch, // DS4Controls.TouchLeft
ControlType.Touch, // DS4Controls.TouchUpper
ControlType.Touch, // DS4Controls.TouchMulti
ControlType.Touch, // DS4Controls.TouchRight
ControlType.Button, // DS4Controls.Share
ControlType.Button, // DS4Controls.Options
ControlType.GyroDir, // DS4Controls.GyroXPos
ControlType.GyroDir, // DS4Controls.GyroXNeg
ControlType.GyroDir, // DS4Controls.GyroZPos
ControlType.GyroDir, // DS4Controls.GyroZNeg
ControlType.SwipeDir, // DS4Controls.SwipeLeft
ControlType.SwipeDir, // DS4Controls.SwipeRight
ControlType.SwipeDir, // DS4Controls.SwipeUp
ControlType.SwipeDir, // DS4Controls.SwipeDown
};
public DS4StateFieldMapping()
{
}
public DS4StateFieldMapping(DS4State cState, DS4StateExposed exposeState, Mouse tp, bool priorMouse=false)
{
populateFieldMapping(cState, exposeState, tp, priorMouse);
}
public void populateFieldMapping(DS4State cState, DS4StateExposed exposeState, Mouse tp, bool priorMouse = false)
{
axisdirs[(int)DS4Controls.LXNeg] = cState.LX;
axisdirs[(int)DS4Controls.LXPos] = cState.LX;
axisdirs[(int)DS4Controls.LYNeg] = cState.LY;
axisdirs[(int)DS4Controls.LYPos] = cState.LY;
axisdirs[(int)DS4Controls.RXNeg] = cState.RX;
axisdirs[(int)DS4Controls.RXPos] = cState.RX;
axisdirs[(int)DS4Controls.RYNeg] = cState.RY;
axisdirs[(int)DS4Controls.RYPos] = cState.RY;
triggers[(int)DS4Controls.L2] = cState.L2;
triggers[(int)DS4Controls.R2] = cState.R2;
buttons[(int)DS4Controls.L1] = cState.L1;
buttons[(int)DS4Controls.L3] = cState.L3;
buttons[(int)DS4Controls.R1] = cState.R1;
buttons[(int)DS4Controls.R3] = cState.R3;
buttons[(int)DS4Controls.Cross] = cState.Cross;
buttons[(int)DS4Controls.Triangle] = cState.Triangle;
buttons[(int)DS4Controls.Circle] = cState.Circle;
buttons[(int)DS4Controls.Square] = cState.Square;
buttons[(int)DS4Controls.PS] = cState.PS;
buttons[(int)DS4Controls.Options] = cState.Options;
buttons[(int)DS4Controls.Share] = cState.Share;
buttons[(int)DS4Controls.DpadUp] = cState.DpadUp;
buttons[(int)DS4Controls.DpadRight] = cState.DpadRight;
buttons[(int)DS4Controls.DpadDown] = cState.DpadDown;
buttons[(int)DS4Controls.DpadLeft] = cState.DpadLeft;
buttons[(int)DS4Controls.TouchLeft] = tp != null ? (!priorMouse ? tp.leftDown : tp.priorLeftDown) : false;
buttons[(int)DS4Controls.TouchRight] = tp != null ? (!priorMouse ? tp.rightDown : tp.priorRightDown) : false;
buttons[(int)DS4Controls.TouchUpper] = tp != null ? (!priorMouse ? tp.upperDown : tp.priorUpperDown) : false;
buttons[(int)DS4Controls.TouchMulti] = tp != null ? (!priorMouse ? tp.multiDown : tp.priorMultiDown) : false;
int sixAxisX = -exposeState.getOutputAccelX();
gryodirs[(int)DS4Controls.GyroXPos] = sixAxisX > 0 ? sixAxisX : 0;
gryodirs[(int)DS4Controls.GyroXNeg] = sixAxisX < 0 ? sixAxisX : 0;
int sixAxisZ = exposeState.getOutputAccelZ();
gryodirs[(int)DS4Controls.GyroZPos] = sixAxisZ > 0 ? sixAxisZ : 0;
gryodirs[(int)DS4Controls.GyroZNeg] = sixAxisZ < 0 ? sixAxisZ : 0;
swipedirs[(int)DS4Controls.SwipeLeft] = tp != null ? (!priorMouse ? tp.swipeLeftB : tp.priorSwipeLeftB) : (byte)0;
swipedirs[(int)DS4Controls.SwipeRight] = tp != null ? (!priorMouse ? tp.swipeRightB : tp.priorSwipeRightB) : (byte)0;
swipedirs[(int)DS4Controls.SwipeUp] = tp != null ? (!priorMouse ? tp.swipeUpB : tp.priorSwipeUpB) : (byte)0;
swipedirs[(int)DS4Controls.SwipeDown] = tp != null ? (!priorMouse ? tp.swipeDownB : tp.priorSwipeDownB) : (byte)0;
swipedirbools[(int)DS4Controls.SwipeLeft] = tp != null ? (!priorMouse ? tp.swipeLeft : tp.priorSwipeLeft) : false;
swipedirbools[(int)DS4Controls.SwipeRight] = tp != null ? (!priorMouse ? tp.swipeRight : tp.priorSwipeRight) : false;
swipedirbools[(int)DS4Controls.SwipeUp] = tp != null ? (!priorMouse ? tp.swipeUp : tp.priorSwipeUp) : false;
swipedirbools[(int)DS4Controls.SwipeDown] = tp != null ? (!priorMouse ? tp.swipeDown : tp.priorSwipeDown) : false;
}
public void populateState(DS4State state)
{
state.LX = axisdirs[(int)DS4Controls.LXNeg];
state.LX = axisdirs[(int)DS4Controls.LXPos];
state.LY = axisdirs[(int)DS4Controls.LYNeg];
state.LY = axisdirs[(int)DS4Controls.LYPos];
state.RX = axisdirs[(int)DS4Controls.RXNeg];
state.RX = axisdirs[(int)DS4Controls.RXPos];
state.RY = axisdirs[(int)DS4Controls.RYNeg];
state.RY = axisdirs[(int)DS4Controls.RYPos];
state.L2 = triggers[(int)DS4Controls.L2];
state.R2 = triggers[(int)DS4Controls.R2];
state.L1 = buttons[(int)DS4Controls.L1];
state.L3 = buttons[(int)DS4Controls.L3];
state.R1 = buttons[(int)DS4Controls.R1];
state.R3 = buttons[(int)DS4Controls.R3];
state.Cross = buttons[(int)DS4Controls.Cross];
state.Triangle = buttons[(int)DS4Controls.Triangle];
state.Circle = buttons[(int)DS4Controls.Circle];
state.Square = buttons[(int)DS4Controls.Square];
state.PS = buttons[(int)DS4Controls.PS];
state.Options = buttons[(int)DS4Controls.Options];
state.Share = buttons[(int)DS4Controls.Share];
state.DpadUp = buttons[(int)DS4Controls.DpadUp];
state.DpadRight = buttons[(int)DS4Controls.DpadRight];
state.DpadDown = buttons[(int)DS4Controls.DpadDown];
state.DpadLeft = buttons[(int)DS4Controls.DpadLeft];
}
}
}

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DS4Windows
{

View File

@ -1,14 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace DS4Windows
{
class InputMethods
{
private static INPUT[] sendInputs = new INPUT[2]; // will allow for keyboard + mouse/tablet input within one SendInput call, or two mouse events
private static object lockob = new object();
public static void MoveCursorBy(int x, int y)
{
lock (lockob)
@ -43,6 +42,7 @@ namespace DS4Windows
sendInputs[inputs].Data.Mouse.Y = 0;
inputs++;
}
if (horizontal != 0)
{
sendInputs[inputs].Type = INPUT_MOUSE;
@ -54,6 +54,7 @@ namespace DS4Windows
sendInputs[inputs].Data.Mouse.Y = 0;
inputs++;
}
SendInput(inputs, sendInputs, (int)inputs * Marshal.SizeOf(sendInputs[0]));
}
}
@ -88,69 +89,6 @@ namespace DS4Windows
}
}
public static void performLeftClick()
{
lock (lockob)
{
sendInputs[0].Type = INPUT_MOUSE;
sendInputs[0].Data.Mouse.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Mouse.Flags = 0;
sendInputs[0].Data.Mouse.Flags |= MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
sendInputs[0].Data.Mouse.MouseData = 0;
sendInputs[0].Data.Mouse.Time = 0;
sendInputs[0].Data.Mouse.X = 0;
sendInputs[0].Data.Mouse.Y = 0;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
}
}
public static void performRightClick()
{
lock (lockob)
{
sendInputs[0].Type = INPUT_MOUSE;
sendInputs[0].Data.Mouse.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Mouse.Flags = 0;
sendInputs[0].Data.Mouse.Flags |= MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP;
sendInputs[0].Data.Mouse.MouseData = 0;
sendInputs[0].Data.Mouse.Time = 0;
sendInputs[0].Data.Mouse.X = 0;
sendInputs[0].Data.Mouse.Y = 0;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
}
}
public static void performMiddleClick()
{
lock (lockob)
{
sendInputs[0].Type = INPUT_MOUSE;
sendInputs[0].Data.Mouse.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Mouse.Flags = 0;
sendInputs[0].Data.Mouse.Flags |= MOUSEEVENTF_MIDDLEDOWN | MOUSEEVENTF_MIDDLEUP;
sendInputs[0].Data.Mouse.MouseData = 0;
sendInputs[0].Data.Mouse.Time = 0;
sendInputs[0].Data.Mouse.X = 0;
sendInputs[0].Data.Mouse.Y = 0;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
}
}
public static void performFourthClick()
{
lock (lockob)
{
sendInputs[0].Type = INPUT_MOUSE;
sendInputs[0].Data.Mouse.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Mouse.Flags = 0;
sendInputs[0].Data.Mouse.Flags |= MOUSEEVENTF_XBUTTONDOWN | MOUSEEVENTF_XBUTTONUP;
sendInputs[0].Data.Mouse.MouseData = 1;
sendInputs[0].Data.Mouse.Time = 0;
sendInputs[0].Data.Mouse.X = 0;
sendInputs[0].Data.Mouse.Y = 0;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
}
}
public static void performSCKeyPress(ushort key)
{
lock (lockob)
@ -169,10 +107,16 @@ namespace DS4Windows
{
lock (lockob)
{
ushort scancode = scancodeFromVK(key);
bool extended = (scancode & 0x100) != 0;
uint curflags = extended ? KEYEVENTF_EXTENDEDKEY : 0;
sendInputs[0].Type = INPUT_KEYBOARD;
sendInputs[0].Data.Keyboard.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Keyboard.Flags = 1;
sendInputs[0].Data.Keyboard.Scan = 0;
sendInputs[0].Data.Keyboard.Flags = curflags;
sendInputs[0].Data.Keyboard.Scan = scancode;
//sendInputs[0].Data.Keyboard.Flags = 1;
//sendInputs[0].Data.Keyboard.Scan = 0;
sendInputs[0].Data.Keyboard.Time = 0;
sendInputs[0].Data.Keyboard.Vk = key;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
@ -197,16 +141,71 @@ namespace DS4Windows
{
lock (lockob)
{
ushort scancode = scancodeFromVK(key);
bool extended = (scancode & 0x100) != 0;
uint curflags = extended ? KEYEVENTF_EXTENDEDKEY : 0;
sendInputs[0].Type = INPUT_KEYBOARD;
sendInputs[0].Data.Keyboard.ExtraInfo = IntPtr.Zero;
sendInputs[0].Data.Keyboard.Flags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
sendInputs[0].Data.Keyboard.Scan = 0;
sendInputs[0].Data.Keyboard.Flags = curflags | KEYEVENTF_KEYUP;
sendInputs[0].Data.Keyboard.Scan = scancode;
//sendInputs[0].Data.Keyboard.Flags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP;
//sendInputs[0].Data.Keyboard.Scan = 0;
sendInputs[0].Data.Keyboard.Time = 0;
sendInputs[0].Data.Keyboard.Vk = key;
uint result = SendInput(1, sendInputs, Marshal.SizeOf(sendInputs[0]));
}
}
private static ushort scancodeFromVK(uint vkey)
{
ushort scancode = 0;
if (vkey == VK_PAUSE)
{
// MapVirtualKey does not work with VK_PAUSE
scancode = 0x45;
}
else
{
scancode = MapVirtualKey(vkey, MAPVK_VK_TO_VSC);
}
switch (vkey)
{
case VK_LEFT:
case VK_UP:
case VK_RIGHT:
case VK_DOWN:
case VK_PRIOR:
case VK_NEXT:
case VK_END:
case VK_HOME:
case VK_INSERT:
case VK_DELETE:
case VK_DIVIDE:
case VK_NUMLOCK:
case VK_RCONTROL:
case VK_RMENU:
case VK_VOLUME_MUTE:
case VK_VOLUME_DOWN:
case VK_VOLUME_UP:
case VK_MEDIA_NEXT_TRACK:
case VK_MEDIA_PREV_TRACK:
case VK_LAUNCH_MEDIA_SELECT:
case VK_BROWSER_HOME:
case VK_LAUNCH_MAIL:
case VK_LAUNCH_APP1:
case VK_LAUNCH_APP2:
case VK_APPS:
{
scancode |= (ushort)EXTENDED_FLAG; // set extended bit
break;
}
}
return scancode;
}
/// <summary>
/// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646270(v=vs.85).aspx
/// </summary>
@ -277,7 +276,14 @@ namespace DS4Windows
MOUSEEVENTF_XBUTTONDOWN = 128, MOUSEEVENTF_XBUTTONUP = 256,
KEYEVENTF_EXTENDEDKEY = 1, KEYEVENTF_KEYUP = 2, MOUSEEVENTF_WHEEL = 0x0800, MOUSEEVENTF_HWHEEL = 0x1000,
MOUSEEVENTF_MIDDLEWDOWN = 0x0020, MOUSEEVENTF_MIDDLEWUP = 0x0040,
KEYEVENTF_SCANCODE = 0x0008, MAPVK_VK_TO_VSC = 0, KEYEVENTF_UNICODE = 0x0004;
KEYEVENTF_SCANCODE = 0x0008, MAPVK_VK_TO_VSC = 0, KEYEVENTF_UNICODE = 0x0004, EXTENDED_FLAG = 0x100;
internal const uint VK_PAUSE = 0x13, VK_LEFT = 0x25, VK_UP = 0x26, VK_RIGHT = 0x27, VK_DOWN = 0x28,
VK_PRIOR = 0x21, VK_NEXT = 0x22, VK_END = 0x23, VK_HOME = 0x24, VK_INSERT = 0x2D, VK_DELETE = 0x2E, VK_APPS = 0x5D,
VK_DIVIDE = 0x6F, VK_NUMLOCK = 0x90, VK_RCONTROL = 0xA3, VK_RMENU = 0xA5, VK_BROWSER_HOME = 0xAC,
VK_VOLUME_MUTE = 0xAD, VK_VOLUME_DOWN = 0xAE, VK_VOLUME_UP = 0xAF,
VK_MEDIA_NEXT_TRACK = 0xB0, VK_MEDIA_PREV_TRACK = 0xB1, VK_MEDIA_STOP = 0xB2, VK_MEDIA_PLAY_PAUSE = 0xB3,
VK_LAUNCH_MAIL = 0xB4, VK_LAUNCH_MEDIA_SELECT = 0xB5, VK_LAUNCH_APP1 = 0xB6, VK_LAUNCH_APP2 = 0xB7;
[DllImport("user32.dll", SetLastError = true)]
private static extern uint SendInput(uint numberOfInputs, INPUT[] inputs, int sizeOfInputs);
@ -285,6 +291,7 @@ namespace DS4Windows
private static extern ushort MapVirtualKey(uint uCode, uint uMapType);
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
//Not used, just here
public static void DownKeys(ushort key)
{
@ -301,5 +308,5 @@ namespace DS4Windows
keybd_event((byte)key, 0, (int)KEYEVENTF_KEYUP, 0);
}
}
}

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DS4Windows
{

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace DS4Windows
{
@ -17,35 +13,83 @@ namespace DS4Windows
private readonly MouseWheel wheel;
private bool tappedOnce = false, secondtouchbegin = false;
public bool swipeLeft, swipeRight, swipeUp, swipeDown;
public bool priorSwipeLeft, priorSwipeRight, priorSwipeUp, priorSwipeDown;
public byte swipeLeftB, swipeRightB, swipeUpB, swipeDownB, swipedB;
public byte priorSwipeLeftB, priorSwipeRightB, priorSwipeUpB, priorSwipeDownB, priorSwipedB;
public bool slideleft, slideright;
public bool priorSlideLeft, priorSlideright;
// touch area stuff
public bool leftDown, rightDown, upperDown, multiDown;
public bool priorLeftDown, priorRightDown, priorUpperDown, priorMultiDown;
protected DS4Controls pushed = DS4Controls.None;
protected Mapping.Click clicked = Mapping.Click.None;
internal const int TRACKBALL_INIT_FICTION = 10;
internal const int TRACKBALL_MASS = 45;
internal const double TRACKBALL_RADIUS = 0.0245;
private double TRACKBALL_INERTIA = 2.0 * (TRACKBALL_MASS * TRACKBALL_RADIUS * TRACKBALL_RADIUS) / 5.0;
private double TRACKBALL_SCALE = 0.004;
private const int TRACKBALL_BUFFER_LEN = 8;
private double[] trackballXBuffer = new double[TRACKBALL_BUFFER_LEN];
private double[] trackballYBuffer = new double[TRACKBALL_BUFFER_LEN];
private int trackballBufferTail = 0;
private int trackballBufferHead = 0;
private double trackballAccel = 0.0;
private double trackballXVel = 0.0;
private double trackballYVel = 0.0;
private bool trackballActive = false;
private double trackballDXRemain = 0.0;
private double trackballDYRemain = 0.0;
public Mouse(int deviceID, DS4Device d)
{
deviceNum = deviceID;
dev = d;
cursor = new MouseCursor(deviceNum);
wheel = new MouseWheel(deviceNum);
trackballAccel = TRACKBALL_RADIUS * TRACKBALL_INIT_FICTION / TRACKBALL_INERTIA;
firstTouch = new Touch(0, 0, 0, null);
}
public void ResetTrackAccel(double friction)
{
trackballAccel = TRACKBALL_RADIUS * friction / TRACKBALL_INERTIA;
}
bool triggeractivated = false;
bool useReverseRatchet = false;
public virtual void sixaxisMoved(object sender, SixAxisEventArgs arg)
{
if (Global.UseSAforMouse[deviceNum] && Global.GyroSensitivity[deviceNum] > 0)
if (Global.isUsingSAforMouse(deviceNum) && Global.getGyroSensitivity(deviceNum) > 0)
{
bool triggeractivated = true;
s = dev.getCurrentStateRef();
triggeractivated = true;
useReverseRatchet = Global.getGyroTriggerTurns(deviceNum);
int i = 0;
string[] ss = Global.SATriggers[deviceNum].Split(',');
string[] ss = Global.getSATriggers(deviceNum).Split(',');
if (!string.IsNullOrEmpty(ss[0]))
foreach (string s in ss)
{
string s = string.Empty;
for (int index = 0, arlen = ss.Length;
triggeractivated && index < arlen; index++)
{
s = ss[index];
if (!(int.TryParse(s, out i) && getDS4ControlsByName(i)))
{
triggeractivated = false;
if (triggeractivated)
}
}
}
if (useReverseRatchet && triggeractivated)
cursor.sixaxisMoved(arg);
dev.getCurrentState(s);
else if (!useReverseRatchet && !triggeractivated)
cursor.sixaxisMoved(arg);
else
cursor.mouseRemainderReset();
}
}
@ -68,20 +112,43 @@ namespace DS4Windows
case 11: return s.DpadRight;
case 12: return s.L3;
case 13: return s.R3;
case 14: return s.Touch1;
case 15: return s.Touch2;
case 14: return s.Touch1Finger;
case 15: return s.Touch2Fingers;
case 16: return s.Options;
case 17: return s.Share;
case 18: return s.PS;
default: break;
}
return false;
}
private bool tempBool = false;
public virtual void touchesMoved(object sender, TouchpadEventArgs arg)
{
if (!Global.UseTPforControls[deviceNum])
s = dev.getCurrentStateRef();
if (Global.getUseTPforControls(deviceNum) == false)
{
cursor.touchesMoved(arg, dragging || dragging2);
int[] disArray = Global.getTouchDisInvertTriggers(deviceNum);
tempBool = true;
for (int i = 0, arlen = disArray.Length; tempBool && i < arlen; i++)
{
if (getDS4ControlsByName(disArray[i]) == false)
tempBool = false;
}
if (Global.getTrackballMode(deviceNum))
{
int iIndex = trackballBufferTail;
trackballXBuffer[iIndex] = (arg.touches[0].deltaX * TRACKBALL_SCALE) / dev.getCurrentStateRef().elapsedTime;
trackballYBuffer[iIndex] = (arg.touches[0].deltaY * TRACKBALL_SCALE) / dev.getCurrentStateRef().elapsedTime;
trackballBufferTail = (iIndex + 1) % TRACKBALL_BUFFER_LEN;
if (trackballBufferHead == trackballBufferTail)
trackballBufferHead = (trackballBufferHead + 1) % TRACKBALL_BUFFER_LEN;
}
cursor.touchesMoved(arg, dragging || dragging2, tempBool);
wheel.touchesMoved(arg, dragging || dragging2);
}
else
@ -93,54 +160,78 @@ namespace DS4Windows
if (arg.touches[0].hwY - firstTouch.hwY > 300) swipeDown = true;
if (arg.touches[0].hwY - firstTouch.hwY < -300) swipeUp = true;
}
swipeUpB = (byte)Math.Min(255, Math.Max(0, (firstTouch.hwY - arg.touches[0].hwY) * 1.5f));
swipeDownB = (byte)Math.Min(255, Math.Max(0, (arg.touches[0].hwY - firstTouch.hwY) * 1.5f));
swipeLeftB = (byte)Math.Min(255, Math.Max(0, firstTouch.hwX - arg.touches[0].hwX));
swipeRightB = (byte)Math.Min(255, Math.Max(0, arg.touches[0].hwX - firstTouch.hwX));
}
if (Math.Abs(firstTouch.hwY - arg.touches[0].hwY) < 50 && arg.touches.Length == 2)
{
if (arg.touches[0].hwX - firstTouch.hwX > 200 && !slideleft)
slideright = true;
else if (firstTouch.hwX - arg.touches[0].hwX > 200 && !slideright)
slideleft = true;
dev.getCurrentState(s);
}
synthesizeMouseButtons();
}
public virtual void touchesBegan(object sender, TouchpadEventArgs arg)
{
if (!Global.UseTPforControls[deviceNum])
{
Array.Clear(trackballXBuffer, 0, TRACKBALL_BUFFER_LEN);
Array.Clear(trackballXBuffer, 0, TRACKBALL_BUFFER_LEN);
trackballXVel = 0.0;
trackballYVel = 0.0;
trackballActive = false;
trackballBufferTail = 0;
trackballBufferHead = 0;
trackballDXRemain = 0.0;
trackballDYRemain = 0.0;
cursor.touchesBegan(arg);
wheel.touchesBegan(arg);
}
pastTime = arg.timeStamp;
firstTouch = arg.touches[0];
if (Global.DoubleTap[deviceNum])
firstTouch.populate(arg.touches[0].hwX, arg.touches[0].hwY, arg.touches[0].touchID,
arg.touches[0].previousTouch);
if (Global.getDoubleTap(deviceNum))
{
DateTime test = arg.timeStamp;
if (test <= (firstTap + TimeSpan.FromMilliseconds((double)Global.TapSensitivity[deviceNum] * 1.5)) && !arg.touchButtonPressed)
secondtouchbegin = true;
}
dev.getCurrentState(s);
s = dev.getCurrentStateRef();
synthesizeMouseButtons();
}
public virtual void touchesEnded(object sender, TouchpadEventArgs arg)
{
s = dev.getCurrentStateRef();
slideright = slideleft = false;
swipeUp = swipeDown = swipeLeft = swipeRight = false;
swipeUpB = swipeDownB = swipeLeftB = swipeRightB = 0;
if (Global.TapSensitivity[deviceNum] != 0 && !Global.UseTPforControls[deviceNum])
byte tapSensitivity = Global.getTapSensitivity(deviceNum);
if (tapSensitivity != 0 && !Global.getUseTPforControls(deviceNum))
{
if (secondtouchbegin)
{
tappedOnce = false;
secondtouchbegin = false;
}
DateTime test = arg.timeStamp;
if (test <= (pastTime + TimeSpan.FromMilliseconds((double)Global.TapSensitivity[deviceNum] * 2)) && !arg.touchButtonPressed && !tappedOnce)
if (test <= (pastTime + TimeSpan.FromMilliseconds((double)tapSensitivity * 2)) && !arg.touchButtonPressed && !tappedOnce)
{
if (Math.Abs(firstTouch.hwX - arg.touches[0].hwX) < 10 && Math.Abs(firstTouch.hwY - arg.touches[0].hwY) < 10)
if (Global.DoubleTap[deviceNum])
{
if (Global.getDoubleTap(deviceNum))
{
tappedOnce = true;
firstTap = arg.timeStamp;
@ -148,8 +239,97 @@ namespace DS4Windows
}
else
Mapping.MapClick(deviceNum, Mapping.Click.Left); //this way no delay if disabled
}
}
}
dev.getCurrentState(s);
else
{
if (Global.getUseTPforControls(deviceNum) == false)
{
int[] disArray = Global.getTouchDisInvertTriggers(deviceNum);
tempBool = true;
for (int i = 0, arlen = disArray.Length; tempBool && i < arlen; i++)
{
if (getDS4ControlsByName(disArray[i]) == false)
tempBool = false;
}
if (Global.getTrackballMode(deviceNum))
{
if (!trackballActive)
{
double currentWeight = 1.0;
double finalWeight = 0.0;
double x_out = 0.0, y_out = 0.0;
int idx = -1;
for (int i = 0; i < TRACKBALL_BUFFER_LEN && idx != trackballBufferHead; i++)
{
idx = (trackballBufferTail - i - 1 + TRACKBALL_BUFFER_LEN) % TRACKBALL_BUFFER_LEN;
x_out += trackballXBuffer[idx] * currentWeight;
y_out += trackballYBuffer[idx] * currentWeight;
finalWeight += currentWeight;
currentWeight *= 1.0;
}
x_out /= finalWeight;
trackballXVel = x_out;
y_out /= finalWeight;
trackballYVel = y_out;
trackballActive = true;
}
double tempAngle = Math.Atan2(-trackballYVel, trackballXVel);
double normX = Math.Abs(Math.Cos(tempAngle));
double normY = Math.Abs(Math.Sin(tempAngle));
int signX = Math.Sign(trackballXVel);
int signY = Math.Sign(trackballYVel);
double trackXvDecay = Math.Min(Math.Abs(trackballXVel), trackballAccel * s.elapsedTime * normX);
double trackYvDecay = Math.Min(Math.Abs(trackballYVel), trackballAccel * s.elapsedTime * normY);
double xVNew = trackballXVel - (trackXvDecay * signX);
double yVNew = trackballYVel - (trackYvDecay * signY);
double xMotion = (xVNew * s.elapsedTime) / TRACKBALL_SCALE;
double yMotion = (yVNew * s.elapsedTime) / TRACKBALL_SCALE;
if (xMotion != 0.0)
{
xMotion += trackballDXRemain;
}
else
{
trackballDXRemain = 0.0;
}
int dx = (int)xMotion;
trackballDXRemain = xMotion - dx;
if (yMotion != 0.0)
{
yMotion += trackballDYRemain;
}
else
{
trackballDYRemain = 0.0;
}
int dy = (int)yMotion;
trackballDYRemain = yMotion - dy;
trackballXVel = xVNew;
trackballYVel = yVNew;
if (dx == 0 && dy == 0)
{
trackballActive = false;
}
else
{
cursor.TouchMoveCursor(dx, dy, tempBool);
}
}
}
}
synthesizeMouseButtons();
}
@ -165,28 +345,95 @@ namespace DS4Windows
public virtual void touchUnchanged(object sender, EventArgs unused)
{
dev.getCurrentState(s);
//if (s.Touch1 || s.Touch2 || s.TouchButton)
synthesizeMouseButtons();
s = dev.getCurrentStateRef();
if (trackballActive)
{
if (Global.getUseTPforControls(deviceNum) == false)
{
int[] disArray = Global.getTouchDisInvertTriggers(deviceNum);
tempBool = true;
for (int i = 0, arlen = disArray.Length; tempBool && i < arlen; i++)
{
if (getDS4ControlsByName(disArray[i]) == false)
tempBool = false;
}
double tempAngle = Math.Atan2(-trackballYVel, trackballXVel);
double normX = Math.Abs(Math.Cos(tempAngle));
double normY = Math.Abs(Math.Sin(tempAngle));
int signX = Math.Sign(trackballXVel);
int signY = Math.Sign(trackballYVel);
double trackXvDecay = Math.Min(Math.Abs(trackballXVel), trackballAccel * s.elapsedTime * normX);
double trackYvDecay = Math.Min(Math.Abs(trackballYVel), trackballAccel * s.elapsedTime * normY);
double xVNew = trackballXVel - (trackXvDecay * signX);
double yVNew = trackballYVel - (trackYvDecay * signY);
double xMotion = (xVNew * s.elapsedTime) / TRACKBALL_SCALE;
double yMotion = (yVNew * s.elapsedTime) / TRACKBALL_SCALE;
if (xMotion != 0.0)
{
xMotion += trackballDXRemain;
}
else
{
trackballDXRemain = 0.0;
}
int dx = (int)xMotion;
trackballDXRemain = xMotion - dx;
if (yMotion != 0.0)
{
yMotion += trackballDYRemain;
}
else
{
trackballDYRemain = 0.0;
}
int dy = (int)yMotion;
trackballDYRemain = yMotion - dy;
trackballXVel = xVNew;
trackballYVel = yVNew;
if (dx == 0 && dy == 0)
{
trackballActive = false;
}
else
{
cursor.TouchMoveCursor(dx, dy, tempBool);
}
}
}
if (s.TouchButton)
synthesizeMouseButtons();
}
private DS4State remapped = new DS4State();
public bool dragging, dragging2;
private void synthesizeMouseButtons()
{
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchLeft.ToString(), false) == null && leftDown)
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchLeft, false) == null && leftDown)
{
Mapping.MapClick(deviceNum, Mapping.Click.Left);
dragging2 = true;
}
else
{
dragging2 = false;
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchUpper.ToString(), false) == null && upperDown)
}
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchUpper, false) == null && upperDown)
Mapping.MapClick(deviceNum, Mapping.Click.Middle);
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchRight.ToString(), false) == null && rightDown)
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchRight, false) == null && rightDown)
Mapping.MapClick(deviceNum, Mapping.Click.Left);
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchMulti.ToString(), false) == null && multiDown)
if (Global.GetDS4Action(deviceNum, DS4Controls.TouchMulti, false) == null && multiDown)
Mapping.MapClick(deviceNum, Mapping.Click.Right);
if (!Global.UseTPforControls[deviceNum])
{
if (tappedOnce)
@ -205,10 +452,10 @@ namespace DS4Windows
dragging = true;
}
else
{
dragging = false;
}
}
s = remapped;
//remapped.CopyTo(s);
}
public virtual void touchButtonUp(object sender, TouchpadEventArgs arg)
@ -216,7 +463,7 @@ namespace DS4Windows
pushed = DS4Controls.None;
upperDown = leftDown = rightDown = multiDown = false;
dev.setRumble(0, 0);
dev.getCurrentState(s);
s = dev.getCurrentStateRef();
if (s.Touch1 || s.Touch2)
synthesizeMouseButtons();
}
@ -231,15 +478,30 @@ namespace DS4Windows
{
if ((Global.LowerRCOn[deviceNum] && arg.touches[0].hwX > (1920 * 3) / 4 && arg.touches[0].hwY > (960 * 3) / 4))
Mapping.MapClick(deviceNum, Mapping.Click.Right);
if (isLeft(arg.touches[0]))
leftDown = true;
else if (isRight(arg.touches[0]))
rightDown = true;
}
dev.getCurrentState(s);
s = dev.getCurrentStateRef();
synthesizeMouseButtons();
}
public void populatePriorButtonStates()
{
priorUpperDown = upperDown;
priorLeftDown = leftDown;
priorRightDown = rightDown;
priorMultiDown = multiDown;
priorSwipeLeft = swipeLeft; priorSwipeRight = swipeRight;
priorSwipeUp = swipeUp; priorSwipeDown = swipeDown;
priorSwipeLeftB = swipeLeftB; priorSwipeRightB = swipeRightB; priorSwipeUpB = swipeUpB;
priorSwipeDownB = swipeDownB; priorSwipedB = swipedB;
}
public DS4State getDS4State()
{
return s;

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DS4Windows
{
@ -20,32 +16,164 @@ namespace DS4Windows
/** Indicate x/y direction for doing jitter compensation, etc. */
public enum Direction { Negative, Neutral, Positive }
// Track direction vector separately and very trivially for now.
private Direction horizontalDirection = Direction.Neutral, verticalDirection = Direction.Neutral;
private Direction horizontalDirection = Direction.Neutral,
verticalDirection = Direction.Neutral;
private Direction hDirection = Direction.Neutral, vDirection = Direction.Neutral;
private const double GYRO_MOUSE_COEFFICIENT = 0.0095;
private const int GYRO_MOUSE_DEADZONE = 10;
private const double GYRO_MOUSE_OFFSET = 0.1463;
private const double GYRO_SMOOTH_MOUSE_OFFSET = 0.14698;
private const double TOUCHPAD_MOUSE_OFFSET = 0.015;
private const int SMOOTH_BUFFER_LEN = 3;
private double[] xSmoothBuffer = new double[SMOOTH_BUFFER_LEN];
private double[] ySmoothBuffer = new double[SMOOTH_BUFFER_LEN];
private int smoothBufferTail = 0;
double coefficient = 0.0;
double verticalScale = 0.0;
bool gyroSmooth = false;
int tempInt = 0;
double tempDouble = 0.0;
bool tempBool = false;
public virtual void sixaxisMoved(SixAxisEventArgs arg)
{
int deltaX = 0, deltaY = 0;
deltaX = -arg.sixAxis.accelX;
deltaY = -arg.sixAxis.accelY;
//Console.WriteLine(arg.sixAxis.deltaX);
deltaX = Global.getGyroMouseHorizontalAxis(deviceNumber) == 0 ? arg.sixAxis.gyroYawFull :
arg.sixAxis.gyroRollFull;
deltaY = -arg.sixAxis.gyroPitchFull;
//tempDouble = arg.sixAxis.elapsed * 0.001 * 200.0; // Base default speed on 5 ms
tempDouble = arg.sixAxis.elapsed * 200.0; // Base default speed on 5 ms
double coefficient = Global.GyroSensitivity[deviceNumber] / 100f;
//Collect rounding errors instead of losing motion.
double xMotion = coefficient * deltaX;
xMotion += hRemainder;
int xAction = (int)xMotion;
hRemainder += xMotion - xAction;
hRemainder -= (int)hRemainder;
double yMotion = coefficient * deltaY;
yMotion += vRemainder;
int yAction = (int)yMotion;
vRemainder += yMotion - yAction;
vRemainder -= (int)vRemainder;
if (Global.GyroInvert[deviceNumber] == 2 || Global.GyroInvert[deviceNumber] == 3)
gyroSmooth = Global.getGyroSmoothing(deviceNumber);
double gyroSmoothWeight = 0.0;
coefficient = (Global.getGyroSensitivity(deviceNumber) * 0.01) * GYRO_MOUSE_COEFFICIENT;
double offset = GYRO_MOUSE_OFFSET;
if (gyroSmooth)
{
gyroSmoothWeight = Global.getGyroSmoothingWeight(deviceNumber);
if (gyroSmoothWeight > 0.0)
{
offset = GYRO_SMOOTH_MOUSE_OFFSET;
}
}
double tempAngle = Math.Atan2(-deltaY, deltaX);
double normX = Math.Abs(Math.Cos(tempAngle));
double normY = Math.Abs(Math.Sin(tempAngle));
int signX = Math.Sign(deltaX);
int signY = Math.Sign(deltaY);
if (deltaX == 0 || (hRemainder > 0 != deltaX > 0))
{
hRemainder = 0.0;
}
if (deltaY == 0 || (vRemainder > 0 != deltaY > 0))
{
vRemainder = 0.0;
}
int deadzoneX = (int)Math.Abs(normX * GYRO_MOUSE_DEADZONE);
int deadzoneY = (int)Math.Abs(normY * GYRO_MOUSE_DEADZONE);
if (Math.Abs(deltaX) > deadzoneX)
{
deltaX -= signX * deadzoneX;
}
else
{
deltaX = 0;
}
if (Math.Abs(deltaY) > deadzoneY)
{
deltaY -= signY * deadzoneY;
}
else
{
deltaY = 0;
}
double xMotion = deltaX != 0 ? coefficient * (deltaX * tempDouble)
+ (normX * (offset * signX)) : 0;
int xAction = 0;
if (xMotion != 0.0)
{
xMotion += hRemainder;
}
else
{
hRemainder = 0.0;
}
verticalScale = Global.getGyroSensVerticalScale(deviceNumber) * 0.01;
double yMotion = deltaY != 0 ? (coefficient * verticalScale) * (deltaY * tempDouble)
+ (normY * (offset * signY)) : 0;
int yAction = 0;
if (yMotion != 0.0)
{
yMotion += vRemainder;
}
else
{
vRemainder = 0.0;
}
if (gyroSmooth)
{
int iIndex = smoothBufferTail % SMOOTH_BUFFER_LEN;
xSmoothBuffer[iIndex] = xMotion;
ySmoothBuffer[iIndex] = yMotion;
smoothBufferTail = iIndex + 1;
double currentWeight = 1.0;
double finalWeight = 0.0;
double x_out = 0.0, y_out = 0.0;
int idx = 0;
for (int i = 0; i < SMOOTH_BUFFER_LEN; i++)
{
idx = (smoothBufferTail - i - 1 + SMOOTH_BUFFER_LEN) % SMOOTH_BUFFER_LEN;
x_out += xSmoothBuffer[idx] * currentWeight;
y_out += ySmoothBuffer[idx] * currentWeight;
finalWeight += currentWeight;
currentWeight *= gyroSmoothWeight;
}
x_out /= finalWeight;
xMotion = x_out;
y_out /= finalWeight;
yMotion = y_out;
}
hRemainder = vRemainder = 0.0;
if (xMotion != 0.0)
{
xAction = (int)xMotion;
hRemainder = xMotion - xAction;
}
if (yMotion != 0.0)
{
yAction = (int)yMotion;
vRemainder = yMotion - yAction;
}
int gyroInvert = Global.getGyroInvert(deviceNumber);
if ((gyroInvert & 0x02) == 2)
xAction *= -1;
if (Global.GyroInvert[deviceNumber] == 1 || Global.GyroInvert[deviceNumber] == 3)
if ((gyroInvert & 0x01) == 1)
yAction *= -1;
if (yAction != 0 || xAction != 0)
InputMethods.MoveCursorBy(xAction, yAction);
@ -53,21 +181,33 @@ namespace DS4Windows
vDirection = yMotion > 0.0 ? Direction.Positive : yMotion < 0.0 ? Direction.Negative : Direction.Neutral;
}
public void mouseRemainderReset()
{
hRemainder = vRemainder = 0.0;
int iIndex = smoothBufferTail % SMOOTH_BUFFER_LEN;
xSmoothBuffer[iIndex] = 0.0;
ySmoothBuffer[iIndex] = 0.0;
smoothBufferTail = iIndex + 1;
}
public void touchesBegan(TouchpadEventArgs arg)
{
if (arg.touches.Length == 1)
{
horizontalRemainder = verticalRemainder = 0.0;
horizontalDirection = verticalDirection = Direction.Neutral;
}
}
private byte lastTouchID;
public void touchesMoved(TouchpadEventArgs arg, bool dragging)
public void touchesMoved(TouchpadEventArgs arg, bool dragging, bool disableInvert = false)
{
if ((!dragging && arg.touches.Length != 1) || (dragging && arg.touches.Length < 1))
int touchesLen = arg.touches.Length;
if ((!dragging && touchesLen != 1) || (dragging && touchesLen < 1))
return;
int deltaX, deltaY;
int deltaX = 0, deltaY = 0;
if (arg.touches[0].touchID != lastTouchID)
{
deltaX = deltaY = 0;
@ -75,59 +215,9 @@ namespace DS4Windows
horizontalDirection = verticalDirection = Direction.Neutral;
lastTouchID = arg.touches[0].touchID;
}
else if (Global.TouchpadJitterCompensation[deviceNumber])
{
// Often the DS4's internal jitter compensation kicks in and starts hiding changes, ironically creating jitter...
if (dragging && arg.touches.Length > 1)
{
deltaX = arg.touches[1].deltaX;
deltaY = arg.touches[1].deltaY;
}
else
{
deltaX = arg.touches[0].deltaX;
deltaY = arg.touches[0].deltaY;
}
// allow only very fine, slow motions, when changing direction, even from neutral
// TODO maybe just consume it completely?
if (deltaX <= -1)
{
if (horizontalDirection != Direction.Negative)
{
deltaX = -1;
horizontalRemainder = 0.0;
}
}
else if (deltaX >= 1)
{
if (horizontalDirection != Direction.Positive)
{
deltaX = 1;
horizontalRemainder = 0.0;
}
}
if (deltaY <= -1)
{
if (verticalDirection != Direction.Negative)
{
deltaY = -1;
verticalRemainder = 0.0;
}
}
else if (deltaY >= 1)
{
if (verticalDirection != Direction.Positive)
{
deltaY = 1;
verticalRemainder = 0.0;
}
}
}
else
{
if (dragging && arg.touches.Length > 1)
if (dragging && touchesLen > 1)
{
deltaX = arg.touches[1].deltaX;
deltaY = arg.touches[1].deltaY;
@ -139,36 +229,73 @@ namespace DS4Windows
}
}
double coefficient = Global.TouchSensitivity[deviceNumber] / 100.0;
// Collect rounding errors instead of losing motion.
double xMotion = coefficient * deltaX;
if (xMotion > 0.0)
TouchMoveCursor(deltaX, deltaY, disableInvert);
}
public void TouchMoveCursor(int dx, int dy, bool disableInvert = false)
{
double tempAngle = Math.Atan2(-dy, dx);
double normX = Math.Abs(Math.Cos(tempAngle));
double normY = Math.Abs(Math.Sin(tempAngle));
int signX = Math.Sign(dx);
int signY = Math.Sign(dy);
double coefficient = Global.getTouchSensitivity(deviceNumber) * 0.01;
bool jitterCompenstation = Global.getTouchpadJitterCompensation(deviceNumber);
double xMotion = dx != 0 ?
coefficient * dx + (normX * (TOUCHPAD_MOUSE_OFFSET * signX)) : 0.0;
double yMotion = dy != 0 ?
coefficient * dy + (normY * (TOUCHPAD_MOUSE_OFFSET * signY)) : 0.0;
if (jitterCompenstation)
{
if (horizontalRemainder > 0.0)
xMotion += horizontalRemainder;
double absX = Math.Abs(xMotion);
if (absX <= normX * 0.15)
{
xMotion = signX * Math.Pow(absX / 0.15f, 1.408) * 0.15;
}
double absY = Math.Abs(yMotion);
if (absY <= normY * 0.15)
{
yMotion = signY * Math.Pow(absY / 0.15f, 1.408) * 0.15;
}
}
else if (xMotion < 0.0)
// Collect rounding errors instead of losing motion.
if (xMotion > 0.0 && horizontalRemainder > 0.0)
{
if (horizontalRemainder < 0.0)
xMotion += horizontalRemainder;
xMotion += horizontalRemainder;
}
else if (xMotion < 0.0 && horizontalRemainder < 0.0)
{
xMotion += horizontalRemainder;
}
int xAction = (int)xMotion;
horizontalRemainder = xMotion - xAction;
double yMotion = coefficient * deltaY;
if (yMotion > 0.0)
if (yMotion > 0.0 && verticalRemainder > 0.0)
{
if (verticalRemainder > 0.0)
yMotion += verticalRemainder;
yMotion += verticalRemainder;
}
else if (yMotion < 0.0)
else if (yMotion < 0.0 && verticalRemainder < 0.0)
{
if (verticalRemainder < 0.0)
yMotion += verticalRemainder;
yMotion += verticalRemainder;
}
int yAction = (int)yMotion;
verticalRemainder = yMotion - yAction;
if (disableInvert == false)
{
int touchpadInvert = tempInt = Global.getTouchpadInvert(deviceNumber);
if ((touchpadInvert & 0x02) == 2)
xAction *= -1;
if ((touchpadInvert & 0x01) == 1)
yAction *= -1;
}
if (yAction != 0 || xAction != 0)
InputMethods.MoveCursorBy(xAction, yAction);

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DS4Windows
{
@ -27,6 +23,7 @@ namespace DS4Windows
{
if (arg.touches.Length != 2 || dragging)
return;
Touch lastT0 = arg.touches[0].previousTouch;
Touch lastT1 = arg.touches[1].previousTouch;
Touch T0 = arg.touches[0];

View File

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
@ -522,7 +521,7 @@ namespace DS4Windows
protected virtual Boolean GetDeviceHandle(String Path)
{
m_FileHandle = CreateFile(Path, (GENERIC_WRITE | GENERIC_READ), FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 0);
m_FileHandle = CreateFile(Path, (GENERIC_WRITE | GENERIC_READ), FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED | 0x20000000 | 0x80000000, 0);
return !m_FileHandle.IsInvalid;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32.SafeHandles;
@ -12,6 +11,9 @@ namespace DS4Windows
{
private const String DS3_BUS_CLASS_GUID = "{F679F562-3164-42CE-A4DB-E7DDBE723909}";
private const int CONTROLLER_OFFSET = 1; // Device 0 is the virtual USB hub itself, and we leave devices 1-10 available for other software (like the Scarlet.Crush DualShock driver itself)
private const int inputResolution = 127 - (-128);
private const float reciprocalInputResolution = 1 / (float)inputResolution;
private const int outputResolution = 32767 - (-32768);
private int firstController = 1;
// Device 0 is the virtual USB hub itself, and we can leave more available for other software (like the Scarlet.Crush DualShock driver)
@ -25,10 +27,11 @@ namespace DS4Windows
{
Value -= 0x80;
if (Value == -128) Value = -127;
if (Flip) Value *= -1;
//float temp = (Value - (-128)) / (float)inputResolution;
float temp = (Value - (-128)) * reciprocalInputResolution;
if (Flip) temp = (temp - 0.5f) * -1.0f + 0.5f;
return (Int32)((float)Value * 258.00787401574803149606299212599f);
return (Int32)(temp * outputResolution + (-32768));
}
@ -105,10 +108,11 @@ namespace DS4Windows
Output[4] = (Byte)(device + firstController);
Output[9] = 0x14;
for (int i = 10; i < Output.Length; i++)
for (int i = 10, outLen = Output.Length; i < outLen; i++)
{
Output[i] = 0;
}
if (state.Share) Output[10] |= (Byte)(1 << 5); // Back
if (state.L3) Output[10] |= (Byte)(1 << 6); // Left Thumb
if (state.R3) Output[10] |= (Byte)(1 << 7); // Right Thumb
@ -133,9 +137,9 @@ namespace DS4Windows
Output[13] = state.R2; // Right Trigger
Int32 ThumbLX = Scale(state.LX, false);
Int32 ThumbLY = -Scale(state.LY, false);
Int32 ThumbLY = Scale(state.LY, true);
Int32 ThumbRX = Scale(state.RX, false);
Int32 ThumbRY = -Scale(state.RY, false);
Int32 ThumbRY = Scale(state.RY, true);
Output[14] = (Byte)((ThumbLX >> 0) & 0xFF); // LX
Output[15] = (Byte)((ThumbLX >> 8) & 0xFF);
Output[16] = (Byte)((ThumbLY >> 0) & 0xFF); // LY

View File

@ -19,26 +19,26 @@ namespace DS4Windows
internal class WindowsEnumerator
{
private delegate int EnumCallBackDelegate(IntPtr hwnd, int lParam);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int EnumWindows(EnumCallBackDelegate lpEnumFunc, int lParam);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int EnumChildWindows(IntPtr hWndParent, EnumCallBackDelegate lpEnumFunc, int lParam);
[DllImport("user32", EntryPoint = "GetClassNameA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetClassName(IntPtr hwnd, System.Text.StringBuilder lpClassName, int nMaxCount);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int IsWindowVisible(IntPtr hwnd);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetParent(IntPtr hwnd);
[DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
[DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, System.Text.StringBuilder lParam);
private List<ApiWindow> _listChildren = new List<ApiWindow>();
@ -160,7 +160,7 @@ namespace DS4Windows
if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[3].hWnd), out red))
if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[4].hWnd), out green))
if (Byte.TryParse(WindowsEnumerator.WindowText(EditWindows[5].hWnd), out blue))
OnUpdateColor(Color.FromArgb(red, green, blue), EventArgs.Empty);
OnUpdateColor?.Invoke(Color.FromArgb(red, green, blue), EventArgs.Empty);
}
}
// Always call the base class hook procedure.

View File

@ -1,48 +0,0 @@
namespace DS4Windows
{
partial class Alreadyrunning
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// Alreadyrunning
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(226, 43);
this.Name = "Alreadyrunning";
this.ShowInTaskbar = false;
this.Text = "Alreadyrunning";
this.ResumeLayout(false);
}
#endregion
}
}

View File

@ -1,36 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DS4Windows
{
public partial class Alreadyrunning : Form
{
Stopwatch sw;
public Alreadyrunning()
{
InitializeComponent();
this.WindowState = FormWindowState.Minimized;
Hide();
Timer t = new Timer();
t.Start();
t.Tick += t_Tick;
sw = new Stopwatch();
sw.Start();
}
void t_Tick(object sender, EventArgs e)
{
if (sw.ElapsedMilliseconds >= 10)
this.Close();
}
}
}

View File

@ -33,28 +33,32 @@
this.lvDebug = new System.Windows.Forms.ListView();
this.chTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.chData = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.tmrUpdate = new System.Windows.Forms.Timer(this.components);
this.pnlButton = new System.Windows.Forms.Panel();
this.llbHelp = new System.Windows.Forms.LinkLabel();
this.lbTest = new System.Windows.Forms.Label();
this.btnStartStop = new System.Windows.Forms.Button();
this.lbLastMessage = new System.Windows.Forms.Label();
this.btnClear = new System.Windows.Forms.Button();
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.cMTaskbar = new System.Windows.Forms.ContextMenuStrip(this.components);
this.editProfileForController1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editProfileForController2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editProfileForController3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editProfileForController4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator();
this.disconToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.discon1toolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.discon2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.discon3ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.discon4ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.startToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openProgramFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.openProfiles = new System.Windows.Forms.OpenFileDialog();
this.tabMain = new System.Windows.Forms.TabControl();
this.tabControllers = new System.Windows.Forms.TabPage();
this.btnConnectDS4Win10 = new System.Windows.Forms.Button();
this.tLPControllers = new System.Windows.Forms.TableLayoutPanel();
this.bnLight3 = new System.Windows.Forms.Button();
this.pBStatus1 = new System.Windows.Forms.PictureBox();
@ -84,6 +88,11 @@
this.bnLight1 = new System.Windows.Forms.Button();
this.bnLight2 = new System.Windows.Forms.Button();
this.bnLight4 = new System.Windows.Forms.Button();
this.lbLinkProfile = new System.Windows.Forms.Label();
this.linkCB1 = new System.Windows.Forms.CheckBox();
this.linkCB2 = new System.Windows.Forms.CheckBox();
this.linkCB3 = new System.Windows.Forms.CheckBox();
this.linkCB4 = new System.Windows.Forms.CheckBox();
this.lbNoControllers = new System.Windows.Forms.Label();
this.tabProfiles = new System.Windows.Forms.TabPage();
this.lBProfiles = new System.Windows.Forms.ListBox();
@ -118,7 +127,11 @@
this.hideDS4CheckBox = new System.Windows.Forms.CheckBox();
this.cBSwipeProfiles = new System.Windows.Forms.CheckBox();
this.StartWindowsCheckBox = new System.Windows.Forms.CheckBox();
this.startMinimizedCheckBox = new System.Windows.Forms.CheckBox();
this.runStartupPanel = new System.Windows.Forms.Panel();
this.uacPictureBox = new System.Windows.Forms.PictureBox();
this.runStartTaskRadio = new System.Windows.Forms.RadioButton();
this.label1 = new System.Windows.Forms.Label();
this.runStartProgRadio = new System.Windows.Forms.RadioButton();
this.panel1 = new System.Windows.Forms.Panel();
this.lbNotifications = new System.Windows.Forms.Label();
this.cBoxNotifications = new System.Windows.Forms.ComboBox();
@ -127,9 +140,11 @@
this.nUDLatency = new System.Windows.Forms.NumericUpDown();
this.lbMsLatency = new System.Windows.Forms.Label();
this.cBFlashWhenLate = new System.Windows.Forms.CheckBox();
this.startMinimizedCheckBox = new System.Windows.Forms.CheckBox();
this.mintoTaskCheckBox = new System.Windows.Forms.CheckBox();
this.cBCloseMini = new System.Windows.Forms.CheckBox();
this.cBQuickCharge = new System.Windows.Forms.CheckBox();
this.cBDownloadLangauge = new System.Windows.Forms.CheckBox();
this.cBUseWhiteIcon = new System.Windows.Forms.CheckBox();
this.cBUpdate = new System.Windows.Forms.CheckBox();
this.pNUpdate = new System.Windows.Forms.Panel();
this.cBUpdateTime = new System.Windows.Forms.ComboBox();
@ -139,14 +154,21 @@
this.lbUseXIPorts = new System.Windows.Forms.Label();
this.nUDXIPorts = new System.Windows.Forms.NumericUpDown();
this.lbLastXIPort = new System.Windows.Forms.Label();
this.cBUseWhiteIcon = new System.Windows.Forms.CheckBox();
this.languagePackComboBox1 = new DS4Windows.DS4Forms.LanguagePackComboBox();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.linkProfiles = new System.Windows.Forms.LinkLabel();
this.lnkControllers = new System.Windows.Forms.LinkLabel();
this.linkUninstall = new System.Windows.Forms.LinkLabel();
this.linkSetup = new System.Windows.Forms.LinkLabel();
this.lLBUpdate = new System.Windows.Forms.LinkLabel();
this.linkSplitLabel = new System.Windows.Forms.Label();
this.hidGuardWhiteList = new System.Windows.Forms.LinkLabel();
this.clrHidGuardWlistLinkLabel = new System.Windows.Forms.LinkLabel();
this.hidGuardRegLinkLabel = new System.Windows.Forms.LinkLabel();
this.tabLog = new System.Windows.Forms.TabPage();
this.panel3 = new System.Windows.Forms.Panel();
this.exportLogTxtBtn = new System.Windows.Forms.Button();
this.btnClear = new System.Windows.Forms.Button();
this.saveProfiles = new System.Windows.Forms.SaveFileDialog();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.cMCustomLed = new System.Windows.Forms.ContextMenuStrip(this.components);
@ -168,6 +190,8 @@
this.toolStrip1.SuspendLayout();
this.tabSettings.SuspendLayout();
this.fLPSettings.SuspendLayout();
this.runStartupPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.uacPictureBox)).BeginInit();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nUDLatency)).BeginInit();
@ -177,6 +201,7 @@
((System.ComponentModel.ISupportInitialize)(this.nUDXIPorts)).BeginInit();
this.flowLayoutPanel1.SuspendLayout();
this.tabLog.SuspendLayout();
this.panel3.SuspendLayout();
this.cMCustomLed.SuspendLayout();
this.SuspendLayout();
//
@ -200,11 +225,6 @@
//
resources.ApplyResources(this.chData, "chData");
//
// tmrUpdate
//
this.tmrUpdate.Interval = 1;
this.tmrUpdate.Tick += new System.EventHandler(this.ControllerStatusChange);
//
// pnlButton
//
this.pnlButton.BackColor = System.Drawing.SystemColors.Control;
@ -233,7 +253,7 @@
resources.ApplyResources(this.btnStartStop, "btnStartStop");
this.btnStartStop.Name = "btnStartStop";
this.btnStartStop.UseVisualStyleBackColor = true;
this.btnStartStop.Click += new System.EventHandler(this.btnStartStop_Click);
this.btnStartStop.Click += new System.EventHandler(this.BtnStartStop_Click);
//
// lbLastMessage
//
@ -242,13 +262,6 @@
this.lbLastMessage.Name = "lbLastMessage";
this.lbLastMessage.MouseHover += new System.EventHandler(this.lbLastMessage_MouseHover);
//
// btnClear
//
resources.ApplyResources(this.btnClear, "btnClear");
this.btnClear.Name = "btnClear";
this.btnClear.UseVisualStyleBackColor = true;
this.btnClear.Click += new System.EventHandler(this.btnClear_Click);
//
// notifyIcon1
//
this.notifyIcon1.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
@ -266,9 +279,12 @@
this.editProfileForController2ToolStripMenuItem,
this.editProfileForController3ToolStripMenuItem,
this.editProfileForController4ToolStripMenuItem,
this.toolStripSeparator4,
this.disconToolStripMenuItem,
this.toolStripSeparator1,
this.startToolStripMenuItem,
this.openToolStripMenuItem,
this.openProgramFolderToolStripMenuItem,
this.exitToolStripMenuItem});
this.cMTaskbar.Name = "cMTaskbar";
resources.ApplyResources(this.cMTaskbar, "cMTaskbar");
@ -302,6 +318,49 @@
this.editProfileForController4ToolStripMenuItem.Tag = "4";
this.editProfileForController4ToolStripMenuItem.Click += new System.EventHandler(this.editMenu_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4");
//
// disconToolStripMenuItem
//
this.disconToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.discon1toolStripMenuItem,
this.discon2ToolStripMenuItem,
this.discon3ToolStripMenuItem,
this.discon4ToolStripMenuItem});
this.disconToolStripMenuItem.Name = "disconToolStripMenuItem";
resources.ApplyResources(this.disconToolStripMenuItem, "disconToolStripMenuItem");
//
// discon1toolStripMenuItem
//
this.discon1toolStripMenuItem.Name = "discon1toolStripMenuItem";
resources.ApplyResources(this.discon1toolStripMenuItem, "discon1toolStripMenuItem");
this.discon1toolStripMenuItem.Tag = "0";
this.discon1toolStripMenuItem.Click += new System.EventHandler(this.DiscontoolStripMenuItem_Click);
//
// discon2ToolStripMenuItem
//
this.discon2ToolStripMenuItem.Name = "discon2ToolStripMenuItem";
resources.ApplyResources(this.discon2ToolStripMenuItem, "discon2ToolStripMenuItem");
this.discon2ToolStripMenuItem.Tag = "1";
this.discon2ToolStripMenuItem.Click += new System.EventHandler(this.DiscontoolStripMenuItem_Click);
//
// discon3ToolStripMenuItem
//
this.discon3ToolStripMenuItem.Name = "discon3ToolStripMenuItem";
resources.ApplyResources(this.discon3ToolStripMenuItem, "discon3ToolStripMenuItem");
this.discon3ToolStripMenuItem.Tag = "2";
this.discon3ToolStripMenuItem.Click += new System.EventHandler(this.DiscontoolStripMenuItem_Click);
//
// discon4ToolStripMenuItem
//
this.discon4ToolStripMenuItem.Name = "discon4ToolStripMenuItem";
resources.ApplyResources(this.discon4ToolStripMenuItem, "discon4ToolStripMenuItem");
this.discon4ToolStripMenuItem.Tag = "3";
this.discon4ToolStripMenuItem.Click += new System.EventHandler(this.DiscontoolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
@ -319,6 +378,12 @@
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
// openProgramFolderToolStripMenuItem
//
this.openProgramFolderToolStripMenuItem.Name = "openProgramFolderToolStripMenuItem";
resources.ApplyResources(this.openProgramFolderToolStripMenuItem, "openProgramFolderToolStripMenuItem");
this.openProgramFolderToolStripMenuItem.Click += new System.EventHandler(this.OpenProgramFolderToolStripMenuItem_Click);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
@ -349,38 +414,30 @@
//
// tabControllers
//
this.tabControllers.Controls.Add(this.btnConnectDS4Win10);
this.tabControllers.Controls.Add(this.tLPControllers);
this.tabControllers.Controls.Add(this.lbNoControllers);
resources.ApplyResources(this.tabControllers, "tabControllers");
this.tabControllers.Name = "tabControllers";
this.tabControllers.UseVisualStyleBackColor = true;
//
// btnConnectDS4Win10
//
resources.ApplyResources(this.btnConnectDS4Win10, "btnConnectDS4Win10");
this.btnConnectDS4Win10.Name = "btnConnectDS4Win10";
this.btnConnectDS4Win10.UseVisualStyleBackColor = true;
this.btnConnectDS4Win10.Click += new System.EventHandler(this.btnConnectDS4Win10_Click);
//
// tLPControllers
//
resources.ApplyResources(this.tLPControllers, "tLPControllers");
this.tLPControllers.Controls.Add(this.bnLight3, 5, 3);
this.tLPControllers.Controls.Add(this.bnLight3, 6, 3);
this.tLPControllers.Controls.Add(this.pBStatus1, 1, 1);
this.tLPControllers.Controls.Add(this.lbPad1, 0, 1);
this.tLPControllers.Controls.Add(this.lbPad2, 0, 2);
this.tLPControllers.Controls.Add(this.bnEditC3, 4, 3);
this.tLPControllers.Controls.Add(this.bnEditC4, 4, 4);
this.tLPControllers.Controls.Add(this.bnEditC3, 5, 3);
this.tLPControllers.Controls.Add(this.bnEditC4, 5, 4);
this.tLPControllers.Controls.Add(this.lbPad3, 0, 3);
this.tLPControllers.Controls.Add(this.lbPad4, 0, 4);
this.tLPControllers.Controls.Add(this.cBController1, 3, 1);
this.tLPControllers.Controls.Add(this.bnEditC2, 4, 2);
this.tLPControllers.Controls.Add(this.cBController2, 3, 2);
this.tLPControllers.Controls.Add(this.cBController3, 3, 3);
this.tLPControllers.Controls.Add(this.bnEditC1, 4, 1);
this.tLPControllers.Controls.Add(this.cBController4, 3, 4);
this.tLPControllers.Controls.Add(this.lbSelectedProfile, 3, 0);
this.tLPControllers.Controls.Add(this.cBController1, 4, 1);
this.tLPControllers.Controls.Add(this.bnEditC2, 5, 2);
this.tLPControllers.Controls.Add(this.cBController2, 4, 2);
this.tLPControllers.Controls.Add(this.cBController3, 4, 3);
this.tLPControllers.Controls.Add(this.bnEditC1, 5, 1);
this.tLPControllers.Controls.Add(this.cBController4, 4, 4);
this.tLPControllers.Controls.Add(this.lbSelectedProfile, 4, 0);
this.tLPControllers.Controls.Add(this.lbID, 0, 0);
this.tLPControllers.Controls.Add(this.lbStatus, 1, 0);
this.tLPControllers.Controls.Add(this.lbBattery, 2, 0);
@ -391,9 +448,14 @@
this.tLPControllers.Controls.Add(this.pBStatus2, 1, 2);
this.tLPControllers.Controls.Add(this.pBStatus3, 1, 3);
this.tLPControllers.Controls.Add(this.pBStatus4, 1, 4);
this.tLPControllers.Controls.Add(this.bnLight1, 5, 1);
this.tLPControllers.Controls.Add(this.bnLight2, 5, 2);
this.tLPControllers.Controls.Add(this.bnLight4, 5, 4);
this.tLPControllers.Controls.Add(this.bnLight1, 6, 1);
this.tLPControllers.Controls.Add(this.bnLight2, 6, 2);
this.tLPControllers.Controls.Add(this.bnLight4, 6, 4);
this.tLPControllers.Controls.Add(this.lbLinkProfile, 3, 0);
this.tLPControllers.Controls.Add(this.linkCB1, 3, 1);
this.tLPControllers.Controls.Add(this.linkCB2, 3, 2);
this.tLPControllers.Controls.Add(this.linkCB3, 3, 3);
this.tLPControllers.Controls.Add(this.linkCB4, 3, 4);
this.tLPControllers.Name = "tLPControllers";
//
// bnLight3
@ -435,7 +497,7 @@
//
resources.ApplyResources(this.bnEditC3, "bnEditC3");
this.bnEditC3.Name = "bnEditC3";
this.bnEditC3.Tag = "2";
this.bnEditC3.Tag = "";
this.bnEditC3.UseVisualStyleBackColor = true;
this.bnEditC3.Click += new System.EventHandler(this.editButtons_Click);
//
@ -443,7 +505,7 @@
//
resources.ApplyResources(this.bnEditC4, "bnEditC4");
this.bnEditC4.Name = "bnEditC4";
this.bnEditC4.Tag = "3";
this.bnEditC4.Tag = "";
this.bnEditC4.UseVisualStyleBackColor = true;
this.bnEditC4.Click += new System.EventHandler(this.editButtons_Click);
//
@ -476,7 +538,7 @@
//
resources.ApplyResources(this.bnEditC2, "bnEditC2");
this.bnEditC2.Name = "bnEditC2";
this.bnEditC2.Tag = "1";
this.bnEditC2.Tag = "";
this.bnEditC2.UseVisualStyleBackColor = true;
this.bnEditC2.Click += new System.EventHandler(this.editButtons_Click);
//
@ -502,7 +564,7 @@
//
resources.ApplyResources(this.bnEditC1, "bnEditC1");
this.bnEditC1.Name = "bnEditC1";
this.bnEditC1.Tag = "0";
this.bnEditC1.Tag = "";
this.bnEditC1.UseVisualStyleBackColor = true;
this.bnEditC1.Click += new System.EventHandler(this.editButtons_Click);
//
@ -612,6 +674,43 @@
this.bnLight4.UseVisualStyleBackColor = false;
this.bnLight4.Click += new System.EventHandler(this.EditCustomLed);
//
// lbLinkProfile
//
resources.ApplyResources(this.lbLinkProfile, "lbLinkProfile");
this.lbLinkProfile.Name = "lbLinkProfile";
//
// linkCB1
//
resources.ApplyResources(this.linkCB1, "linkCB1");
this.linkCB1.Name = "linkCB1";
this.linkCB1.Tag = "0";
this.linkCB1.UseVisualStyleBackColor = true;
this.linkCB1.CheckedChanged += new System.EventHandler(this.linkCB_CheckedChanged);
//
// linkCB2
//
resources.ApplyResources(this.linkCB2, "linkCB2");
this.linkCB2.Name = "linkCB2";
this.linkCB2.Tag = "1";
this.linkCB2.UseVisualStyleBackColor = true;
this.linkCB2.CheckedChanged += new System.EventHandler(this.linkCB_CheckedChanged);
//
// linkCB3
//
resources.ApplyResources(this.linkCB3, "linkCB3");
this.linkCB3.Name = "linkCB3";
this.linkCB3.Tag = "2";
this.linkCB3.UseVisualStyleBackColor = true;
this.linkCB3.CheckedChanged += new System.EventHandler(this.linkCB_CheckedChanged);
//
// linkCB4
//
resources.ApplyResources(this.linkCB4, "linkCB4");
this.linkCB4.Name = "linkCB4";
this.linkCB4.Tag = "3";
this.linkCB4.UseVisualStyleBackColor = true;
this.linkCB4.CheckedChanged += new System.EventHandler(this.linkCB_CheckedChanged);
//
// lbNoControllers
//
resources.ApplyResources(this.lbNoControllers, "lbNoControllers");
@ -632,8 +731,8 @@
this.lBProfiles.ContextMenuStrip = this.cMProfile;
resources.ApplyResources(this.lBProfiles, "lBProfiles");
this.lBProfiles.FormattingEnabled = true;
this.lBProfiles.MultiColumn = true;
this.lBProfiles.Name = "lBProfiles";
this.lBProfiles.SelectedIndexChanged += new System.EventHandler(this.lBProfiles_SelectedIndexChanged);
this.lBProfiles.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lBProfiles_KeyDown);
this.lBProfiles.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lBProfiles_MouseDoubleClick);
this.lBProfiles.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lBProfiles_MouseDown);
@ -795,22 +894,22 @@
//
// tsBEditProfile
//
this.tsBEditProfile.Image = global::DS4Windows.Properties.Resources.edit;
resources.ApplyResources(this.tsBEditProfile, "tsBEditProfile");
this.tsBEditProfile.Image = global::DS4Windows.Properties.Resources.edit;
this.tsBEditProfile.Name = "tsBEditProfile";
this.tsBEditProfile.Click += new System.EventHandler(this.tsBNEditProfile_Click);
//
// tsBDeleteProfile
//
this.tsBDeleteProfile.Image = global::DS4Windows.Properties.Resources.delete;
resources.ApplyResources(this.tsBDeleteProfile, "tsBDeleteProfile");
this.tsBDeleteProfile.Image = global::DS4Windows.Properties.Resources.delete;
this.tsBDeleteProfile.Name = "tsBDeleteProfile";
this.tsBDeleteProfile.Click += new System.EventHandler(this.tsBDeleteProfle_Click);
//
// tSBDupProfile
//
this.tSBDupProfile.Image = global::DS4Windows.Properties.Resources.copy;
resources.ApplyResources(this.tSBDupProfile, "tSBDupProfile");
this.tSBDupProfile.Image = global::DS4Windows.Properties.Resources.copy;
this.tSBDupProfile.Name = "tSBDupProfile";
this.tSBDupProfile.Click += new System.EventHandler(this.tSBDupProfile_Click);
//
@ -823,8 +922,8 @@
//
// tSBExportProfile
//
this.tSBExportProfile.Image = global::DS4Windows.Properties.Resources.export;
resources.ApplyResources(this.tSBExportProfile, "tSBExportProfile");
this.tSBExportProfile.Image = global::DS4Windows.Properties.Resources.export;
this.tSBExportProfile.Name = "tSBExportProfile";
this.tSBExportProfile.Click += new System.EventHandler(this.tSBExportProfile_Click);
//
@ -847,17 +946,19 @@
this.fLPSettings.Controls.Add(this.hideDS4CheckBox);
this.fLPSettings.Controls.Add(this.cBSwipeProfiles);
this.fLPSettings.Controls.Add(this.StartWindowsCheckBox);
this.fLPSettings.Controls.Add(this.startMinimizedCheckBox);
this.fLPSettings.Controls.Add(this.runStartupPanel);
this.fLPSettings.Controls.Add(this.panel1);
this.fLPSettings.Controls.Add(this.cBDisconnectBT);
this.fLPSettings.Controls.Add(this.panel2);
this.fLPSettings.Controls.Add(this.startMinimizedCheckBox);
this.fLPSettings.Controls.Add(this.mintoTaskCheckBox);
this.fLPSettings.Controls.Add(this.cBCloseMini);
this.fLPSettings.Controls.Add(this.cBQuickCharge);
this.fLPSettings.Controls.Add(this.cBUseWhiteIcon);
this.fLPSettings.Controls.Add(this.cBDownloadLangauge);
this.fLPSettings.Controls.Add(this.cBUpdate);
this.fLPSettings.Controls.Add(this.pNUpdate);
this.fLPSettings.Controls.Add(this.pnlXIPorts);
this.fLPSettings.Controls.Add(this.languagePackComboBox1);
this.fLPSettings.Controls.Add(this.flowLayoutPanel1);
this.fLPSettings.Name = "fLPSettings";
//
@ -865,7 +966,7 @@
//
resources.ApplyResources(this.hideDS4CheckBox, "hideDS4CheckBox");
this.hideDS4CheckBox.Name = "hideDS4CheckBox";
this.hideDS4CheckBox.UseVisualStyleBackColor = true;
this.hideDS4CheckBox.UseVisualStyleBackColor = false;
this.hideDS4CheckBox.CheckedChanged += new System.EventHandler(this.hideDS4CheckBox_CheckedChanged);
//
// cBSwipeProfiles
@ -874,7 +975,7 @@
this.cBSwipeProfiles.Checked = true;
this.cBSwipeProfiles.CheckState = System.Windows.Forms.CheckState.Checked;
this.cBSwipeProfiles.Name = "cBSwipeProfiles";
this.cBSwipeProfiles.UseVisualStyleBackColor = true;
this.cBSwipeProfiles.UseVisualStyleBackColor = false;
this.cBSwipeProfiles.CheckedChanged += new System.EventHandler(this.cBSwipeProfiles_CheckedChanged);
//
// StartWindowsCheckBox
@ -884,12 +985,43 @@
this.StartWindowsCheckBox.UseVisualStyleBackColor = true;
this.StartWindowsCheckBox.CheckedChanged += new System.EventHandler(this.StartWindowsCheckBox_CheckedChanged);
//
// startMinimizedCheckBox
// runStartupPanel
//
resources.ApplyResources(this.startMinimizedCheckBox, "startMinimizedCheckBox");
this.startMinimizedCheckBox.Name = "startMinimizedCheckBox";
this.startMinimizedCheckBox.UseVisualStyleBackColor = true;
this.startMinimizedCheckBox.CheckedChanged += new System.EventHandler(this.startMinimizedCheckBox_CheckedChanged);
this.runStartupPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.runStartupPanel.Controls.Add(this.uacPictureBox);
this.runStartupPanel.Controls.Add(this.runStartTaskRadio);
this.runStartupPanel.Controls.Add(this.label1);
this.runStartupPanel.Controls.Add(this.runStartProgRadio);
resources.ApplyResources(this.runStartupPanel, "runStartupPanel");
this.runStartupPanel.Name = "runStartupPanel";
//
// uacPictureBox
//
resources.ApplyResources(this.uacPictureBox, "uacPictureBox");
this.uacPictureBox.Name = "uacPictureBox";
this.uacPictureBox.TabStop = false;
//
// runStartTaskRadio
//
resources.ApplyResources(this.runStartTaskRadio, "runStartTaskRadio");
this.runStartTaskRadio.Name = "runStartTaskRadio";
this.runStartTaskRadio.TabStop = true;
this.runStartTaskRadio.UseVisualStyleBackColor = false;
this.runStartTaskRadio.Click += new System.EventHandler(this.runStartTaskRadio_Click);
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// runStartProgRadio
//
resources.ApplyResources(this.runStartProgRadio, "runStartProgRadio");
this.runStartProgRadio.Checked = true;
this.runStartProgRadio.Name = "runStartProgRadio";
this.runStartProgRadio.TabStop = true;
this.runStartProgRadio.UseVisualStyleBackColor = false;
this.runStartProgRadio.Click += new System.EventHandler(this.runStartProgRadio_Click);
//
// panel1
//
@ -940,7 +1072,7 @@
0});
this.nUDLatency.Name = "nUDLatency";
this.nUDLatency.Value = new decimal(new int[] {
10,
20,
0,
0,
0});
@ -957,9 +1089,22 @@
this.cBFlashWhenLate.Checked = true;
this.cBFlashWhenLate.CheckState = System.Windows.Forms.CheckState.Checked;
this.cBFlashWhenLate.Name = "cBFlashWhenLate";
this.cBFlashWhenLate.UseVisualStyleBackColor = true;
this.cBFlashWhenLate.UseVisualStyleBackColor = false;
this.cBFlashWhenLate.CheckedChanged += new System.EventHandler(this.cBFlashWhenLate_CheckedChanged);
//
// startMinimizedCheckBox
//
resources.ApplyResources(this.startMinimizedCheckBox, "startMinimizedCheckBox");
this.startMinimizedCheckBox.Name = "startMinimizedCheckBox";
this.startMinimizedCheckBox.UseVisualStyleBackColor = true;
this.startMinimizedCheckBox.CheckedChanged += new System.EventHandler(this.startMinimizedCheckBox_CheckedChanged);
//
// mintoTaskCheckBox
//
resources.ApplyResources(this.mintoTaskCheckBox, "mintoTaskCheckBox");
this.mintoTaskCheckBox.Name = "mintoTaskCheckBox";
this.mintoTaskCheckBox.UseVisualStyleBackColor = true;
//
// cBCloseMini
//
resources.ApplyResources(this.cBCloseMini, "cBCloseMini");
@ -974,20 +1119,18 @@
this.cBQuickCharge.UseVisualStyleBackColor = true;
this.cBQuickCharge.CheckedChanged += new System.EventHandler(this.cBQuickCharge_CheckedChanged);
//
// cBDownloadLangauge
// cBUseWhiteIcon
//
resources.ApplyResources(this.cBDownloadLangauge, "cBDownloadLangauge");
this.cBDownloadLangauge.Checked = true;
this.cBDownloadLangauge.CheckState = System.Windows.Forms.CheckState.Checked;
this.cBDownloadLangauge.Name = "cBDownloadLangauge";
this.cBDownloadLangauge.UseVisualStyleBackColor = true;
this.cBDownloadLangauge.CheckedChanged += new System.EventHandler(this.cBDownloadLangauge_CheckedChanged);
resources.ApplyResources(this.cBUseWhiteIcon, "cBUseWhiteIcon");
this.cBUseWhiteIcon.Name = "cBUseWhiteIcon";
this.cBUseWhiteIcon.UseVisualStyleBackColor = true;
this.cBUseWhiteIcon.CheckedChanged += new System.EventHandler(this.cBUseWhiteIcon_CheckedChanged);
//
// cBUpdate
//
resources.ApplyResources(this.cBUpdate, "cBUpdate");
this.cBUpdate.Name = "cBUpdate";
this.cBUpdate.UseVisualStyleBackColor = true;
this.cBUpdate.UseVisualStyleBackColor = false;
this.cBUpdate.CheckedChanged += new System.EventHandler(this.cBUpdate_CheckedChanged);
//
// pNUpdate
@ -1032,8 +1175,6 @@
this.pnlXIPorts.Controls.Add(this.lbLastXIPort);
resources.ApplyResources(this.pnlXIPorts, "pnlXIPorts");
this.pnlXIPorts.Name = "pnlXIPorts";
this.pnlXIPorts.MouseEnter += new System.EventHandler(this.pnlXIPorts_MouseEnter);
this.pnlXIPorts.MouseLeave += new System.EventHandler(this.pnlXIPorts_MouseLeave);
//
// lbUseXIPorts
//
@ -1068,21 +1209,26 @@
resources.ApplyResources(this.lbLastXIPort, "lbLastXIPort");
this.lbLastXIPort.Name = "lbLastXIPort";
//
// cBUseWhiteIcon
// languagePackComboBox1
//
resources.ApplyResources(this.cBUseWhiteIcon, "cBUseWhiteIcon");
this.cBUseWhiteIcon.Name = "cBUseWhiteIcon";
this.cBUseWhiteIcon.UseVisualStyleBackColor = true;
this.cBUseWhiteIcon.CheckedChanged += new System.EventHandler(this.cBUseWhiteIcon_CheckedChanged);
resources.ApplyResources(this.languagePackComboBox1, "languagePackComboBox1");
this.languagePackComboBox1.Name = "languagePackComboBox1";
this.languagePackComboBox1.SelectedValueChanged += new System.EventHandler(this.languagePackComboBox1_SelectedValueChanged);
//
// flowLayoutPanel1
//
resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
this.flowLayoutPanel1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.flowLayoutPanel1.Controls.Add(this.linkProfiles);
this.flowLayoutPanel1.Controls.Add(this.lnkControllers);
this.flowLayoutPanel1.Controls.Add(this.linkUninstall);
this.flowLayoutPanel1.Controls.Add(this.linkSetup);
this.flowLayoutPanel1.Controls.Add(this.lLBUpdate);
this.flowLayoutPanel1.Controls.Add(this.linkSplitLabel);
this.flowLayoutPanel1.Controls.Add(this.hidGuardWhiteList);
this.flowLayoutPanel1.Controls.Add(this.clrHidGuardWlistLinkLabel);
this.flowLayoutPanel1.Controls.Add(this.hidGuardRegLinkLabel);
this.flowLayoutPanel1.ForeColor = System.Drawing.SystemColors.ControlText;
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
//
// linkProfiles
@ -1120,14 +1266,64 @@
this.lLBUpdate.TabStop = true;
this.lLBUpdate.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lLBUpdate_LinkClicked);
//
// linkSplitLabel
//
resources.ApplyResources(this.linkSplitLabel, "linkSplitLabel");
this.linkSplitLabel.BackColor = System.Drawing.SystemColors.ActiveBorder;
this.linkSplitLabel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.linkSplitLabel.ForeColor = System.Drawing.SystemColors.ControlText;
this.linkSplitLabel.Name = "linkSplitLabel";
//
// hidGuardWhiteList
//
resources.ApplyResources(this.hidGuardWhiteList, "hidGuardWhiteList");
this.hidGuardWhiteList.Name = "hidGuardWhiteList";
this.hidGuardWhiteList.TabStop = true;
this.hidGuardWhiteList.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.HidGuardWhiteList_LinkClicked);
//
// clrHidGuardWlistLinkLabel
//
resources.ApplyResources(this.clrHidGuardWlistLinkLabel, "clrHidGuardWlistLinkLabel");
this.clrHidGuardWlistLinkLabel.Name = "clrHidGuardWlistLinkLabel";
this.clrHidGuardWlistLinkLabel.TabStop = true;
this.clrHidGuardWlistLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.ClrHidGuardWlistLinkLabel_LinkClicked);
//
// hidGuardRegLinkLabel
//
resources.ApplyResources(this.hidGuardRegLinkLabel, "hidGuardRegLinkLabel");
this.hidGuardRegLinkLabel.Name = "hidGuardRegLinkLabel";
this.hidGuardRegLinkLabel.TabStop = true;
this.hidGuardRegLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.HidGuardRegLinkLabel_LinkClicked);
//
// tabLog
//
this.tabLog.Controls.Add(this.lvDebug);
this.tabLog.Controls.Add(this.btnClear);
this.tabLog.Controls.Add(this.panel3);
resources.ApplyResources(this.tabLog, "tabLog");
this.tabLog.Name = "tabLog";
this.tabLog.UseVisualStyleBackColor = true;
//
// panel3
//
this.panel3.Controls.Add(this.exportLogTxtBtn);
this.panel3.Controls.Add(this.btnClear);
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// exportLogTxtBtn
//
resources.ApplyResources(this.exportLogTxtBtn, "exportLogTxtBtn");
this.exportLogTxtBtn.Name = "exportLogTxtBtn";
this.exportLogTxtBtn.UseVisualStyleBackColor = true;
this.exportLogTxtBtn.Click += new System.EventHandler(this.exportLogTxtBtn_Click);
//
// btnClear
//
resources.ApplyResources(this.btnClear, "btnClear");
this.btnClear.Name = "btnClear";
this.btnClear.UseVisualStyleBackColor = true;
this.btnClear.Click += new System.EventHandler(this.BtnClear_Click);
//
// saveProfiles
//
resources.ApplyResources(this.saveProfiles, "saveProfiles");
@ -1157,16 +1353,12 @@
resources.ApplyResources(this.useCustomColorToolStripMenuItem, "useCustomColorToolStripMenuItem");
this.useCustomColorToolStripMenuItem.Click += new System.EventHandler(this.useCustomColorToolStripMenuItem_Click);
//
// advColorDialog
//
this.advColorDialog.OnUpdateColor += new DS4Windows.AdvancedColorDialog.ColorUpdateHandler(this.advColorDialog_OnUpdateColor);
//
// DS4Form
//
this.AllowDrop = true;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.Color.White;
this.BackColor = System.Drawing.SystemColors.Window;
this.Controls.Add(this.tabMain);
this.Controls.Add(this.pnlButton);
this.Name = "DS4Form";
@ -1179,7 +1371,6 @@
this.cMTaskbar.ResumeLayout(false);
this.tabMain.ResumeLayout(false);
this.tabControllers.ResumeLayout(false);
this.tabControllers.PerformLayout();
this.tLPControllers.ResumeLayout(false);
this.tLPControllers.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pBStatus1)).EndInit();
@ -1196,6 +1387,9 @@
this.tabSettings.ResumeLayout(false);
this.fLPSettings.ResumeLayout(false);
this.fLPSettings.PerformLayout();
this.runStartupPanel.ResumeLayout(false);
this.runStartupPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.uacPictureBox)).EndInit();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel2.ResumeLayout(false);
@ -1210,6 +1404,7 @@
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.tabLog.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.cMCustomLed.ResumeLayout(false);
this.ResumeLayout(false);
@ -1220,10 +1415,8 @@
private System.Windows.Forms.ListView lvDebug;
private System.Windows.Forms.ColumnHeader chTime;
private System.Windows.Forms.ColumnHeader chData;
private System.Windows.Forms.Timer tmrUpdate;
private System.Windows.Forms.Panel pnlButton;
private System.Windows.Forms.Button btnStartStop;
private System.Windows.Forms.Button btnClear;
private System.Windows.Forms.NotifyIcon notifyIcon1;
private System.Windows.Forms.ContextMenuStrip cMTaskbar;
private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
@ -1264,7 +1457,6 @@
private System.Windows.Forms.Label lbSelectedProfile;
private System.Windows.Forms.Label lbID;
private System.Windows.Forms.Label lbStatus;
private System.Windows.Forms.Label lbBattery;
private System.Windows.Forms.Label lbBatt1;
private System.Windows.Forms.Label lbBatt2;
private System.Windows.Forms.Label lbBatt3;
@ -1322,7 +1514,6 @@
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.Label lbNoControllers;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.CheckBox cBDownloadLangauge;
private System.Windows.Forms.CheckBox cBFlashWhenLate;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label lbNotifications;
@ -1330,7 +1521,6 @@
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.NumericUpDown nUDLatency;
private System.Windows.Forms.Label lbMsLatency;
private System.Windows.Forms.Button btnConnectDS4Win10;
private System.Windows.Forms.Button bnLight3;
private System.Windows.Forms.Button bnLight1;
private System.Windows.Forms.Button bnLight2;
@ -1340,6 +1530,33 @@
private System.Windows.Forms.ToolStripMenuItem useCustomColorToolStripMenuItem;
private AdvancedColorDialog advColorDialog;
private System.Windows.Forms.CheckBox cBUseWhiteIcon;
private System.Windows.Forms.Panel runStartupPanel;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.RadioButton runStartProgRadio;
private System.Windows.Forms.RadioButton runStartTaskRadio;
private System.Windows.Forms.PictureBox uacPictureBox;
private System.Windows.Forms.Label lbBattery;
private System.Windows.Forms.Label lbLinkProfile;
private System.Windows.Forms.CheckBox linkCB1;
private System.Windows.Forms.CheckBox linkCB2;
private System.Windows.Forms.CheckBox linkCB3;
private System.Windows.Forms.CheckBox linkCB4;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Button exportLogTxtBtn;
private System.Windows.Forms.Button btnClear;
private DS4Forms.LanguagePackComboBox languagePackComboBox1;
private System.Windows.Forms.LinkLabel hidGuardWhiteList;
private System.Windows.Forms.LinkLabel clrHidGuardWlistLinkLabel;
private System.Windows.Forms.LinkLabel hidGuardRegLinkLabel;
private System.Windows.Forms.Label linkSplitLabel;
private System.Windows.Forms.ToolStripMenuItem openProgramFolderToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
private System.Windows.Forms.ToolStripMenuItem disconToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem discon1toolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem discon2ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem discon3ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem discon4ToolStripMenuItem;
private System.Windows.Forms.CheckBox mintoTaskCheckBox;
//private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem2;
}
}

View File

@ -196,9 +196,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>الأيادي</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>وصل اليد بشكل حصري (تجريبي)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1046, 94</value>
</data>

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@ -117,28 +117,184 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="chTime.Text" xml:space="preserve">
<value>Čas</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>861, 22</value>
<data name="assignToController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>874, 11</value>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.1</value>
</data>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 17</value>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="llbHelp.Text" xml:space="preserve">
<value>Kláv. zkratky/O programu</value>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.4</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 22</value>
</data>
<data name="bnEditC1.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 58</value>
</data>
<data name="bnEditC2.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 94</value>
</data>
<data name="bnEditC3.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 130</value>
</data>
<data name="bnEditC4.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="bnLight1.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 22</value>
</data>
<data name="bnLight1.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
</data>
<data name="bnLight2.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 58</value>
</data>
<data name="bnLight2.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 94</value>
</data>
<data name="bnLight3.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
</data>
<data name="bnLight4.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 130</value>
</data>
<data name="bnLight4.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>Vymazat</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>Start</value>
</data>
<data name="cBCloseMini.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 21</value>
</data>
<data name="cBCloseMini.Text" xml:space="preserve">
<value>Zavřít při minimalizování</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 23</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 59</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 95</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 131</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>201, 21</value>
</data>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>Odpojit od BT při zastavení</value>
</data>
<data name="cBDownloadLangauge.Size" type="System.Drawing.Size, System.Drawing">
<value>348, 21</value>
</data>
<data name="cBDownloadLangauge.Text" xml:space="preserve">
<value>Při aktualizaci stáhnout také nové jazykové balíčky</value>
</data>
<data name="cBFlashWhenLate.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 21</value>
</data>
<data name="cBFlashWhenLate.Text" xml:space="preserve">
<value>Blikat při vysoké latenci</value>
</data>
<data name="cBoxNotifications.Items" xml:space="preserve">
<value>Žádný</value>
</data>
<data name="cBoxNotifications.Items1" xml:space="preserve">
<value>Pouze varování</value>
</data>
<data name="cBoxNotifications.Items2" xml:space="preserve">
<value>Vše</value>
</data>
<data name="cBQuickCharge.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 21</value>
</data>
<data name="cBQuickCharge.Text" xml:space="preserve">
<value>Rychlé nabíjení</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>289, 21</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>Pro změnu profilu přejeďte po touchpadu</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>253, 21</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>Při spuštění kontrolovat aktualizace</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>hodin</value>
</data>
<data name="cBUpdateTime.Items1" xml:space="preserve">
<value>dní</value>
</data>
<data name="cBUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 0</value>
</data>
<data name="chData.Text" xml:space="preserve">
<value>Data</value>
</data>
<data name="chTime.Text" xml:space="preserve">
<value>Čas</value>
</data>
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 56</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 264</value>
</data>
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>304, 192</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="deleteToolStripMenuItem.Text" xml:space="preserve">
<value>Odstranit (Del)</value>
</data>
<data name="duplicateToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="duplicateToolStripMenuItem.Text" xml:space="preserve">
<value>Duplikovat (Ctrl+D)</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
</data>
@ -163,17 +319,11 @@
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Upravit profil ovladače č. 4</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 6</value>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>Otevřít</value>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
@ -181,56 +331,80 @@
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Ukončit (prostřední tlačítko myši)</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>Ovladače</value>
<data name="exportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Připojit výhradně k DS4 (experimentální funkce)</value>
<data name="exportToolStripMenuItem.Text" xml:space="preserve">
<value>Exportovat</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 94</value>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>369, 13</value>
</data>
<data name="bnLight3.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>185, 85</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>522, 26</value>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 21</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 94</value>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>Skrýt DS4 ovladač</value>
</data>
<data name="bnEditC3.Text" xml:space="preserve">
<value>Změnit</value>
<data name="importToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 130</value>
<data name="importToolStripMenuItem.Text" xml:space="preserve">
<value>Importovat</value>
</data>
<data name="bnEditC4.Text" xml:space="preserve">
<value>Změnit</value>
<data name="languagePackComboBox1.InvariantCultureText" xml:space="preserve">
<value>Ne (anglické UI)</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 23</value>
<data name="languagePackComboBox1.LabelText" xml:space="preserve">
<value>Použít jazykový balíček</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 58</value>
<data name="lbBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 27</value>
</data>
<data name="bnEditC2.Text" xml:space="preserve">
<value>Změnit</value>
<data name="lbBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 63</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 59</value>
<data name="lbBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 99</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 95</value>
<data name="lbBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 135</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>1018, 22</value>
<data name="lbBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>732, 0</value>
</data>
<data name="bnEditC1.Text" xml:space="preserve">
<value>Změnit</value>
<data name="lbBattery.Text" xml:space="preserve">
<value>Baterie</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>872, 131</value>
<data name="lbCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 17</value>
</data>
<data name="lbCheckEvery.Text" xml:space="preserve">
<value>Kontrolovat kažých</value>
</data>
<data name="lbID.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>861, 22</value>
</data>
<data name="lbLastXIPort.Location" type="System.Drawing.Point, System.Drawing">
<value>209, 4</value>
</data>
<data name="lbMsLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>237, 5</value>
</data>
<data name="lbNoControllers.Text" xml:space="preserve">
<value>Žádné připojené ovladače (max. 4)</value>
</data>
<data name="lbNotifications.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
</data>
<data name="lbNotifications.Text" xml:space="preserve">
<value>Zobrazit oznámení</value>
</data>
<data name="lbSelectedProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>886, 0</value>
@ -250,23 +424,77 @@
<data name="lbStatus.Text" xml:space="preserve">
<value>Stav</value>
</data>
<data name="lbBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>732, 0</value>
<data name="lbUseXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 17</value>
</data>
<data name="lbBattery.Text" xml:space="preserve">
<value>Baterie</value>
<data name="lbUseXIPorts.Text" xml:space="preserve">
<value>Použít Xinput porty</value>
</data>
<data name="lbBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 27</value>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
</data>
<data name="lbBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 63</value>
<data name="linkProfiles.Text" xml:space="preserve">
<value>Složka profilu</value>
</data>
<data name="lbBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 99</value>
<data name="linkSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 17</value>
</data>
<data name="lbBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>740, 135</value>
<data name="linkSetup.Text" xml:space="preserve">
<value>Nastavení ovladače</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 17</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>Odinstalovat VBus ovladač</value>
</data>
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>874, 11</value>
</data>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 17</value>
</data>
<data name="llbHelp.Text" xml:space="preserve">
<value>Kláv. zkratky/O programu</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 17</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>Zkontrolovat aktualizace</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 17</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>Ovládací panel</value>
</data>
<data name="newProfileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="newProfileToolStripMenuItem.Text" xml:space="preserve">
<value>Nový profil</value>
</data>
<data name="nUDLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>174, 2</value>
</data>
<data name="nUDUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>148, 1</value>
</data>
<data name="nUDXIPorts.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 1</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>Otevřít</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>266, 28</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>522, 26</value>
</data>
<data name="pBStatus2.Location" type="System.Drawing.Point, System.Drawing">
<value>522, 62</value>
@ -277,95 +505,44 @@
<data name="pBStatus4.Location" type="System.Drawing.Point, System.Drawing">
<value>522, 134</value>
</data>
<data name="bnLight1.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 22</value>
<data name="pnlXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>253, 28</value>
</data>
<data name="bnLight1.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>289, 28</value>
</data>
<data name="bnLight2.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 58</value>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 21</value>
</data>
<data name="bnLight2.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
<data name="startMinimizedCheckBox.Text" xml:space="preserve">
<value>Spustit minimalizovaně</value>
</data>
<data name="bnLight4.Location" type="System.Drawing.Point, System.Drawing">
<value>1072, 130</value>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>303, 26</value>
</data>
<data name="bnLight4.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 28</value>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>Start</value>
</data>
<data name="lbNoControllers.Text" xml:space="preserve">
<value>Žádné připojené ovladače (max. 4)</value>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 21</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>Spustit při startu systému</value>
</data>
<data name="tabAutoProfiles.Text" xml:space="preserve">
<value>Automatické profily</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>Ovladače</value>
</data>
<data name="tabLog.Text" xml:space="preserve">
<value>Protokol</value>
</data>
<data name="tabProfiles.Text" xml:space="preserve">
<value>Profily</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 264</value>
</data>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="assignToController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.1</value>
</data>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Přiřadit ovladači č.4</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="deleteToolStripMenuItem.Text" xml:space="preserve">
<value>Odstranit (Del)</value>
</data>
<data name="duplicateToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="duplicateToolStripMenuItem.Text" xml:space="preserve">
<value>Duplikovat (Ctrl+D)</value>
</data>
<data name="newProfileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="newProfileToolStripMenuItem.Text" xml:space="preserve">
<value>Nový profil</value>
</data>
<data name="importToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="importToolStripMenuItem.Text" xml:space="preserve">
<value>Importovat</value>
</data>
<data name="exportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 26</value>
</data>
<data name="exportToolStripMenuItem.Text" xml:space="preserve">
<value>Exportovat</value>
</data>
<data name="tSOptions.Text" xml:space="preserve">
<value>Možnosti profilu</value>
<data name="tabSettings.Text" xml:space="preserve">
<value>Nastavení</value>
</data>
<data name="toolStripLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 24</value>
@ -373,14 +550,8 @@
<data name="toolStripLabel1.Text" xml:space="preserve">
<value>Název profilu</value>
</data>
<data name="tSTBProfile.Text" xml:space="preserve">
<value>&lt;zadejte název profilu&gt;</value>
</data>
<data name="tSBSaveProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 24</value>
</data>
<data name="tSBSaveProfile.Text" xml:space="preserve">
<value>Uložit profil</value>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>300, 6</value>
</data>
<data name="tSBCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 24</value>
@ -388,30 +559,6 @@
<data name="tSBCancel.Text" xml:space="preserve">
<value>Zrušit</value>
</data>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>207, 24</value>
</data>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>Pamatovat si velikost okna</value>
</data>
<data name="tsBNewProfle.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 24</value>
</data>
<data name="tsBNewProfle.Text" xml:space="preserve">
<value>Nový</value>
</data>
<data name="tsBNewProfle.ToolTipText" xml:space="preserve">
<value>Vytvořit nový profil</value>
</data>
<data name="tsBEditProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 24</value>
</data>
<data name="tsBEditProfile.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="tsBEditProfile.ToolTipText" xml:space="preserve">
<value>Upravit vybraný profil (Enter)</value>
</data>
<data name="tsBDeleteProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>94, 24</value>
</data>
@ -430,14 +577,14 @@
<data name="tSBDupProfile.ToolTipText" xml:space="preserve">
<value>Duplikovat vybraný profil (Ctrl+D)</value>
</data>
<data name="tSBImportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 24</value>
<data name="tsBEditProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 24</value>
</data>
<data name="tSBImportProfile.Text" xml:space="preserve">
<value>Importovat</value>
<data name="tsBEditProfile.Text" xml:space="preserve">
<value>Změnit</value>
</data>
<data name="tSBImportProfile.ToolTipText" xml:space="preserve">
<value>Importovat profil</value>
<data name="tsBEditProfile.ToolTipText" xml:space="preserve">
<value>Upravit vybraný profil (Enter)</value>
</data>
<data name="tSBExportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 24</value>
@ -448,179 +595,41 @@
<data name="tSBExportProfile.ToolTipText" xml:space="preserve">
<value>Exportovat vybraný profil</value>
</data>
<data name="tabAutoProfiles.Text" xml:space="preserve">
<value>Automatické profily</value>
<data name="tSBImportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 24</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>Nastavení</value>
<data name="tSBImportProfile.Text" xml:space="preserve">
<value>Importovat</value>
</data>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 21</value>
<data name="tSBImportProfile.ToolTipText" xml:space="preserve">
<value>Importovat profil</value>
</data>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>Skrýt DS4 ovladač</value>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>207, 24</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>289, 21</value>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>Pamatovat si velikost okna</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>Pro změnu profilu přejeďte po touchpadu</value>
<data name="tsBNewProfle.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 24</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>189, 21</value>
<data name="tsBNewProfle.Text" xml:space="preserve">
<value>Nový</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>Spustit při startu systému</value>
<data name="tsBNewProfle.ToolTipText" xml:space="preserve">
<value>Vytvořit nový profil</value>
</data>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 21</value>
<data name="tSBSaveProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 24</value>
</data>
<data name="startMinimizedCheckBox.Text" xml:space="preserve">
<value>Spustit minimalizovaně</value>
<data name="tSBSaveProfile.Text" xml:space="preserve">
<value>Uložit profil</value>
</data>
<data name="lbNotifications.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
<data name="tSOptions.Text" xml:space="preserve">
<value>Možnosti profilu</value>
</data>
<data name="lbNotifications.Text" xml:space="preserve">
<value>Zobrazit oznámení</value>
</data>
<data name="cBoxNotifications.Items" xml:space="preserve">
<value>Žádný</value>
</data>
<data name="cBoxNotifications.Items1" xml:space="preserve">
<value>Pouze varování</value>
</data>
<data name="cBoxNotifications.Items2" xml:space="preserve">
<value>Vše</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>201, 21</value>
</data>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>Odpojit od BT při zastavení</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>266, 28</value>
</data>
<data name="nUDLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>174, 2</value>
</data>
<data name="lbMsLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>237, 5</value>
</data>
<data name="cBFlashWhenLate.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 21</value>
</data>
<data name="cBFlashWhenLate.Text" xml:space="preserve">
<value>Blikat při vysoké latenci</value>
</data>
<data name="cBCloseMini.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 21</value>
</data>
<data name="cBCloseMini.Text" xml:space="preserve">
<value>Zavřít při minimalizování</value>
</data>
<data name="cBQuickCharge.Size" type="System.Drawing.Size, System.Drawing">
<value>126, 21</value>
</data>
<data name="cBQuickCharge.Text" xml:space="preserve">
<value>Rychlé nabíjení</value>
</data>
<data name="cBDownloadLangauge.Size" type="System.Drawing.Size, System.Drawing">
<value>348, 21</value>
</data>
<data name="cBDownloadLangauge.Text" xml:space="preserve">
<value>Při aktualizaci stáhnout také nové jazykové balíčky</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>253, 21</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>Při spuštění kontrolovat aktualizace</value>
</data>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>289, 28</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>hodin</value>
</data>
<data name="cBUpdateTime.Items1" xml:space="preserve">
<value>dní</value>
</data>
<data name="cBUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 0</value>
</data>
<data name="lbCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 17</value>
</data>
<data name="lbCheckEvery.Text" xml:space="preserve">
<value>Kontrolovat kažých</value>
</data>
<data name="nUDUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>148, 1</value>
</data>
<data name="pnlXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>253, 28</value>
</data>
<data name="lbUseXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>127, 17</value>
</data>
<data name="lbUseXIPorts.Text" xml:space="preserve">
<value>Použít Xinput porty</value>
</data>
<data name="nUDXIPorts.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 1</value>
</data>
<data name="lbLastXIPort.Location" type="System.Drawing.Point, System.Drawing">
<value>209, 4</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>369, 13</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>185, 85</value>
</data>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
</data>
<data name="linkProfiles.Text" xml:space="preserve">
<value>Složka profilu</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 17</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>Ovládací panel</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 17</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>Odinstalovat VBus ovladač</value>
</data>
<data name="linkSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 17</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>Nastavení ovladače</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 17</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>Zkontrolovat aktualizace</value>
</data>
<data name="tabLog.Text" xml:space="preserve">
<value>Protokol</value>
</data>
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 56</value>
</data>
<data name="useProfileColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
</data>
<data name="useProfileColorToolStripMenuItem.Text" xml:space="preserve">
<value>Použít barvu profilu</value>
<data name="tSTBProfile.Text" xml:space="preserve">
<value>&lt;zadejte název profilu&gt;</value>
</data>
<data name="useCustomColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
@ -628,16 +637,10 @@
<data name="useCustomColorToolStripMenuItem.Text" xml:space="preserve">
<value>Použít vlastní barvu</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>Start</value>
<data name="useProfileColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
</data>
<data name="chData.Text" xml:space="preserve">
<value>Data</value>
</data>
<data name="lbID.Text" xml:space="preserve">
<value>ID</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>Start</value>
<data name="useProfileColorToolStripMenuItem.Text" xml:space="preserve">
<value>Použít barvu profilu</value>
</data>
</root>

View File

@ -184,9 +184,6 @@
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Beenden (Mittlere Maustaste)</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Verbinde den DS4 exklusiv (experimentell)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1071, 94</value>
</data>

View File

@ -181,9 +181,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Χειριστήρια</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Σύνδεσε το DS4 αποκλειστικά(δοκιμαστικό)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1076, 94</value>
</data>

View File

@ -149,25 +149,25 @@
<value>280, 24</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil del Controlador 1</value>
<value>Editar perfil del Control 1</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>280, 24</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil del Controlador 2</value>
<value>Editar perfil del Control 2</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>280, 24</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil del Controlador 3</value>
<value>Editar perfil del Control 3</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>280, 24</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Editar perfil del Controlador 4</value>
<value>Editar perfil del Control 4</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>277, 6</value>
@ -302,10 +302,10 @@
<value>34, 28</value>
</data>
<data name="lbNoControllers.Text" xml:space="preserve">
<value>Ningún controlador conectado (Máx 4)</value>
<value>Ningún control conectado (Máx 4)</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>Controladores</value>
<value>Control</value>
</data>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 24</value>
@ -317,25 +317,25 @@
<value>240, 24</value>
</data>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignar al Controlador 1</value>
<value>Asignar al Control 1</value>
</data>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 24</value>
</data>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignar al Controlador 2</value>
<value>Asignar al Control 2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 24</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignar al Controlador 3</value>
<value>Asignar al Control 3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 24</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>Asignar al Controlador 4</value>
<value>Asignar al Control 4</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>240, 24</value>
@ -464,13 +464,13 @@
<value>185, 21</value>
</data>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>Ocultar Controlador DS4</value>
<value>Ocultar Control DS4</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>305, 21</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>Deslizar el panel táctil para cambiar de perfil</value>
<value>Deslice el panel táctil para cambiar de perfil</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>198, 21</value>
@ -599,7 +599,7 @@
<value>235, 17</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>Controlador/Configuración de Driver</value>
<value>Control/Configuración de Driver</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>261, 17</value>
@ -628,9 +628,6 @@
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 56</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Conectar DS4 exclusivamente (experimental)</value>
</data>
<data name="cBoxNotifications.Items" xml:space="preserve">
<value>Ninguna</value>
</data>

View File

@ -190,9 +190,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Ohjaimet</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Liitä vain DS4-ohjain (exclusive mode) (kokeellinen)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1074, 94</value>
</data>

View File

@ -199,9 +199,6 @@
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>287, 192</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Connecter DS4 exclusivement (expérimental)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1077, 94</value>
</data>

View File

@ -193,9 +193,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>בקרים</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>התחבר ל-DS4 בלעדית (ניסיוני)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1084, 94</value>
</data>

View File

@ -181,9 +181,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Vezérlők</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>DS4 exkluzív csatlakoztatása (kísérleti)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1077, 94</value>
</data>

View File

@ -190,9 +190,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Controller</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Sambung secara khusus (eksperimental)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1070, 94</value>
</data>

View File

@ -604,9 +604,6 @@
<data name="tabLog.Text" xml:space="preserve">
<value>Registro</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Connetti Solo DS4 (sperimentale)</value>
</data>
<data name="cBoxNotifications.Items" xml:space="preserve">
<value>Nessuno</value>
</data>

View File

@ -144,9 +144,6 @@
<data name="btnClear.Text" xml:space="preserve">
<value>삭제</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>DS4 만 연결하기 ( 실험버전 )</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>시작</value>
</data>

View File

@ -187,9 +187,6 @@
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>Sluiten (Scroll klik)</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Alleen de DS4 Controller Aansluiten (experimenteel)</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>483, 26</value>
</data>

View File

@ -190,9 +190,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Kontrolery</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Podłącz kontroler DS4 na wyłączność (eksperymentalne)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1085, 94</value>
</data>

View File

@ -187,9 +187,6 @@
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 192</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Conectar exclusivamente o DS4 (experimental)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1038, 94</value>
</data>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -196,9 +196,6 @@
<data name="tabControllers.Text" xml:space="preserve">
<value>Krmilniki</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Poveži izključno z DS4</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1079, 94</value>
</data>

View File

@ -141,9 +141,6 @@
<data name="cMTaskbar.ToolTip" xml:space="preserve">
<value />
</data>
<data name="btnConnectDS4Win10.ToolTip" xml:space="preserve">
<value />
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1083, 94</value>

View File

@ -196,9 +196,6 @@
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>322, 192</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Ексклюзивне підключення DS4 (експерементальне)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1069, 94</value>
</data>

View File

@ -6362,9 +6362,6 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>Kết nối DS4 qua cmd (thử nghiệm)</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1083, 94</value>
</data>

View File

@ -123,69 +123,21 @@
<data name="chData.Text" xml:space="preserve">
<value>数据</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>开始</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>980, 11</value>
<value>774, 9</value>
</data>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>62, 17</value>
<value>60, 13</value>
</data>
<data name="llbHelp.Text" xml:space="preserve">
<value>热键/关于</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>清空</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄1 配置文件</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄2 配置文件</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄3 配置文件</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄4 配置文件</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>225, 6</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>启动</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>打开</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>退出(鼠标中键)</value>
<data name="btnStartStop.Text" xml:space="preserve">
<value>开始</value>
</data>
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 192</value>
<value>191, 186</value>
</data>
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6359,188 +6311,245 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄1 配置文件</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄2 配置文件</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄3 配置文件</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>编辑 手柄4 配置文件</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 6</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>启动</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>打开</value>
</data>
<data name="openProgramFolderToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>退出(鼠标中键)</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>手柄</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1053, 94</value>
<value>797, 89</value>
</data>
<data name="bnLight3.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 28</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>493, 26</value>
<value>96, 22</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>999, 94</value>
<value>757, 89</value>
</data>
<data name="bnEditC3.Text" xml:space="preserve">
<value>编辑</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>999, 130</value>
<value>757, 117</value>
</data>
<data name="bnEditC4.Text" xml:space="preserve">
<value>编辑</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>853, 24</value>
<value>640, 33</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>999, 58</value>
<value>757, 61</value>
</data>
<data name="bnEditC2.Text" xml:space="preserve">
<value>编辑</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>853, 60</value>
<value>640, 61</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>853, 96</value>
<value>640, 89</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>999, 22</value>
<value>757, 33</value>
</data>
<data name="bnEditC1.Text" xml:space="preserve">
<value>编辑</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>853, 132</value>
<value>640, 117</value>
</data>
<data name="lbSelectedProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>880, 0</value>
<value>653, 7</value>
</data>
<data name="lbSelectedProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 18</value>
<value>85, 15</value>
</data>
<data name="lbSelectedProfile.Text" xml:space="preserve">
<value>已选配置文件</value>
</data>
<data name="lbStatus.Location" type="System.Drawing.Point, System.Drawing">
<value>495, 0</value>
<value>387, 7</value>
</data>
<data name="lbStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 18</value>
<value>33, 15</value>
</data>
<data name="lbStatus.Text" xml:space="preserve">
<value>状态</value>
</data>
<data name="lbBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>723, 0</value>
<value>491, 7</value>
</data>
<data name="lbBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 18</value>
<value>33, 15</value>
</data>
<data name="lbBattery.Text" xml:space="preserve">
<value>电池</value>
</data>
<data name="lbBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>718, 27</value>
<value>488, 36</value>
</data>
<data name="lbBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>718, 63</value>
<value>488, 64</value>
</data>
<data name="lbBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>718, 99</value>
<value>488, 92</value>
</data>
<data name="lbBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>718, 135</value>
</data>
<data name="pBStatus2.Location" type="System.Drawing.Point, System.Drawing">
<value>493, 62</value>
</data>
<data name="pBStatus3.Location" type="System.Drawing.Point, System.Drawing">
<value>493, 98</value>
</data>
<data name="pBStatus4.Location" type="System.Drawing.Point, System.Drawing">
<value>493, 134</value>
<value>488, 120</value>
</data>
<data name="bnLight1.Location" type="System.Drawing.Point, System.Drawing">
<value>1053, 22</value>
<value>797, 33</value>
</data>
<data name="bnLight1.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 28</value>
<value>96, 22</value>
</data>
<data name="bnLight2.Location" type="System.Drawing.Point, System.Drawing">
<value>1053, 58</value>
<value>797, 61</value>
</data>
<data name="bnLight2.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 28</value>
<value>96, 22</value>
</data>
<data name="bnLight4.Location" type="System.Drawing.Point, System.Drawing">
<value>1053, 130</value>
<value>797, 117</value>
</data>
<data name="bnLight4.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 28</value>
<value>96, 22</value>
</data>
<data name="lbLinkProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>563, 0</value>
</data>
<data name="linkCB1.Location" type="System.Drawing.Point, System.Drawing">
<value>589, 37</value>
</data>
<data name="linkCB2.Location" type="System.Drawing.Point, System.Drawing">
<value>589, 65</value>
</data>
<data name="linkCB3.Location" type="System.Drawing.Point, System.Drawing">
<value>589, 93</value>
</data>
<data name="linkCB4.Location" type="System.Drawing.Point, System.Drawing">
<value>589, 121</value>
</data>
<data name="lbNoControllers.Text" xml:space="preserve">
<value>没有连接的手柄最多4个</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>手柄</value>
<data name="tabProfiles.Text" xml:space="preserve">
<value>配置文件</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 224</value>
</data>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>编辑</value>
</data>
<data name="assignToController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>指定至 手柄1</value>
</data>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>指定至 手柄2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>指定至 手柄3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>指定至 手柄4</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="deleteToolStripMenuItem.Text" xml:space="preserve">
<value>删除Del</value>
</data>
<data name="duplicateToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="duplicateToolStripMenuItem.Text" xml:space="preserve">
<value>复制Ctrl+D</value>
</data>
<data name="newProfileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="newProfileToolStripMenuItem.Text" xml:space="preserve">
<value>新建配置文件</value>
</data>
<data name="importToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="importToolStripMenuItem.Text" xml:space="preserve">
<value>导入</value>
</data>
<data name="exportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 26</value>
<value>161, 22</value>
</data>
<data name="exportToolStripMenuItem.Text" xml:space="preserve">
<value>导出</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>191, 264</value>
<data name="tSOptions.Text" xml:space="preserve">
<value>配置选项</value>
</data>
<data name="toolStripLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 24</value>
<value>72, 24</value>
</data>
<data name="toolStripLabel1.Text" xml:space="preserve">
<value>配置名称:</value>
@ -6549,28 +6558,25 @@
<value>&lt;输入配置名称&gt;</value>
</data>
<data name="tSBSaveProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>97, 24</value>
<value>83, 24</value>
</data>
<data name="tSBSaveProfile.Text" xml:space="preserve">
<value>保存配置</value>
</data>
<data name="tSBCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBCancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 24</value>
<value>148, 24</value>
</data>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>关闭后保存窗口大小</value>
</data>
<data name="tSOptions.Text" xml:space="preserve">
<value>配置选项</value>
</data>
<data name="tsBNewProfle.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBNewProfle.Text" xml:space="preserve">
<value>新建</value>
@ -6579,7 +6585,7 @@
<value>新建配置文件</value>
</data>
<data name="tsBEditProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBEditProfile.Text" xml:space="preserve">
<value>编辑</value>
@ -6588,7 +6594,7 @@
<value>编辑选定的配置Enter</value>
</data>
<data name="tsBDeleteProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBDeleteProfile.Text" xml:space="preserve">
<value>删除</value>
@ -6597,7 +6603,7 @@
<value>删除选定的配置Delete</value>
</data>
<data name="tSBDupProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBDupProfile.Text" xml:space="preserve">
<value>复制</value>
@ -6606,7 +6612,7 @@
<value>复制选定的配置Ctrl+D</value>
</data>
<data name="tSBImportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBImportProfile.Text" xml:space="preserve">
<value>导入</value>
@ -6615,7 +6621,7 @@
<value>导入选定的配置</value>
</data>
<data name="tSBExportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBExportProfile.Text" xml:space="preserve">
<value>导出</value>
@ -6623,150 +6629,42 @@
<data name="tSBExportProfile.ToolTipText" xml:space="preserve">
<value>导出选定的配置</value>
</data>
<data name="tabProfiles.Text" xml:space="preserve">
<value>配置文件</value>
</data>
<data name="tabAutoProfiles.Text" xml:space="preserve">
<value>自动配置</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>设置</value>
</data>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 21</value>
<value>101, 17</value>
</data>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>隐藏 DS4 手柄</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 21</value>
<value>158, 17</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>滑动触摸板更换配置文件</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 21</value>
<value>86, 17</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>开机自启动</value>
</data>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 21</value>
<value>98, 17</value>
</data>
<data name="startMinimizedCheckBox.Text" xml:space="preserve">
<value>以最小化启动</value>
</data>
<data name="lbNotifications.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 17</value>
<value>55, 13</value>
</data>
<data name="lbNotifications.Text" xml:space="preserve">
<value>显示通知</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 21</value>
</data>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>停止时断开蓝牙</value>
</data>
<data name="nUDLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>140, 2</value>
</data>
<data name="lbMsLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>203, 5</value>
</data>
<data name="cBFlashWhenLate.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 21</value>
</data>
<data name="cBFlashWhenLate.Text" xml:space="preserve">
<value>高延迟时闪烁灯条</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 28</value>
</data>
<data name="cBCloseMini.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 21</value>
</data>
<data name="cBCloseMini.Text" xml:space="preserve">
<value>关闭时最小化</value>
</data>
<data name="cBQuickCharge.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 21</value>
</data>
<data name="cBQuickCharge.Text" xml:space="preserve">
<value>快速充电</value>
</data>
<data name="cBDownloadLangauge.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 21</value>
</data>
<data name="cBDownloadLangauge.Text" xml:space="preserve">
<value>下载更新语言包</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 21</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>启动时检查更新</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>小时</value>
</data>
<data name="cBUpdateTime.Items1" xml:space="preserve">
<value>天</value>
</data>
<data name="lbCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>76, 17</value>
</data>
<data name="lbCheckEvery.Text" xml:space="preserve">
<value>检查频率 每</value>
</data>
<data name="lbUseXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>92, 17</value>
</data>
<data name="lbUseXIPorts.Text" xml:space="preserve">
<value>使用Xinput接口</value>
</data>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 17</value>
</data>
<data name="linkProfiles.Text" xml:space="preserve">
<value>配置文件目录</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>控制面板</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>102, 17</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>卸载 VBus 驱动</value>
</data>
<data name="linkSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>88, 17</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>手柄/驱动 安装</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 17</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>立即检查更新</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>287, 13</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 85</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>设置</value>
</data>
<data name="tabLog.Text" xml:space="preserve">
<value>日志</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>仅连接DS4 (实验性功能)</value>
</data>
<data name="cBoxNotifications.Items" xml:space="preserve">
<value>不显示</value>
</data>
@ -6776,13 +6674,136 @@
<data name="cBoxNotifications.Items2" xml:space="preserve">
<value>显示全部</value>
</data>
<data name="lbID.Text" xml:space="preserve">
<value>ID</value>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 17</value>
</data>
<data name="useCustomColorToolStripMenuItem.Text" xml:space="preserve">
<value>使用自定义颜色</value>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>停止时断开蓝牙</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 28</value>
</data>
<data name="nUDLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>140, 2</value>
</data>
<data name="lbMsLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>203, 5</value>
</data>
<data name="cBFlashWhenLate.Size" type="System.Drawing.Size, System.Drawing">
<value>122, 17</value>
</data>
<data name="cBFlashWhenLate.Text" xml:space="preserve">
<value>高延迟时闪烁灯条</value>
</data>
<data name="cBCloseMini.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 273</value>
</data>
<data name="cBCloseMini.Size" type="System.Drawing.Size, System.Drawing">
<value>98, 17</value>
</data>
<data name="cBCloseMini.Text" xml:space="preserve">
<value>关闭时最小化</value>
</data>
<data name="cBQuickCharge.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 296</value>
</data>
<data name="cBQuickCharge.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
</data>
<data name="cBQuickCharge.Text" xml:space="preserve">
<value>快速充电</value>
</data>
<data name="cBUseWhiteIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 318</value>
</data>
<data name="cBUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 10</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 17</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>启动时检查更新</value>
</data>
<data name="pNUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 33</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>小时</value>
</data>
<data name="cBUpdateTime.Items1" xml:space="preserve">
<value>天</value>
</data>
<data name="lbCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 13</value>
</data>
<data name="lbCheckEvery.Text" xml:space="preserve">
<value>检查频率 每</value>
</data>
<data name="pnlXIPorts.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 61</value>
</data>
<data name="lbUseXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 13</value>
</data>
<data name="lbUseXIPorts.Text" xml:space="preserve">
<value>使用Xinput接口</value>
</data>
<data name="languagePackComboBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 89</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 122</value>
</data>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 13</value>
</data>
<data name="linkProfiles.Text" xml:space="preserve">
<value>配置文件目录</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 13</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>控制面板</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 13</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>卸载 VBus 驱动</value>
</data>
<data name="linkSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>87, 13</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>手柄/驱动 安装</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 13</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>立即检查更新</value>
</data>
<data name="tabLog.Text" xml:space="preserve">
<value>日志</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>清空</value>
</data>
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>166, 48</value>
</data>
<data name="useProfileColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 22</value>
</data>
<data name="useProfileColorToolStripMenuItem.Text" xml:space="preserve">
<value>使用配置颜色</value>
</data>
<data name="useCustomColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>165, 22</value>
</data>
<data name="useCustomColorToolStripMenuItem.Text" xml:space="preserve">
<value>使用自定义颜色</value>
</data>
</root>

View File

@ -123,72 +123,24 @@
<data name="chData.Text" xml:space="preserve">
<value>資料</value>
</data>
<data name="btnStartStop.Text" xml:space="preserve">
<value>開始</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>973, 22</value>
</data>
<data name="llbHelp.Location" type="System.Drawing.Point, System.Drawing">
<value>986, 11</value>
<value>774, 9</value>
</data>
<data name="llbHelp.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 17</value>
<value>60, 13</value>
</data>
<data name="llbHelp.Text" xml:space="preserve">
<value>熱鍵/關於</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>清除</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 1 設定檔</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 2 設定檔</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 3 設定檔</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 4 設定檔</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>225, 6</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<data name="btnStartStop.Text" xml:space="preserve">
<value>開始</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>開啟</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>228, 26</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>離開 (滑鼠中鍵)</value>
<data name="lbLastMessage.Size" type="System.Drawing.Size, System.Drawing">
<value>973, 22</value>
</data>
<data name="cMTaskbar.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 192</value>
<value>191, 186</value>
</data>
<data name="notifyIcon1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
@ -6362,191 +6314,257 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
</value>
</data>
<data name="btnConnectDS4Win10.Text" xml:space="preserve">
<value>獨佔地連接 DS4 (實驗功能)</value>
<data name="editProfileForController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController1ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 1 設定檔</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController2ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 2 設定檔</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController3ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 3 設定檔</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="editProfileForController4ToolStripMenuItem.Text" xml:space="preserve">
<value>編輯控制器 4 設定檔</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 6</value>
</data>
<data name="startToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="startToolStripMenuItem.Text" xml:space="preserve">
<value>開始</value>
</data>
<data name="openToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="openToolStripMenuItem.Text" xml:space="preserve">
<value>開啟</value>
</data>
<data name="openProgramFolderToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="exitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>190, 22</value>
</data>
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>離開 (滑鼠中鍵)</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>控制器</value>
</data>
<data name="bnLight3.Location" type="System.Drawing.Point, System.Drawing">
<value>1082, 94</value>
<value>795, 89</value>
</data>
<data name="bnLight3.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 28</value>
<value>98, 22</value>
</data>
<data name="pBStatus1.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 26</value>
<value>382, 34</value>
</data>
<data name="bnEditC3.Location" type="System.Drawing.Point, System.Drawing">
<value>1028, 94</value>
<value>755, 89</value>
</data>
<data name="bnEditC3.Text" xml:space="preserve">
<value>編輯</value>
</data>
<data name="bnEditC4.Location" type="System.Drawing.Point, System.Drawing">
<value>1028, 130</value>
<value>755, 117</value>
</data>
<data name="bnEditC4.Text" xml:space="preserve">
<value>編輯</value>
</data>
<data name="cBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>882, 23</value>
<value>638, 33</value>
</data>
<data name="bnEditC2.Location" type="System.Drawing.Point, System.Drawing">
<value>1028, 58</value>
<value>755, 61</value>
</data>
<data name="bnEditC2.Text" xml:space="preserve">
<value>編輯</value>
</data>
<data name="cBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>882, 59</value>
<value>638, 61</value>
</data>
<data name="cBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>882, 95</value>
<value>638, 89</value>
</data>
<data name="bnEditC1.Location" type="System.Drawing.Point, System.Drawing">
<value>1028, 22</value>
<value>755, 33</value>
</data>
<data name="bnEditC1.Text" xml:space="preserve">
<value>編輯</value>
</data>
<data name="cBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>882, 131</value>
<value>638, 117</value>
</data>
<data name="lbSelectedProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>929, 0</value>
<value>670, 7</value>
</data>
<data name="lbSelectedProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 18</value>
<value>46, 15</value>
</data>
<data name="lbSelectedProfile.Text" xml:space="preserve">
<value>設定檔</value>
</data>
<data name="lbStatus.Location" type="System.Drawing.Point, System.Drawing">
<value>514, 0</value>
<value>385, 7</value>
</data>
<data name="lbStatus.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 18</value>
<value>33, 15</value>
</data>
<data name="lbStatus.Text" xml:space="preserve">
<value>狀態</value>
</data>
<data name="lbBattery.Location" type="System.Drawing.Point, System.Drawing">
<value>750, 0</value>
<value>489, 7</value>
</data>
<data name="lbBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 18</value>
<value>33, 15</value>
</data>
<data name="lbBattery.Text" xml:space="preserve">
<value>電池</value>
</data>
<data name="lbBatt1.Location" type="System.Drawing.Point, System.Drawing">
<value>743, 27</value>
<value>486, 36</value>
</data>
<data name="lbBatt2.Location" type="System.Drawing.Point, System.Drawing">
<value>743, 63</value>
<value>486, 64</value>
</data>
<data name="lbBatt3.Location" type="System.Drawing.Point, System.Drawing">
<value>743, 99</value>
<value>486, 92</value>
</data>
<data name="lbBatt4.Location" type="System.Drawing.Point, System.Drawing">
<value>743, 135</value>
<value>486, 120</value>
</data>
<data name="pBStatus2.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 62</value>
<value>382, 62</value>
</data>
<data name="pBStatus3.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 98</value>
<value>382, 90</value>
</data>
<data name="pBStatus4.Location" type="System.Drawing.Point, System.Drawing">
<value>510, 134</value>
<value>382, 118</value>
</data>
<data name="bnLight1.Location" type="System.Drawing.Point, System.Drawing">
<value>1082, 22</value>
<value>795, 33</value>
</data>
<data name="bnLight1.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 28</value>
<value>98, 22</value>
</data>
<data name="bnLight2.Location" type="System.Drawing.Point, System.Drawing">
<value>1082, 58</value>
<value>795, 61</value>
</data>
<data name="bnLight2.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 28</value>
<value>98, 22</value>
</data>
<data name="bnLight4.Location" type="System.Drawing.Point, System.Drawing">
<value>1082, 130</value>
<value>795, 117</value>
</data>
<data name="bnLight4.Size" type="System.Drawing.Size, System.Drawing">
<value>36, 28</value>
<value>98, 22</value>
</data>
<data name="lbLinkProfile.Location" type="System.Drawing.Point, System.Drawing">
<value>561, 0</value>
</data>
<data name="linkCB1.Location" type="System.Drawing.Point, System.Drawing">
<value>587, 37</value>
</data>
<data name="linkCB2.Location" type="System.Drawing.Point, System.Drawing">
<value>587, 65</value>
</data>
<data name="linkCB3.Location" type="System.Drawing.Point, System.Drawing">
<value>587, 93</value>
</data>
<data name="linkCB4.Location" type="System.Drawing.Point, System.Drawing">
<value>587, 121</value>
</data>
<data name="lbNoControllers.Text" xml:space="preserve">
<value>沒有連接的控制器 (最多 4 個)</value>
</data>
<data name="tabControllers.Text" xml:space="preserve">
<value>控制器</value>
<data name="tabProfiles.Text" xml:space="preserve">
<value>設定檔</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>162, 224</value>
</data>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>編輯</value>
</data>
<data name="assignToController1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController1ToolStripMenuItem.Text" xml:space="preserve">
<value>指定給控制器 1</value>
</data>
<data name="assignToController2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController2ToolStripMenuItem.Text" xml:space="preserve">
<value>指定給控制器 2</value>
</data>
<data name="assignToController3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController3ToolStripMenuItem.Text" xml:space="preserve">
<value>指定給控制器 3</value>
</data>
<data name="assignToController4ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="assignToController4ToolStripMenuItem.Text" xml:space="preserve">
<value>指定給控制器 4</value>
</data>
<data name="deleteToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="deleteToolStripMenuItem.Text" xml:space="preserve">
<value>刪除 (Del)</value>
</data>
<data name="duplicateToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="duplicateToolStripMenuItem.Text" xml:space="preserve">
<value>複製 (Ctrl+D)</value>
</data>
<data name="newProfileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="newProfileToolStripMenuItem.Text" xml:space="preserve">
<value>新設定檔</value>
</data>
<data name="importToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="importToolStripMenuItem.Text" xml:space="preserve">
<value>匯入</value>
</data>
<data name="exportToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>192, 26</value>
<value>161, 22</value>
</data>
<data name="exportToolStripMenuItem.Text" xml:space="preserve">
<value>匯出</value>
</data>
<data name="cMProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>193, 264</value>
<data name="tSOptions.Text" xml:space="preserve">
<value>設定檔選項</value>
</data>
<data name="toolStripLabel1.Size" type="System.Drawing.Size, System.Drawing">
<value>105, 24</value>
<value>85, 24</value>
</data>
<data name="toolStripLabel1.Text" xml:space="preserve">
<value>設定檔名稱:</value>
@ -6555,28 +6573,25 @@
<value>&lt;輸入設定檔名稱&gt;</value>
</data>
<data name="tSBSaveProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 24</value>
<value>96, 24</value>
</data>
<data name="tSBSaveProfile.Text" xml:space="preserve">
<value>儲存設定檔</value>
</data>
<data name="tSBCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBCancel.Text" xml:space="preserve">
<value>取消</value>
</data>
<data name="tSBKeepSize.Size" type="System.Drawing.Size, System.Drawing">
<value>225, 24</value>
<value>187, 24</value>
</data>
<data name="tSBKeepSize.Text" xml:space="preserve">
<value>關閉後保留現在的視窗大小</value>
</data>
<data name="tSOptions.Text" xml:space="preserve">
<value>設定檔選項</value>
</data>
<data name="tsBNewProfle.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBNewProfle.Text" xml:space="preserve">
<value>新增</value>
@ -6585,7 +6600,7 @@
<value>新增設定檔</value>
</data>
<data name="tsBEditProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBEditProfile.Text" xml:space="preserve">
<value>編輯</value>
@ -6594,7 +6609,7 @@
<value>編輯選擇的設定檔 (Enter)</value>
</data>
<data name="tsBDeleteProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tsBDeleteProfile.Text" xml:space="preserve">
<value>刪除</value>
@ -6603,7 +6618,7 @@
<value>刪除選擇的設定檔 (Delete)</value>
</data>
<data name="tSBDupProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBDupProfile.Text" xml:space="preserve">
<value>複製</value>
@ -6612,7 +6627,7 @@
<value>複製選擇的設定檔 (Ctrl+D)</value>
</data>
<data name="tSBImportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBImportProfile.Text" xml:space="preserve">
<value>匯入</value>
@ -6621,7 +6636,7 @@
<value>匯入一個或多個設定檔</value>
</data>
<data name="tSBExportProfile.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 24</value>
<value>57, 24</value>
</data>
<data name="tSBExportProfile.Text" xml:space="preserve">
<value>匯出</value>
@ -6629,38 +6644,41 @@
<data name="tSBExportProfile.ToolTipText" xml:space="preserve">
<value>匯出選擇的設定檔</value>
</data>
<data name="tabProfiles.Text" xml:space="preserve">
<value>設定檔</value>
</data>
<data name="tabAutoProfiles.Text" xml:space="preserve">
<value>自動設定檔</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>設定</value>
</data>
<data name="hideDS4CheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 21</value>
<value>113, 17</value>
</data>
<data name="hideDS4CheckBox.Text" xml:space="preserve">
<value>隱藏 DS4 控制器</value>
</data>
<data name="cBSwipeProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>151, 21</value>
<value>158, 17</value>
</data>
<data name="cBSwipeProfiles.Text" xml:space="preserve">
<value>滑動觸控板以更換設定檔</value>
</data>
<data name="StartWindowsCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>118, 21</value>
<value>122, 17</value>
</data>
<data name="StartWindowsCheckBox.Text" xml:space="preserve">
<value>開機自動執行程式</value>
</data>
<data name="startMinimizedCheckBox.Size" type="System.Drawing.Size, System.Drawing">
<value>99, 21</value>
<value>98, 17</value>
</data>
<data name="startMinimizedCheckBox.Text" xml:space="preserve">
<value>開啟時最小化</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 28</value>
</data>
<data name="lbNotifications.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
<value>55, 13</value>
</data>
<data name="lbNotifications.Text" xml:space="preserve">
<value>顯示通知</value>
@ -6677,15 +6695,21 @@
<data name="cBoxNotifications.Location" type="System.Drawing.Point, System.Drawing">
<value>68, 1</value>
</data>
<data name="panel1.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 28</value>
<data name="cBDisconnectBT.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 222</value>
</data>
<data name="cBDisconnectBT.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 21</value>
<value>110, 17</value>
</data>
<data name="cBDisconnectBT.Text" xml:space="preserve">
<value>停止時中斷藍牙</value>
</data>
<data name="panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 245</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 28</value>
</data>
<data name="nUDLatency.Location" type="System.Drawing.Point, System.Drawing">
<value>140, 2</value>
</data>
@ -6693,38 +6717,47 @@
<value>203, 5</value>
</data>
<data name="cBFlashWhenLate.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 21</value>
<value>134, 17</value>
</data>
<data name="cBFlashWhenLate.Text" xml:space="preserve">
<value>在高延遲時閃爍光條</value>
</data>
<data name="panel2.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 28</value>
<data name="cBCloseMini.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 279</value>
</data>
<data name="cBCloseMini.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 21</value>
<value>98, 17</value>
</data>
<data name="cBCloseMini.Text" xml:space="preserve">
<value>關閉時最小化</value>
</data>
<data name="cBQuickCharge.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 302</value>
</data>
<data name="cBQuickCharge.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
<value>74, 17</value>
</data>
<data name="cBQuickCharge.Text" xml:space="preserve">
<value>快速充電</value>
</data>
<data name="cBDownloadLangauge.Size" type="System.Drawing.Size, System.Drawing">
<value>118, 21</value>
<data name="cBUseWhiteIcon.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 324</value>
</data>
<data name="cBDownloadLangauge.Text" xml:space="preserve">
<value>更新時下載語言包</value>
<data name="cBUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 10</value>
</data>
<data name="cBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>113, 21</value>
<value>110, 17</value>
</data>
<data name="cBUpdate.Text" xml:space="preserve">
<value>啟動時檢查更新</value>
</data>
<data name="pNUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 33</value>
</data>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 28</value>
</data>
<data name="cBUpdateTime.Items" xml:space="preserve">
<value>小時</value>
</data>
@ -6735,7 +6768,7 @@
<value>117, 0</value>
</data>
<data name="lbCheckEvery.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
<value>43, 13</value>
</data>
<data name="lbCheckEvery.Text" xml:space="preserve">
<value>檢查每</value>
@ -6743,11 +6776,14 @@
<data name="nUDUpdateTime.Location" type="System.Drawing.Point, System.Drawing">
<value>54, 1</value>
</data>
<data name="pNUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 28</value>
<data name="pnlXIPorts.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 67</value>
</data>
<data name="pnlXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 28</value>
</data>
<data name="lbUseXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>89, 17</value>
<value>79, 13</value>
</data>
<data name="lbUseXIPorts.Text" xml:space="preserve">
<value>使用 Xinput 埠</value>
@ -6758,67 +6794,61 @@
<data name="lbLastXIPort.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 4</value>
</data>
<data name="pnlXIPorts.Size" type="System.Drawing.Size, System.Drawing">
<value>229, 28</value>
<data name="languagePackComboBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 101</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>248, 134</value>
</data>
<data name="linkProfiles.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
<value>79, 13</value>
</data>
<data name="linkProfiles.Text" xml:space="preserve">
<value>設定檔資料夾</value>
</data>
<data name="lnkControllers.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 17</value>
<value>55, 13</value>
</data>
<data name="lnkControllers.Text" xml:space="preserve">
<value>控制面版</value>
</data>
<data name="linkUninstall.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
<value>86, 13</value>
</data>
<data name="linkUninstall.Text" xml:space="preserve">
<value>移除 VBus 驅動</value>
</data>
<data name="linkSetup.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 17</value>
<value>123, 13</value>
</data>
<data name="linkSetup.Text" xml:space="preserve">
<value>控制器/驅動程式 設定</value>
</data>
<data name="lLBUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 17</value>
<value>55, 13</value>
</data>
<data name="lLBUpdate.Text" xml:space="preserve">
<value>檢查更新</value>
</data>
<data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>253, 13</value>
</data>
<data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>123, 85</value>
</data>
<data name="tabSettings.Text" xml:space="preserve">
<value>設定</value>
</data>
<data name="tabLog.Text" xml:space="preserve">
<value>紀錄</value>
</data>
<data name="btnClear.Text" xml:space="preserve">
<value>清除</value>
</data>
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>166, 48</value>
</data>
<data name="useProfileColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 26</value>
<value>165, 22</value>
</data>
<data name="useProfileColorToolStripMenuItem.Text" xml:space="preserve">
<value>使用設定檔顏色</value>
</data>
<data name="useCustomColorToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 26</value>
<value>165, 22</value>
</data>
<data name="useCustomColorToolStripMenuItem.Text" xml:space="preserve">
<value>使用自訂顏色</value>
</data>
<data name="cMCustomLed.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 56</value>
</data>
<data name="lbID.Text" xml:space="preserve">
<value>ID</value>
</data>
</root>

View File

@ -121,7 +121,7 @@
<value>Guardar</value>
</data>
<data name="tBProfile.Text" xml:space="preserve">
<value>&lt;Escribe nuevo nombre aqui&gt;</value>
<value>&lt;Escribe el nuevo nombre aqui&gt;</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancelar</value>

View File

@ -218,14 +218,11 @@
</data>
<data name="$this.Text" xml:space="preserve">
<value>Type name of New Profile</value>
<comment>@Invariant</comment></data>
</data>
<data name="&gt;&gt;tBProfile.Name" xml:space="preserve">
<value>tBProfile</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>vi</value>
</metadata>
</root>

View File

@ -117,13 +117,13 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Hủy</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Lưu</value>
</data>
<data name="tBProfile.Text" xml:space="preserve">
<value>&lt;gõ tên Profile mới&gt;</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Hủy</value>
</data>
</root>

View File

@ -40,6 +40,8 @@
this.tPHotkeys = new System.Windows.Forms.TabPage();
this.lbHotkeys = new System.Windows.Forms.Label();
this.tPCredits = new System.Windows.Forms.TabPage();
this.linkCurrentSite = new System.Windows.Forms.LinkLabel();
this.linkTeokp = new System.Windows.Forms.LinkLabel();
this.linkKiliansch = new System.Windows.Forms.LinkLabel();
this.linkChamilsaan = new System.Windows.Forms.LinkLabel();
this.linkBoganhobo = new System.Windows.Forms.LinkLabel();
@ -85,11 +87,15 @@
this.lbTranslators = new System.Windows.Forms.Label();
this.linkSourceCode = new System.Windows.Forms.LinkLabel();
this.lbLinkText = new System.Windows.Forms.Label();
this.linkTeokp = new System.Windows.Forms.LinkLabel();
this.coinTP = new System.Windows.Forms.TabPage();
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
this.textBox2 = new System.Windows.Forms.TextBox();
this.tCAbout.SuspendLayout();
this.tPHotkeys.SuspendLayout();
this.tPCredits.SuspendLayout();
this.tLPTranslators.SuspendLayout();
this.coinTP.SuspendLayout();
this.flowLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// linkElectro
@ -104,7 +110,7 @@
resources.ApplyResources(this.linkJays2Kings, "linkJays2Kings");
this.linkJays2Kings.Name = "linkJays2Kings";
this.linkJays2Kings.TabStop = true;
this.linkJays2Kings.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkJays2Kings_LinkClicked);
this.linkJays2Kings.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkJays2Kings_LinkClicked);
//
// lbAbout
//
@ -130,19 +136,20 @@
resources.ApplyResources(this.lLChangelog, "lLChangelog");
this.lLChangelog.Name = "lLChangelog";
this.lLChangelog.TabStop = true;
this.lLChangelog.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lLChangelog_LinkClicked);
this.lLChangelog.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LLChangelog_LinkClicked);
//
// linkDonate
//
resources.ApplyResources(this.linkDonate, "linkDonate");
this.linkDonate.Name = "linkDonate";
this.linkDonate.TabStop = true;
this.linkDonate.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkDonate_LinkClicked);
this.linkDonate.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkDonate_LinkClicked);
//
// tCAbout
//
this.tCAbout.Controls.Add(this.tPHotkeys);
this.tCAbout.Controls.Add(this.tPCredits);
this.tCAbout.Controls.Add(this.coinTP);
resources.ApplyResources(this.tCAbout, "tCAbout");
this.tCAbout.Name = "tCAbout";
this.tCAbout.SelectedIndex = 0;
@ -161,6 +168,7 @@
//
// tPCredits
//
this.tPCredits.Controls.Add(this.linkCurrentSite);
this.tPCredits.Controls.Add(this.linkTeokp);
this.tPCredits.Controls.Add(this.linkKiliansch);
this.tPCredits.Controls.Add(this.linkChamilsaan);
@ -177,6 +185,20 @@
this.tPCredits.Name = "tPCredits";
this.tPCredits.UseVisualStyleBackColor = true;
//
// linkCurrentSite
//
resources.ApplyResources(this.linkCurrentSite, "linkCurrentSite");
this.linkCurrentSite.Name = "linkCurrentSite";
this.linkCurrentSite.TabStop = true;
this.linkCurrentSite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkCurrentSite_LinkClicked);
//
// linkTeokp
//
resources.ApplyResources(this.linkTeokp, "linkTeokp");
this.linkTeokp.Name = "linkTeokp";
this.linkTeokp.TabStop = true;
this.linkTeokp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkTeokp_LinkClicked);
//
// linkKiliansch
//
resources.ApplyResources(this.linkKiliansch, "linkKiliansch");
@ -441,25 +463,38 @@
resources.ApplyResources(this.linkSourceCode, "linkSourceCode");
this.linkSourceCode.Name = "linkSourceCode";
this.linkSourceCode.TabStop = true;
this.linkSourceCode.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkSourceCode_LinkClicked);
this.linkSourceCode.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkSourceCode_LinkClicked);
//
// lbLinkText
//
resources.ApplyResources(this.lbLinkText, "lbLinkText");
this.lbLinkText.Name = "lbLinkText";
//
// linkTeokp
// coinTP
//
resources.ApplyResources(this.linkTeokp, "linkTeokp");
this.linkTeokp.Name = "linkTeokp";
this.linkTeokp.TabStop = true;
this.linkTeokp.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkTeokp_LinkClicked);
this.coinTP.Controls.Add(this.flowLayoutPanel1);
resources.ApplyResources(this.coinTP, "coinTP");
this.coinTP.Name = "coinTP";
this.coinTP.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
this.flowLayoutPanel1.Controls.Add(this.textBox2);
this.flowLayoutPanel1.Controls.Add(this.linkDonate);
this.flowLayoutPanel1.Name = "flowLayoutPanel1";
//
// textBox2
//
this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None;
resources.ApplyResources(this.textBox2, "textBox2");
this.textBox2.Name = "textBox2";
this.textBox2.ReadOnly = true;
//
// Hotkeys
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.linkDonate);
this.Controls.Add(this.lLChangelog);
this.Controls.Add(this.tCAbout);
this.Controls.Add(this.lbAbout);
@ -472,8 +507,11 @@
this.tPCredits.PerformLayout();
this.tLPTranslators.ResumeLayout(false);
this.tLPTranslators.PerformLayout();
this.coinTP.ResumeLayout(false);
this.coinTP.PerformLayout();
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
@ -536,5 +574,9 @@
private System.Windows.Forms.Label lbpt;
private System.Windows.Forms.Label lbPortugueseT;
private System.Windows.Forms.LinkLabel linkTeokp;
private System.Windows.Forms.TabPage coinTP;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.LinkLabel linkCurrentSite;
}
}

View File

@ -22,31 +22,38 @@ namespace DS4Windows
int ind = tLPTranslators.Controls.IndexOf(ctrls[0]) + 1;
((Label)tLPTranslators.Controls[ind]).ForeColor = Color.DarkGreen;
}
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
string version = fvi.FileVersion;
lbAbout.Text += version + ")";
if (tPCredits.HasChildren)
foreach (System.Windows.Forms.Control ctrl in tPCredits.Controls)
{
foreach (Control ctrl in tPCredits.Controls)
{
if (ctrl.HasChildren)
foreach (System.Windows.Forms.Control ctrl2 in ctrl.Controls)
{
foreach (Control ctrl2 in ctrl.Controls)
ctrl2.MouseHover += Items_MouseHover;
}
ctrl.MouseHover += Items_MouseHover;
}
}
tPCredits.MouseHover += Items_MouseHover;
lbLinkText.Text = string.Empty;
}
private void Items_MouseHover(object sender, EventArgs e)
{
switch (((System.Windows.Forms.Control)sender).Name)
switch (((Control)sender).Name)
{
//if (File.Exists(appdatapath + "\\Auto Profiles.xml"))
case "linkJays2Kings": lbLinkText.Text = "http://ds4windows.com"; break;
case "linkElectro": lbLinkText.Text = "https://code.google.com/r/brianfundakowskifeldman-ds4windows/"; break;
case "linkInhexSTER": lbLinkText.Text = "https://code.google.com/p/ds4-tool/"; break;
case "linkJhebbel": lbLinkText.Text = "http://dsdcs.com/index.php/portfolio/software-development/4-ds4windows"; break;
case "linkSourceCode": lbLinkText.Text = "https://github.com/Jays2Kings/DS4Windows"; break;
case "linkCurrentSite": lbLinkText.Text = "https://ryochan7.github.io/ds4windows-site/"; break;
case "linkSourceCode": lbLinkText.Text = "https://github.com/Ryochan7/DS4Windows"; break;
case "linkBoganhobo": lbLinkText.Text = "https://github.com/boganhobo"; break;
case "linkChamilsaan": lbLinkText.Text = "https://github.com/Chamilsaan"; break;
case "linkKiliansch": lbLinkText.Text = "https://github.com/kiliansch"; break;
@ -55,9 +62,9 @@ namespace DS4Windows
}
}
private void linkJays2Kings_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
private void LinkJays2Kings_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("http://ds4windows.com");
Process.Start("https://github.com/Jays2Kings/");
}
private void linkElectro_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
@ -75,19 +82,19 @@ namespace DS4Windows
Process.Start("http://dsdcs.com/index.php/portfolio/software-development/4-ds4windows");
}
private void lLChangelog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
private void LLChangelog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://docs.google.com/document/d/1l4xcgVQkGUskc5CQ0p069yW22Cd5WAH_yE3Fz2hXo0E/edit?usp=sharing");
Process.Start("https://docs.google.com/document/d/1CovpH08fbPSXrC6TmEprzgPwCe0tTjQ_HTFfDotpmxk/edit?usp=sharing");
}
private void linkDonate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
private void LinkDonate_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=2FTZ9BZEHSQ8Q&lc=US&item_name=DS4Windows&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted");
Process.Start("https://paypal.me/ryochan7");
}
private void linkSourceCode_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
private void LinkSourceCode_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://github.com/Jays2Kings/DS4Windows");
Process.Start("https://github.com/Ryochan7/DS4Windows");
}
private void linkBoganhobo_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
@ -109,5 +116,10 @@ namespace DS4Windows
{
Process.Start("https://github.com/teokp");
}
private void LinkCurrentSite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Process.Start("https://ryochan7.github.io/ds4windows-site/");
}
}
}

View File

@ -140,23 +140,23 @@
<value>540, 458</value>
</data>
<data name="lbHotkeys.Text" xml:space="preserve">
<value>Ocultar Controlador DS4: Hides the DS4's regular input (Dinput) from other programs, check if you are getting double input in games or R2 pauses games
Click left side of touchpad: Left Touch
Click right side of touchpad: Right Touch
Click touchpad with 2 fingers: Multitouch
Click upper part of touchpad: Upper Touch
PS + Options o mantener PS por 10 segundos: Desconectar Controlador (Solo Bluetooth)
Tocar Touchpad + PS: Turn off touchpad movement (clicking still works)
Pad click on lower right: Right click (Best used when right side is used as a mouse button)
Two fingers up/down on touchpad*: Scroll Up/Down
Tap then hold touchpad*: Left mouse drag
2 finger touchpad swipe left or right: Cycle through profiles
Shift Modifer: Hold an action to use another set of controls
When mapping keyboard and mouse:
Toggle: The key will remain in a ""held down"" state until pressed again
Macro: Assign multiple keys to one input
Scan Code: Keys are interpreted differently. May be needed for certain games
*If enabled</value>
<value>Ocultar Control DS4: Oculta la entrada regular del DS4 (Dinput) de otros programas, comprueba si tienes doble entrada en juegos o que R2 pause juegos
Haga clic en el lado izquierdo del panel táctil: Toque izquierdo
Haga clic en el lado derecho del panel táctil: Toque derecho
Haga clic en el panel táctil con 2 dedos: Multi toque
Haga clic en la parte superior del panel táctil: Toque superior
PS + Options o mantener PS por 10 segundos: Desconectar Control (Solo Bluetooth)
Clic en el panel táctil + PS: Desactiva el movimiento del panel táctil (el clic sigue funcionando)
Clic en la parte inferior derecha del panel: Haga clic derecho (Mejor utilizado cuando el lado derecho se utiliza como un botón del ratón)
Dos dedos arriba / abajo en el panel táctil*: Desplazar hacia arriba / abajo
Toque y mantenga pulsado el panel táctil*: Arrastrar el ratón hacia la izquierda
Deslizar el dedo hacia la izquierda o la derecha: Ciclo a través de perfiles
Modificador de cambio: Realizar una acción para utilizar otro conjunto de controles
Al asignar el teclado y el ratón:
Palanca: La tecla permanecerá en estado "" presionado "" hasta que se vuelva a pulsar
Macro: Asignar varias teclas a una entrada
Código de exploración: Las claves se interpretan de manera diferente. Puede ser necesario para ciertos juegos
*Si está activado</value>
</data>
<data name="tPHotkeys.Size" type="System.Drawing.Size, System.Drawing">
<value>563, 386</value>

File diff suppressed because it is too large Load Diff

View File

@ -229,16 +229,16 @@
//
// pBHighlight
//
resources.ApplyResources(this.pBHighlight, "pBHighlight");
this.pBHighlight.BackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.pBHighlight, "pBHighlight");
this.pBHighlight.Image = global::DS4Windows.Properties.Resources._360_highlight;
this.pBHighlight.Name = "pBHighlight";
this.pBHighlight.TabStop = false;
//
// pBMouse
//
resources.ApplyResources(this.pBMouse, "pBMouse");
this.pBMouse.Image = global::DS4Windows.Properties.Resources.mouse;
resources.ApplyResources(this.pBMouse, "pBMouse");
this.pBMouse.Name = "pBMouse";
this.pBMouse.TabStop = false;
//
@ -1078,8 +1078,8 @@
//
// bnColor
//
resources.ApplyResources(this.bnColor, "bnColor");
this.bnColor.BackColor = System.Drawing.Color.White;
resources.ApplyResources(this.bnColor, "bnColor");
this.bnColor.Name = "bnColor";
this.bnColor.UseVisualStyleBackColor = false;
this.bnColor.Click += new System.EventHandler(this.bnColor_Click);
@ -1117,8 +1117,8 @@
//
// lBTip
//
resources.ApplyResources(this.lBTip, "lBTip");
this.lBTip.ForeColor = System.Drawing.SystemColors.GrayText;
resources.ApplyResources(this.lBTip, "lBTip");
this.lBTip.Name = "lBTip";
//
// btnD
@ -1131,11 +1131,11 @@
//
// btnAButton
//
resources.ApplyResources(this.btnAButton, "btnAButton");
this.btnAButton.BackColor = System.Drawing.Color.Transparent;
this.btnAButton.FlatAppearance.BorderSize = 0;
this.btnAButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnAButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnAButton, "btnAButton");
this.btnAButton.Name = "btnAButton";
this.btnAButton.TabStop = false;
this.btnAButton.Tag = "X360A Button";
@ -1153,11 +1153,11 @@
//
// btnGuide
//
resources.ApplyResources(this.btnGuide, "btnGuide");
this.btnGuide.BackColor = System.Drawing.Color.Transparent;
this.btnGuide.FlatAppearance.BorderSize = 0;
this.btnGuide.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnGuide.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnGuide, "btnGuide");
this.btnGuide.Name = "btnGuide";
this.btnGuide.TabStop = false;
this.btnGuide.Tag = "X360Guide";
@ -1175,11 +1175,11 @@
//
// btnStart
//
resources.ApplyResources(this.btnStart, "btnStart");
this.btnStart.BackColor = System.Drawing.Color.Transparent;
this.btnStart.FlatAppearance.BorderSize = 0;
this.btnStart.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnStart.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnStart, "btnStart");
this.btnStart.Name = "btnStart";
this.btnStart.TabStop = false;
this.btnStart.Tag = "X360Start";
@ -1197,11 +1197,11 @@
//
// btnBack
//
resources.ApplyResources(this.btnBack, "btnBack");
this.btnBack.BackColor = System.Drawing.Color.Transparent;
this.btnBack.FlatAppearance.BorderSize = 0;
this.btnBack.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnBack.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnBack, "btnBack");
this.btnBack.Name = "btnBack";
this.btnBack.TabStop = false;
this.btnBack.Tag = "X360Back";
@ -1219,11 +1219,11 @@
//
// btnBButton
//
resources.ApplyResources(this.btnBButton, "btnBButton");
this.btnBButton.BackColor = System.Drawing.Color.Transparent;
this.btnBButton.FlatAppearance.BorderSize = 0;
this.btnBButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnBButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnBButton, "btnBButton");
this.btnBButton.Name = "btnBButton";
this.btnBButton.TabStop = false;
this.btnBButton.Tag = "X360B Button";
@ -1241,11 +1241,11 @@
//
// btnXButton
//
resources.ApplyResources(this.btnXButton, "btnXButton");
this.btnXButton.BackColor = System.Drawing.Color.Transparent;
this.btnXButton.FlatAppearance.BorderSize = 0;
this.btnXButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnXButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnXButton, "btnXButton");
this.btnXButton.Name = "btnXButton";
this.btnXButton.TabStop = false;
this.btnXButton.Tag = "X360X Button";
@ -1263,11 +1263,11 @@
//
// btnYButton
//
resources.ApplyResources(this.btnYButton, "btnYButton");
this.btnYButton.BackColor = System.Drawing.Color.Transparent;
this.btnYButton.FlatAppearance.BorderSize = 0;
this.btnYButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnYButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnYButton, "btnYButton");
this.btnYButton.Name = "btnYButton";
this.btnYButton.TabStop = false;
this.btnYButton.Tag = "X360Y Button";
@ -1285,11 +1285,11 @@
//
// btnLB
//
resources.ApplyResources(this.btnLB, "btnLB");
this.btnLB.BackColor = System.Drawing.Color.Transparent;
this.btnLB.FlatAppearance.BorderSize = 0;
this.btnLB.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLB.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLB, "btnLB");
this.btnLB.Name = "btnLB";
this.btnLB.TabStop = false;
this.btnLB.Tag = "X360Left Bumper";
@ -1307,11 +1307,11 @@
//
// btnDpadRight
//
resources.ApplyResources(this.btnDpadRight, "btnDpadRight");
this.btnDpadRight.BackColor = System.Drawing.Color.Transparent;
this.btnDpadRight.FlatAppearance.BorderSize = 0;
this.btnDpadRight.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnDpadRight.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnDpadRight, "btnDpadRight");
this.btnDpadRight.Name = "btnDpadRight";
this.btnDpadRight.TabStop = false;
this.btnDpadRight.Tag = "X360Right Button";
@ -1329,11 +1329,11 @@
//
// btnDpadUp
//
resources.ApplyResources(this.btnDpadUp, "btnDpadUp");
this.btnDpadUp.BackColor = System.Drawing.Color.Transparent;
this.btnDpadUp.FlatAppearance.BorderSize = 0;
this.btnDpadUp.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnDpadUp.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnDpadUp, "btnDpadUp");
this.btnDpadUp.Name = "btnDpadUp";
this.btnDpadUp.TabStop = false;
this.btnDpadUp.Tag = "X360Up Button";
@ -1351,11 +1351,11 @@
//
// btnDpadDown
//
resources.ApplyResources(this.btnDpadDown, "btnDpadDown");
this.btnDpadDown.BackColor = System.Drawing.Color.Transparent;
this.btnDpadDown.FlatAppearance.BorderSize = 0;
this.btnDpadDown.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnDpadDown.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnDpadDown, "btnDpadDown");
this.btnDpadDown.Name = "btnDpadDown";
this.btnDpadDown.TabStop = false;
this.btnDpadDown.Tag = "X360Down Button";
@ -1373,11 +1373,11 @@
//
// btnDpadLeft
//
resources.ApplyResources(this.btnDpadLeft, "btnDpadLeft");
this.btnDpadLeft.BackColor = System.Drawing.Color.Transparent;
this.btnDpadLeft.FlatAppearance.BorderSize = 0;
this.btnDpadLeft.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnDpadLeft.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnDpadLeft, "btnDpadLeft");
this.btnDpadLeft.Name = "btnDpadLeft";
this.btnDpadLeft.TabStop = false;
this.btnDpadLeft.Tag = "X360Left Button";
@ -1395,11 +1395,11 @@
//
// btnLT
//
resources.ApplyResources(this.btnLT, "btnLT");
this.btnLT.BackColor = System.Drawing.Color.Transparent;
this.btnLT.FlatAppearance.BorderSize = 0;
this.btnLT.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLT, "btnLT");
this.btnLT.ForeColor = System.Drawing.Color.Transparent;
this.btnLT.Name = "btnLT";
this.btnLT.TabStop = false;
@ -1473,11 +1473,11 @@
//
// btnRSLeft
//
resources.ApplyResources(this.btnRSLeft, "btnRSLeft");
this.btnRSLeft.BackColor = System.Drawing.Color.Transparent;
this.btnRSLeft.FlatAppearance.BorderSize = 0;
this.btnRSLeft.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRSLeft.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRSLeft, "btnRSLeft");
this.btnRSLeft.Name = "btnRSLeft";
this.btnRSLeft.TabStop = false;
this.btnRSLeft.Tag = "X360Right X-Axis-";
@ -1495,11 +1495,11 @@
//
// btnRSDown
//
resources.ApplyResources(this.btnRSDown, "btnRSDown");
this.btnRSDown.BackColor = System.Drawing.Color.Transparent;
this.btnRSDown.FlatAppearance.BorderSize = 0;
this.btnRSDown.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRSDown.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRSDown, "btnRSDown");
this.btnRSDown.Name = "btnRSDown";
this.btnRSDown.TabStop = false;
this.btnRSDown.Tag = "X360Right Y-Axis+";
@ -1517,11 +1517,11 @@
//
// btnRSRight
//
resources.ApplyResources(this.btnRSRight, "btnRSRight");
this.btnRSRight.BackColor = System.Drawing.Color.Transparent;
this.btnRSRight.FlatAppearance.BorderSize = 0;
this.btnRSRight.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRSRight.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRSRight, "btnRSRight");
this.btnRSRight.Name = "btnRSRight";
this.btnRSRight.TabStop = false;
this.btnRSRight.Tag = "X360Right X-Axis+";
@ -1539,11 +1539,11 @@
//
// btnRB
//
resources.ApplyResources(this.btnRB, "btnRB");
this.btnRB.BackColor = System.Drawing.Color.Transparent;
this.btnRB.FlatAppearance.BorderSize = 0;
this.btnRB.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRB.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRB, "btnRB");
this.btnRB.Name = "btnRB";
this.btnRB.TabStop = false;
this.btnRB.Tag = "X360Right Bumper";
@ -1561,11 +1561,11 @@
//
// btnLSLeft
//
resources.ApplyResources(this.btnLSLeft, "btnLSLeft");
this.btnLSLeft.BackColor = System.Drawing.Color.Transparent;
this.btnLSLeft.FlatAppearance.BorderSize = 0;
this.btnLSLeft.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLSLeft.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLSLeft, "btnLSLeft");
this.btnLSLeft.Name = "btnLSLeft";
this.btnLSLeft.TabStop = false;
this.btnLSLeft.Tag = "X360Left X-Axis-";
@ -1583,11 +1583,11 @@
//
// btnRSUp
//
resources.ApplyResources(this.btnRSUp, "btnRSUp");
this.btnRSUp.BackColor = System.Drawing.Color.Transparent;
this.btnRSUp.FlatAppearance.BorderSize = 0;
this.btnRSUp.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRSUp.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRSUp, "btnRSUp");
this.btnRSUp.Name = "btnRSUp";
this.btnRSUp.TabStop = false;
this.btnRSUp.Tag = "X360Right Y-Axis-";
@ -1605,11 +1605,11 @@
//
// btnLSDown
//
resources.ApplyResources(this.btnLSDown, "btnLSDown");
this.btnLSDown.BackColor = System.Drawing.Color.Transparent;
this.btnLSDown.FlatAppearance.BorderSize = 0;
this.btnLSDown.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLSDown.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLSDown, "btnLSDown");
this.btnLSDown.Name = "btnLSDown";
this.btnLSDown.TabStop = false;
this.btnLSDown.Tag = "X360Left Y-Axis+";
@ -1627,11 +1627,11 @@
//
// btnRT
//
resources.ApplyResources(this.btnRT, "btnRT");
this.btnRT.BackColor = System.Drawing.Color.Transparent;
this.btnRT.FlatAppearance.BorderSize = 0;
this.btnRT.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRT.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRT, "btnRT");
this.btnRT.Name = "btnRT";
this.btnRT.TabStop = false;
this.btnRT.Tag = "X360Right Trigger";
@ -1649,11 +1649,11 @@
//
// btnLSRight
//
resources.ApplyResources(this.btnLSRight, "btnLSRight");
this.btnLSRight.BackColor = System.Drawing.Color.Transparent;
this.btnLSRight.FlatAppearance.BorderSize = 0;
this.btnLSRight.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLSRight.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLSRight, "btnLSRight");
this.btnLSRight.Name = "btnLSRight";
this.btnLSRight.TabStop = false;
this.btnLSRight.Tag = "X360Left X-Axis+";
@ -1671,11 +1671,11 @@
//
// btnRSClick
//
resources.ApplyResources(this.btnRSClick, "btnRSClick");
this.btnRSClick.BackColor = System.Drawing.Color.Transparent;
this.btnRSClick.FlatAppearance.BorderSize = 0;
this.btnRSClick.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnRSClick.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnRSClick, "btnRSClick");
this.btnRSClick.Name = "btnRSClick";
this.btnRSClick.TabStop = false;
this.btnRSClick.Tag = "X360Right Stick";
@ -1693,11 +1693,11 @@
//
// btnLSUp
//
resources.ApplyResources(this.btnLSUp, "btnLSUp");
this.btnLSUp.BackColor = System.Drawing.Color.Transparent;
this.btnLSUp.FlatAppearance.BorderSize = 0;
this.btnLSUp.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLSUp.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLSUp, "btnLSUp");
this.btnLSUp.Name = "btnLSUp";
this.btnLSUp.TabStop = false;
this.btnLSUp.Tag = "X360Left Y-Axis-";
@ -1707,11 +1707,11 @@
//
// btnLSClick
//
resources.ApplyResources(this.btnLSClick, "btnLSClick");
this.btnLSClick.BackColor = System.Drawing.Color.Transparent;
this.btnLSClick.FlatAppearance.BorderSize = 0;
this.btnLSClick.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Transparent;
this.btnLSClick.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Transparent;
resources.ApplyResources(this.btnLSClick, "btnLSClick");
this.btnLSClick.Name = "btnLSClick";
this.btnLSClick.TabStop = false;
this.btnLSClick.Tag = "X360Left Stick";
@ -1751,7 +1751,6 @@
//
// gBExtras
//
resources.ApplyResources(this.gBExtras, "gBExtras");
this.gBExtras.Controls.Add(this.nUDMouse);
this.gBExtras.Controls.Add(this.cBMouse);
this.gBExtras.Controls.Add(this.cBLightbar);
@ -1774,6 +1773,7 @@
this.gBExtras.Controls.Add(this.tBGreenBar);
this.gBExtras.Controls.Add(this.tBRedBar);
this.gBExtras.Controls.Add(this.lBTip);
resources.ApplyResources(this.gBExtras, "gBExtras");
this.gBExtras.Name = "gBExtras";
this.gBExtras.TabStop = false;
//
@ -1824,7 +1824,6 @@
//
// cBShiftButton
//
resources.ApplyResources(this.cBShiftButton, "cBShiftButton");
this.cBShiftButton.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cBShiftButton.FormattingEnabled = true;
this.cBShiftButton.Items.AddRange(new object[] {
@ -1855,12 +1854,13 @@
resources.GetString("cBShiftButton.Items24"),
resources.GetString("cBShiftButton.Items25"),
resources.GetString("cBShiftButton.Items26")});
resources.ApplyResources(this.cBShiftButton, "cBShiftButton");
this.cBShiftButton.Name = "cBShiftButton";
//
// pnl360Controls
//
resources.ApplyResources(this.pnl360Controls, "pnl360Controls");
this.pnl360Controls.BackgroundImage = global::DS4Windows.Properties.Resources._360_map;
resources.ApplyResources(this.pnl360Controls, "pnl360Controls");
this.pnl360Controls.Controls.Add(this.lb360Tip);
this.pnl360Controls.Controls.Add(this.pBHighlight);
this.pnl360Controls.Controls.Add(this.btnGuide);
@ -1890,6 +1890,7 @@
this.pnl360Controls.Controls.Add(this.btnDpadDown);
this.pnl360Controls.Controls.Add(this.btnDpadUp);
this.pnl360Controls.Name = "pnl360Controls";
this.pnl360Controls.Paint += new System.Windows.Forms.PaintEventHandler(this.pnl360Controls_Paint);
//
// lb360Tip
//

View File

@ -1,10 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DS4Windows
@ -25,17 +21,22 @@ namespace DS4Windows
bool loading = true;
private int alphacolor;
private Color reg, full;
int bgc = 240; //Color of the form background, If greyscale color
int bgc = 240; // Color of the form background, If greyscale color
private bool extraChanged;
private Bitmap pnl360BgImage;
public KBM360(int deviceNum, Options ooo, Button buton)
{
InitializeComponent();
pnl360BgImage = (Bitmap)Properties.Resources._360_map.Clone();
pnl360Controls.BackgroundImage = null;
pnl360Controls.BackgroundImageLayout = ImageLayout.None;
device = deviceNum;
ops = ooo;
button = buton;
cBToggle.Checked = button.Font.Italic;
cBScanCode.Checked = button.Font.Bold;
DS4ControlSettings dcs = Global.getDS4CSetting(device, button.Name);
cBToggle.Checked = dcs.keyType.HasFlag(DS4KeyType.Toggle);
cBScanCode.Checked = dcs.keyType.HasFlag(DS4KeyType.ScanCode);
oldSC = cBScanCode.Location;
defaultText = btnDefault.Text;
if (button.Name.StartsWith("bnShift"))
@ -45,13 +46,22 @@ namespace DS4Windows
btnDefault.Text = Properties.Resources.FallBack;
}
else if (button.Name.StartsWith("bn"))
{
Text = Properties.Resources.SelectActionTitle.Replace("*action*", button.Name.Substring(2));
}
foreach (Control control in Controls)
{
if (control is Button)
((Button)control).Click += anybtn_Click;
}
foreach (Control control in pnl360Controls.Controls)
{
if (control is Button)
((Button)control).Click += anybtn_Click;
}
if (button.Name.Contains("Touch") || button.Name.Contains("Swipe"))
{
btnMOUSEDOWN.Visible = false;
@ -59,6 +69,7 @@ namespace DS4Windows
btnMOUSERIGHT.Visible = false;
btnMOUSEUP.Visible = false;
}
ActiveControl = lBMacroOn;
guideText = btnGuide.Text;
btnGuide.Text = "";
@ -73,7 +84,9 @@ namespace DS4Windows
InitializeComponent();
sA = ooo;
button = buton;
Size = new Size(btnVolUp.Location.X + btnVolUp.Size.Width * 2, btnNUMENTER.Location.Y + btnNUMENTER.Size.Height * 2);
Size = new Size(btnVolUp.Location.X + btnVolUp.Size.Width * 2,
btnNUMENTER.Location.Y + btnNUMENTER.Size.Height * 2);
if (extras)
{
cBScanCode.Checked = button.Text.Contains("(SC)");
@ -84,13 +97,17 @@ namespace DS4Windows
cBScanCode.Visible = false;
cBToggle.Visible = false;
}
gBExtras.Visible = false;
bnMacro.Visible = false;
X360Label.Visible = false;
Text = Properties.Resources.SelectActionTitle.Replace("*action*", "Trigger");
foreach (Control control in Controls)
{
if (control is Button)
((Button)control).Click += anybtn_Click;
}
btnMOUSEDOWN.Visible = false;
btnMOUSELEFT.Visible = false;
btnMOUSERIGHT.Visible = false;
@ -129,39 +146,61 @@ namespace DS4Windows
keyname = "How did you get here?";
}
else */
if (((Button)sender).Tag == null)
keyname = ((Button)sender).Text;
else if (((Button)sender).Tag.ToString().Contains("X360"))
keyname = ((Button)sender).Tag.ToString().Substring(4);
else if (((Button)sender).Tag != null && ushort.TryParse(((Button)sender).Tag.ToString(), out val))
if (bn.Tag == null)
keyname = bn.Text;
else if (bn.Tag.ToString().Contains("X360"))
keyname = bn.Tag.ToString().Substring(4);
else if (bn.Tag != null && ushort.TryParse(bn.Tag.ToString(), out val))
keyname = ((Keys)val).ToString();
else
keyname = ((Button)sender).Tag.ToString();
keyname = bn.Tag.ToString();
object keytag;
//ushort val;
if (((Button)sender).Tag != null && ((Button)sender).Tag.ToString().Contains("X360"))
keytag = ((Button)sender).Tag.ToString().Substring(4);
else if (((Button)sender).Tag != null && ushort.TryParse(((Button)sender).Tag.ToString(), out val))
if (bn.Tag != null && bn.Tag.ToString().Contains("X360"))
{
//keytag = ((Button)sender).Tag.ToString().Substring(4);
keytag = Global.getX360ControlsByName(bn.Tag.ToString().Substring(4));
DS4Controls psButton = Global.getDS4ControlsByName(button.Name);
if ((X360Controls)keytag == Global.getDefaultX360ControlBinding(psButton) &&
!cBScanCode.Checked && !cBToggle.Checked && !rBShiftModifer.Checked)
{
// Reset action
keytag = null;
}
}
else if (bn.Tag != null && ushort.TryParse(bn.Tag.ToString(), out val))
keytag = val;
else
keytag = ((Button)sender).Tag;
keytag = bn.Tag;
lBMacroOn.Visible = false;
string extras = GetExtras();
string extras = null;
if (IsUsingExtras())
{
extras = GetExtras();
}
KeyValuePair<object, string> tag = new KeyValuePair<object, string>(keytag, extras);
newaction = true;
int value;
bool tagisint = keytag != null && int.TryParse(keytag.ToString(), out value);
bool scanavail = tagisint;
bool toggleavil = tagisint;
if (ops != null)
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag, (scanavail ? cBScanCode.Checked : false), (toggleavil ? cBToggle.Checked : false), false, false, cBShiftButton.SelectedIndex);
{
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag,
(scanavail ? cBScanCode.Checked : false), (toggleavil ? cBToggle.Checked : false),
false, false, cBShiftButton.SelectedIndex);
}
else if (sA != null)
{
button.Text = keyname;
button.Tag = keytag;
button.ForeColor = Color.Black;
}
this.Close();
}
}
@ -171,9 +210,26 @@ namespace DS4Windows
string t =(byte)nUDHeavy.Value + "," + (byte)nUDLight.Value + "," +
(cBLightbar.Checked ? "1" + "," + tBRedBar.Value + "," + tBGreenBar.Value + "," + tBBlueBar.Value + "," + nUDLightFlash.Value: "0,0,0,0,0") + "," +
(cBMouse.Checked ? "1" + "," + (byte)nUDMouse.Value : "0,0");
return t;
}
private bool IsUsingExtras()
{
bool result = false;
result = result || (nUDHeavy.Value != 0);
result = result || (nUDLight.Value != 0);
result = result || (cBLightbar.Checked);
result = result ||
(tBRedBar.Value != 255 && tBGreenBar.Value != 255 &&
tBBlueBar.Value != 255);
result = result || (nUDLightFlash.Value != 0);
result = result || (cBMouse.Checked);
result = result || (nUDMouse.Value != 25);
return result;
}
private void finalMeasure(object sender, FormClosedEventArgs e)
{
if (ops != null)
@ -186,13 +242,23 @@ namespace DS4Windows
}
if (lBMacroOn.Visible)
{
string extras = GetExtras();
string extras = null;
if (IsUsingExtras())
{
extras = GetExtras();
}
KeyValuePair<object, string> tag = new KeyValuePair<object, string>(macrostag.ToArray(), extras);
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag, cBScanCode.Checked, false, lBMacroOn.Visible, macrorepeat, cBShiftButton.SelectedIndex);
}
else if (!newaction)
{
string extras = GetExtras();
string extras = null;
if (IsUsingExtras())
{
extras = GetExtras();
}
int value;
object tt = Global.GetDS4Action(device, button.Name, rBShiftModifer.Checked);
bool tagisint = tt != null
@ -228,17 +294,26 @@ namespace DS4Windows
if (rb == null && !(ActiveControl is NumericUpDown) && !(ActiveControl is TrackBar))
{
lBMacroOn.Visible = false;
string extras = GetExtras();
string extras = null;
if (IsUsingExtras())
{
extras = GetExtras();
}
KeyValuePair<object, string> tag = new KeyValuePair<object, string>(e.KeyValue, extras);
newaction = true;
if (ops != null)
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag, cBScanCode.Checked, cBToggle.Checked, false, false, cBShiftButton.SelectedIndex);
{
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag,
cBScanCode.Checked, cBToggle.Checked, false, false, cBShiftButton.SelectedIndex);
}
else if (sA != null)
{
button.Text = e.KeyCode.ToString();
button.Tag = e.KeyValue;
button.ForeColor = Color.Black;
}
this.Close();
}
}
@ -248,26 +323,30 @@ namespace DS4Windows
if (rb == null && !(ActiveControl is NumericUpDown) && !(ActiveControl is TrackBar))
{
lBMacroOn.Visible = false;
string extras = GetExtras();
string extras = null;
if (IsUsingExtras())
{
extras = GetExtras();
}
KeyValuePair<object, string> tag = new KeyValuePair<object, string>(e.KeyValue, extras);
newaction = true;
if (ops != null)
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag, cBScanCode.Checked, cBToggle.Checked, false, false, cBShiftButton.SelectedIndex);
{
ops.ChangeButtonText(button, rBShiftModifer.Checked, tag,
cBScanCode.Checked, cBToggle.Checked, false, false, cBShiftButton.SelectedIndex);
}
else if (sA != null)
{
button.Text = e.KeyCode.ToString();
button.Tag = e.KeyValue;
button.ForeColor = Color.Black;
}
this.Close();
}
}
private void cbToggle_CheckedChanged(object sender, EventArgs e)
{
}
private void btnMacro_Click(object sender, EventArgs e)
{
gBExtras.Controls.Add(cBScanCode);
@ -290,11 +369,14 @@ namespace DS4Windows
case Keys.Up:
case Keys.Down:
return true;
case Keys.Shift | Keys.Right:
case Keys.Shift | Keys.Left:
case Keys.Shift | Keys.Up:
case Keys.Shift | Keys.Down:
case (Keys.Shift | Keys.Right):
case (Keys.Shift | Keys.Left):
case (Keys.Shift | Keys.Up):
case (Keys.Shift | Keys.Down):
return true;
default: break;
}
return base.IsInputKey(keyData);
}
@ -307,6 +389,7 @@ namespace DS4Windows
case Keys.Right:
case Keys.Up:
case Keys.Down:
{
if (e.Shift)
{
@ -315,6 +398,8 @@ namespace DS4Windows
{
}
break;
}
default: break;
}
}
@ -329,6 +414,7 @@ namespace DS4Windows
int som = bgc + 11 * (int)(value * 0.0039215);
tb.BackColor = Color.FromArgb(tb.Name.ToLower().Contains("red") ? som : sat, tb.Name.ToLower().Contains("green") ? som : sat, tb.Name.ToLower().Contains("blue") ? som : sat);
}
alphacolor = Math.Max(tBRedBar.Value, Math.Max(tBGreenBar.Value, tBBlueBar.Value));
reg = Color.FromArgb(tBRedBar.Value, tBGreenBar.Value, tBBlueBar.Value);
full = HuetoRGB(reg.GetHue(), reg.GetBrightness(), reg);
@ -367,6 +453,7 @@ namespace DS4Windows
tBBlueBar.Value = advColorDialog.Color.B;
extraChanged = true;
}
if (device < 4)
DS4LightBar.forcelight[device] = false;
}
@ -405,8 +492,10 @@ namespace DS4Windows
if (s[i] >= 'A' && s[i] <= 'Z')
s = s.Insert(i, " ");
}
if (s == "Guide")
s = guideText;
return s;
}
@ -419,7 +508,16 @@ namespace DS4Windows
private void rBShift_CheckedChanged(object sender, EventArgs e)
{
if (!loading && extraChanged)
Global.UpdateDS4Extra(device, button.Name, !rBShiftModifer.Checked, GetExtras());
{
string strextras = null;
if (IsUsingExtras())
{
strextras = GetExtras();
}
Global.UpdateDS4Extra(device, button.Name, !rBShiftModifer.Checked, strextras);
}
object tagO = Global.GetDS4Action(device, button.Name, rBShiftModifer.Checked);
if (rBShiftModifer.Checked)
btnDefault.Text = Properties.Resources.FallBack;
@ -432,8 +530,11 @@ namespace DS4Windows
newaction = false;
Highlight_Leave(null, null);
foreach (Control control in Controls)
{
if (control is Button)
((Button)control).BackColor = SystemColors.Control;
}
if (tagO != null)
{
if (tagO is int || tagO is ushort)
@ -441,45 +542,58 @@ namespace DS4Windows
int tag = int.Parse(tagO.ToString());
int i;
foreach (Control control in Controls)
{
if (control is Button)
{
if (int.TryParse(control.Tag?.ToString(), out i) && i == tag)
{
((Button)control).BackColor = Color.LightGreen;
break;
}
}
}
}
else if (tagO is int[])
{
int[] tag = (int[])tagO;
lBMacroOn.Visible = true;
foreach (int i in tag)
macrostag.Add(i);
if (Global.GetDS4KeyType(device, button.Name, rBShiftModifer.Checked).HasFlag(DS4KeyType.RepeatMacro))
lBMacroOn.Visible = true;
foreach (int i in tag)
macrostag.Add(i);
if (Global.GetDS4KeyType(device, button.Name, rBShiftModifer.Checked).HasFlag(DS4KeyType.HoldMacro))
macrorepeat = true;
}
else if (tagO is string || tagO is X360Controls)
{
string tag;
if (tagO is X360Controls)
{
tag = getX360ControlsByName((X360Controls)tagO);
}
else
tag = tagO.ToString();
foreach (Control control in Controls)
{
if (control is Button)
{
if (control.Tag?.ToString() == tag)
{
((Button)control).BackColor = Color.LightGreen;
break;
}
}
}
foreach (Control control in pnl360Controls.Controls)
{
if (control is Button)
{
if (control.Tag?.ToString().Substring(4) == tag)
{
Hightlight_Hover(((Button)control), null);
break;
}
}
}
}
}
else
@ -493,71 +607,96 @@ namespace DS4Windows
tag = getX360ControlsByName((X360Controls)tagO);
else
tag = tagO.ToString();
foreach (Control control in Controls)
{
if (control is Button)
{
if (control.Tag != null && control.Tag.ToString().Contains("X360") ? control.Tag?.ToString().Substring(4) == tag : control.Tag?.ToString() == tag)
{
((Button)control).BackColor = Color.LightGreen;
break;
}
}
}
foreach (Control control in pnl360Controls.Controls)
{
if (control is Button)
{
if (control.Tag?.ToString().Substring(4) == tag)
{
Hightlight_Hover(((Button)control), null);
break;
}
}
}
}
}
string[] extras = Global.GetDS4Extra(device, button.Name, rBShiftModifer.Checked).Split(',');
int b;
try
{
if (int.TryParse(extras[0], out b)) nUDHeavy.Value = b;
if (int.TryParse(extras[1], out b)) nUDLight.Value = b;
if (int.TryParse(extras[2], out b))
if (b == 1)
{
cBLightbar.Checked = true;
if (int.TryParse(extras[3], out b)) tBRedBar.Value = b;
if (int.TryParse(extras[4], out b)) tBGreenBar.Value = b;
if (int.TryParse(extras[5], out b)) tBBlueBar.Value = b;
if (int.TryParse(extras[6], out b)) nUDLightFlash.Value = b;
}
else
{
tBRedBar.Value = 255;
tBGreenBar.Value = 255;
tBBlueBar.Value = 255;
nUDLightFlash.Value = 0;
cBLightbar.Checked = false;
}
if (int.TryParse(extras[7], out b))
if (b == 1)
string dcExtras = Global.GetDS4Extra(device, button.Name, rBShiftModifer.Checked);
string[] extras = null;
if (!string.IsNullOrEmpty(dcExtras))
{
extras = dcExtras.Split(',');
}
if (extras != null)
{
int b;
try
{
if (int.TryParse(extras[0], out b)) nUDHeavy.Value = b;
if (int.TryParse(extras[1], out b)) nUDLight.Value = b;
if (int.TryParse(extras[2], out b))
{
cBMouse.Checked = true;
if (int.TryParse(extras[8], out b)) nUDMouse.Value = b;
}
else
{
nUDMouse.Value = 25;
cBMouse.Checked = false;
if (b == 1)
{
cBLightbar.Checked = true;
if (int.TryParse(extras[3], out b)) tBRedBar.Value = b;
if (int.TryParse(extras[4], out b)) tBGreenBar.Value = b;
if (int.TryParse(extras[5], out b)) tBBlueBar.Value = b;
if (int.TryParse(extras[6], out b)) nUDLightFlash.Value = b;
}
else
{
tBRedBar.Value = 255;
tBGreenBar.Value = 255;
tBBlueBar.Value = 255;
nUDLightFlash.Value = 0;
cBLightbar.Checked = false;
}
}
if (int.TryParse(extras[7], out b))
{
if (b == 1)
{
cBMouse.Checked = true;
if (int.TryParse(extras[8], out b)) nUDMouse.Value = b;
}
else
{
nUDMouse.Value = 25;
cBMouse.Checked = false;
}
}
}
catch
{
nUDHeavy.Value = 0;
nUDLight.Value = 0;
tBRedBar.Value = 255;
tBGreenBar.Value = 255;
tBBlueBar.Value = 255;
nUDLightFlash.Value = 0;
cBLightbar.Checked = false;
nUDMouse.Value = 25;
cBMouse.Checked = false;
}
}
catch
{
nUDHeavy.Value = 0;
nUDLight.Value = 0;
tBRedBar.Value = 255;
tBGreenBar.Value = 255;
tBBlueBar.Value = 255;
nUDLightFlash.Value = 0;
cBLightbar.Checked = false;
nUDMouse.Value = 25;
cBMouse.Checked = false;
}
extraChanged = false;
}
@ -606,34 +745,41 @@ namespace DS4Windows
case X360Controls.MouseLeft: return "Mouse Left";
case X360Controls.MouseRight: return "Mouse Right";
case X360Controls.Unbound: return "Unbound";
default: break;
}
return "Unbound";
}
private void bnTest_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
if (device < 4)
if (((Button)sender).Text == Properties.Resources.TestText)
{
if (btn.Text == Properties.Resources.TestText)
{
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, device);
((Button)sender).Text = Properties.Resources.StopText;
btn.Text = Properties.Resources.StopText;
}
else
{
Program.rootHub.setRumble(0, 0, device);
((Button)sender).Text = Properties.Resources.TestText;
btn.Text = Properties.Resources.TestText;
}
}
else
if (((Button)sender).Text == Properties.Resources.TestText)
{
if (btn.Text == Properties.Resources.TestText)
{
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
((Button)sender).Text = Properties.Resources.StopText;
btn.Text = Properties.Resources.StopText;
}
else
{
Program.rootHub.setRumble(0, 0, 0);
((Button)sender).Text = Properties.Resources.TestText;
btn.Text = Properties.Resources.TestText;
}
}
}
private void ExtraChanged(object sender, EventArgs e)
@ -641,6 +787,11 @@ namespace DS4Windows
extraChanged = true;
}
private void pnl360Controls_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(pnl360BgImage, new Rectangle(0, 13, Convert.ToInt32(pnl360Controls.Width), Convert.ToInt32(pnl360Controls.Height - 26)), new Rectangle(0, 0, Convert.ToInt32(pnl360BgImage.Width), Convert.ToInt32(pnl360BgImage.Height)), GraphicsUnit.Pixel);
}
private void nUD_ValueChanged(object sender, EventArgs e)
{
if (bnTest.Text != Properties.Resources.TestText)
@ -650,6 +801,7 @@ namespace DS4Windows
else
Program.rootHub.setRumble((byte)nUDHeavy.Value, (byte)nUDLight.Value, 0);
}
extraChanged = true;
}

File diff suppressed because it is too large Load Diff

View File

@ -161,7 +161,7 @@
<value>105, 17</value>
</data>
<data name="X360Label.Text" xml:space="preserve">
<value>Controles X360</value>
<value>Controles Xbox 360</value>
</data>
<data name="KBMlabel.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 17</value>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,70 @@
namespace DS4Windows.DS4Forms
{
partial class LanguagePackComboBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором компонентов
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LanguagePackComboBox));
this.cbCulture = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// cbCulture
//
resources.ApplyResources(this.cbCulture, "cbCulture");
this.cbCulture.DisplayMember = "Value";
this.cbCulture.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cbCulture.FormattingEnabled = true;
this.cbCulture.Name = "cbCulture";
this.cbCulture.ValueMember = "Key";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
this.label1.SizeChanged += new System.EventHandler(this.LanguagePackComboBox_SizeChanged);
//
// LanguagePackComboBox
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.cbCulture);
this.Controls.Add(this.label1);
this.Name = "LanguagePackComboBox";
this.SizeChanged += new System.EventHandler(this.LanguagePackComboBox_SizeChanged);
this.Resize += new System.EventHandler(this.LanguagePackComboBox_SizeChanged);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ComboBox cbCulture;
private System.Windows.Forms.Label label1;
}
}

View File

@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DS4Windows.DS4Forms
{
public partial class LanguagePackComboBox : UserControl
{
private string InvariantCultureTextValue = "No (English UI)";
private TaskCompletionSource<bool> LanguageListInitialized = new TaskCompletionSource<bool>();
// If probing path has been changed in App.config, add the same string here.
private string ProbingPath = "Lang";
// Filter language assembly file names in order to ont include irrelevant assemblies to the combo box.
private string LanguageAssemblyName = "DS4Windows.resources.dll";
[Category("Action")]
[Description("Fires when the combo box selected index is changed.")]
public event EventHandler SelectedIndexChanged;
[Category("Action")]
[Description("Fires when the combo box selected value is changed.")]
public event EventHandler SelectedValueChanged;
[Category("Data")]
[Description("Text used for invariant culture name in the combo box.")]
[Localizable(true)]
public string InvariantCultureText
{
get { return InvariantCultureTextValue; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("InvariantCultureText_Changed call will complete when ready, no need for a warning", "CS4014:Await.Warning")]
set {
InvariantCultureTextValue = value;
InvariantCultureText_Changed(value);
}
}
[Category("Data")]
[Description("Text for label before the combo box.")]
[Localizable(true)]
public string LabelText {
get { return label1.Text; }
set { label1.Text = value; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int SelectedIndex
{
get { return cbCulture.SelectedIndex; }
set { cbCulture.SelectedIndex = value; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public string SelectedText
{
get { return cbCulture.SelectedText; }
set { cbCulture.SelectedText = value; }
}
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public object SelectedValue
{
get { return cbCulture.SelectedValue; }
set { cbCulture.SelectedValue = value; }
}
public LanguagePackComboBox()
{
InitializeComponent();
cbCulture.Enabled = false;
Task.Run(() => {
// Find available language assemblies and bind the list to the combo box.
cbCulture.DataSource = CreateLanguageAssembliesBindingSource();
cbCulture.SelectedValue = Thread.CurrentThread.CurrentUICulture.Name;
// This must be set here instead of Designer or event would fire at initial selected value setting above.
cbCulture.SelectedIndexChanged += new EventHandler(CbCulture_SelectedIndexChanged);
cbCulture.SelectedValueChanged += new EventHandler(CbCulture_SelectedValueChanged);
cbCulture.Enabled = true;
LanguageListInitialized.SetResult(true);
});
}
private BindingSource CreateLanguageAssembliesBindingSource()
{
// Find the location where application installed.
string exeLocation = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path));
List<string> lookupPaths = ProbingPath.Split(';')
.Select(path => Path.Combine(exeLocation, path))
.Where(path => path != exeLocation)
.ToList();
lookupPaths.Insert(0, exeLocation);
// Get all culture for which satellite folder found with culture code, then insert invariant culture at the beginning.
List<KeyValuePair<string, string>> cultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Where(c => IsLanguageAssemblyAvailable(lookupPaths, c))
.Select(c => new KeyValuePair<string, string>(c.Name, c.NativeName))
.ToList();
cultures.Insert(0, new KeyValuePair<string, string>("", InvariantCultureText));
return new BindingSource(cultures, null);
}
private bool IsLanguageAssemblyAvailable(List<string> lookupPaths, CultureInfo culture)
{
return lookupPaths.Select(path => Path.Combine(path, culture.Name, LanguageAssemblyName))
.Where(path => File.Exists(path))
.Count() > 0;
}
private async Task InvariantCultureText_Changed(string value)
{
// Normally the completion flag will be long set by the time this method is called.
await LanguageListInitialized.Task;
BindingSource dataSource = ((BindingSource)cbCulture.DataSource);
dataSource[0] = new KeyValuePair<string, string>("", value);
}
private void LanguagePackComboBox_SizeChanged(object sender, EventArgs e)
{
cbCulture.Left = label1.Margin.Left + label1.Width + label1.Margin.Right;
cbCulture.Width = Width - cbCulture.Left - cbCulture.Margin.Right - cbCulture.Margin.Left;
}
private void CbCulture_SelectedIndexChanged(object sender, EventArgs e)
{
SelectedIndexChanged?.Invoke(this, e);
}
private void CbCulture_SelectedValueChanged(object sender, EventArgs e)
{
SelectedValueChanged?.Invoke(this, e);
}
}
}

View File

@ -117,4 +117,79 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbCulture.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="cbCulture.Location" type="System.Drawing.Point, System.Drawing">
<value>112, 3</value>
</data>
<data name="cbCulture.Size" type="System.Drawing.Size, System.Drawing">
<value>145, 21</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbCulture.TabIndex" type="System.Int32, mscorlib">
<value>61</value>
</data>
<data name="&gt;&gt;cbCulture.Name" xml:space="preserve">
<value>cbCulture</value>
</data>
<data name="&gt;&gt;cbCulture.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbCulture.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cbCulture.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="label1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 6</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 13</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>62</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Use language pack</value>
</data>
<data name="label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 27</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>LanguagePackComboBox</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -185,7 +185,7 @@
<value>158, 21</value>
</data>
<data name="cBTouchpadJitterCompensation.Text" xml:space="preserve">
<value>Compensación Jitter</value>
<value>Compensación de nervios</value>
</data>
<data name="lbIdleMinutes.Location" type="System.Drawing.Point, System.Drawing">
<value>257, 56</value>
@ -386,7 +386,7 @@
<value>202, 21</value>
</data>
<data name="cBLaunchProgram.Text" xml:space="preserve">
<value>Lanzar Programa con perfil</value>
<value>Abrir Programa con el perfil</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>Explorar...</value>
@ -395,7 +395,7 @@
<value>129, 17</value>
</data>
<data name="lbUseController.Text" xml:space="preserve">
<value>Utilizar Controlador</value>
<value>Utilizar Control</value>
</data>
<data name="cBMouseAccel.Location" type="System.Drawing.Point, System.Drawing">
<value>227, 11</value>
@ -413,7 +413,7 @@
<value>164, 21</value>
</data>
<data name="cBControllerInput.Text" xml:space="preserve">
<value>para Mapeo y lectura</value>
<value>para asignación y lectura</value>
</data>
<data name="cBIdleDisconnect.Size" type="System.Drawing.Size, System.Drawing">
<value>173, 21</value>
@ -461,7 +461,7 @@
<value>Barra de luz</value>
</data>
<data name="btnRumbleLightTest.Text" xml:space="preserve">
<value>Prueba Ligera</value>
<value>Prueba Rapida</value>
</data>
<data name="gBRumble.Text" xml:space="preserve">
<value>Vibración</value>
@ -497,7 +497,7 @@
<value>212, 156</value>
</data>
<data name="tPController.Text" xml:space="preserve">
<value>Lecturas del Controlador</value>
<value>Lecturas del Control</value>
</data>
<data name="cBShiftControl.Items" xml:space="preserve">
<value>(nada)/Shift desactivado</value>
@ -512,7 +512,7 @@
<value>164, 17</value>
</data>
<data name="lbtoUse.Text" xml:space="preserve">
<value>para usar estos contoles</value>
<value>para usar estos controles</value>
</data>
<data name="tPShiftMod.Text" xml:space="preserve">
<value>Modificador de Shift</value>
@ -563,10 +563,10 @@
<value>Dpad</value>
</data>
<data name="fingerOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>Un dedo en el Touchpad</value>
<value>Un dedo en el panel táctil</value>
</data>
<data name="fingersOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>Dos dedos en el Touchpad</value>
<value>Dos dedos en el panel táctil</value>
</data>
<data name="gBSensitivity,Text" xml:space="preserve">
<value>Sensibilidad</value>

File diff suppressed because it is too large Load Diff

View File

@ -118,8 +118,11 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lowColorChooserButton.Location" type="System.Drawing.Point, System.Drawing">
<value>80, 9</value>
</data>
<data name="cBLightbyBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 21</value>
<value>115, 17</value>
</data>
<data name="cBLightbyBattery.Text" xml:space="preserve">
<value>Цвет от % заряда</value>
@ -128,128 +131,149 @@
<value>С</value>
</data>
<data name="lbGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
<value>14, 13</value>
</data>
<data name="lbGreen.Text" xml:space="preserve">
<value>З</value>
</data>
<data name="lbspc.Size" type="System.Drawing.Size, System.Drawing">
<value>65, 17</value>
<value>54, 13</value>
</data>
<data name="lbspc.Text" xml:space="preserve">
<value>сек/цикл</value>
</data>
<data name="lbRed.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
<value>14, 13</value>
</data>
<data name="lbRed.Text" xml:space="preserve">
<value>К</value>
</data>
<data name="cBDoubleTap.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 34</value>
</data>
<data name="cBDoubleTap.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 21</value>
<value>116, 17</value>
</data>
<data name="cBDoubleTap.Text" xml:space="preserve">
<value>Двойное касание</value>
</data>
<data name="cBTap.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 34</value>
</data>
<data name="cBTap.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 21</value>
<value>69, 17</value>
</data>
<data name="cBTap.Text" xml:space="preserve">
<value>Касание</value>
</data>
<data name="nUDTap.Location" type="System.Drawing.Point, System.Drawing">
<value>98, 31</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cBScroll.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="cBScroll.Location" type="System.Drawing.Point, System.Drawing">
<value>187, 12</value>
<value>143, 3</value>
</data>
<data name="cBScroll.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 21</value>
<value>75, 21</value>
</data>
<data name="cBScroll.Text" xml:space="preserve">
<value>Прокрутка</value>
</data>
<data name="cBSlide.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="cBSlide.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 3</value>
</data>
<data name="cBSlide.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 21</value>
<value>89, 21</value>
</data>
<data name="cBSlide.Text" xml:space="preserve">
<value>Скольжение</value>
</data>
<data name="nUDScroll.Location" type="System.Drawing.Point, System.Drawing">
<value>290, 11</value>
<value>221, 4</value>
</data>
<data name="nUDTouch.Location" type="System.Drawing.Point, System.Drawing">
<value>121, 10</value>
<value>98, 3</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lbButtonMouseSens.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="lbButtonMouseSens.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 40</value>
<value>139, 20</value>
</data>
<data name="lbButtonMouseSens.Text" xml:space="preserve">
<value>Чувствительность мыши:</value>
</data>
<data name="cBlowerRCOn.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="cBlowerRCOn.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 110</value>
<value>7, 82</value>
</data>
<data name="cBlowerRCOn.Size" type="System.Drawing.Size, System.Drawing">
<value>309, 21</value>
<value>143, 30</value>
</data>
<data name="cBlowerRCOn.Text" xml:space="preserve">
<value>Нижняя правая часть тачпада как ПКМ</value>
</data>
<data name="cBTouchpadJitterCompensation.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 83</value>
<value>7, 59</value>
</data>
<data name="cBTouchpadJitterCompensation.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 21</value>
<value>148, 17</value>
</data>
<data name="cBTouchpadJitterCompensation.Text" xml:space="preserve">
<value>Компенсация дрожания</value>
</data>
<data name="lbIdleMinutes.Location" type="System.Drawing.Point, System.Drawing">
<value>249, 64</value>
<value>219, 59</value>
</data>
<data name="lbIdleMinutes.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 17</value>
<value>37, 13</value>
</data>
<data name="lbIdleMinutes.Text" xml:space="preserve">
<value>минут</value>
</data>
<data name="nUDIdleDisconnect.Location" type="System.Drawing.Point, System.Drawing">
<value>180, 62</value>
<value>161, 57</value>
</data>
<data name="cBFlushHIDQueue.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 208</value>
<value>14, 209</value>
</data>
<data name="cBFlushHIDQueue.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 21</value>
<value>137, 17</value>
</data>
<data name="cBFlushHIDQueue.Text" xml:space="preserve">
<value>Очищать очереди HID</value>
</data>
<data name="btnRumbleHeavyTest.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 19</value>
<value>75, 12</value>
</data>
<data name="btnRumbleHeavyTest.Size" type="System.Drawing.Size, System.Drawing">
<value>128, 29</value>
<value>84, 29</value>
</data>
<data name="btnRumbleHeavyTest.Text" xml:space="preserve">
<value>Тест сильной</value>
</data>
<data name="lbFull.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 17</value>
<value>61, 13</value>
</data>
<data name="lbFull.Text" xml:space="preserve">
<value>Заряжена:</value>
</data>
<data name="lbLowRed.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
<value>14, 13</value>
</data>
<data name="lbLowRed.Text" xml:space="preserve">
<value>К</value>
</data>
<data name="lbLowGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>17, 17</value>
<value>14, 13</value>
</data>
<data name="lbLowGreen.Text" xml:space="preserve">
<value>З</value>
@ -257,23 +281,56 @@
<data name="lbLowBlue.Text" xml:space="preserve">
<value>С</value>
</data>
<data name="lbEmpty.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 13</value>
</data>
<data name="lbEmpty.Text" xml:space="preserve">
<value>Разряжена:</value>
</data>
<data name="numUDMouseSens.Location" type="System.Drawing.Point, System.Drawing">
<value>120, 26</value>
<value>158, 17</value>
</data>
<data name="touchpadDisInvertButton.Location" type="System.Drawing.Point, System.Drawing">
<value>160, 130</value>
</data>
<data name="label25.Location" type="System.Drawing.Point, System.Drawing">
<value>157, 114</value>
</data>
<data name="label15.Location" type="System.Drawing.Point, System.Drawing">
<value>156, 70</value>
</data>
<data name="touchpadInvertComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>159, 88</value>
</data>
<data name="cbStartTouchpadOff.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="cbStartTouchpadOff.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 112</value>
</data>
<data name="cbStartTouchpadOff.Size" type="System.Drawing.Size, System.Drawing">
<value>142, 44</value>
</data>
<data name="cbStartTouchpadOff.Text" xml:space="preserve">
<value>Выключить скольжение и прокрутку тачпада</value>
</data>
<data name="pnlTPMouse.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 43</value>
</data>
<data name="pnlTPMouse.Size" type="System.Drawing.Size, System.Drawing">
<value>265, 169</value>
</data>
<data name="rBTPControls.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 46</value>
<value>151, 18</value>
</data>
<data name="controlToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 6</value>
<value>175, 6</value>
</data>
<data name="defaultToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="defaultToolStripMenuItem.Text" xml:space="preserve">
<value>По умолчанию</value>
@ -288,7 +345,7 @@
<value>Инверт. Y</value>
</data>
<data name="DpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="DpadToolStripMenuItem.Text" xml:space="preserve">
<value>Крестовина</value>
@ -303,7 +360,7 @@
<value>Инверт. Y</value>
</data>
<data name="LSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="LSToolStripMenuItem.Text" xml:space="preserve">
<value>Левый стик</value>
@ -318,37 +375,37 @@
<value>Инверт. Y</value>
</data>
<data name="RSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="RSToolStripMenuItem.Text" xml:space="preserve">
<value>Правый стик</value>
</data>
<data name="ABXYToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="ABXYToolStripMenuItem.Text" xml:space="preserve">
<value>Лицевые кнопки</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 26</value>
<value>142, 22</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Text" xml:space="preserve">
<value>w/ Скан-код</value>
</data>
<data name="WASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="WASDToolStripMenuItem.Text" xml:space="preserve">
<value>Управление WASD</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>168, 26</value>
<value>142, 22</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>w/ Скан-код</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>Клавиши со стрелками</value>
@ -363,34 +420,40 @@
<value>Инверт. Y</value>
</data>
<data name="MouseToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 26</value>
<value>178, 22</value>
</data>
<data name="MouseToolStripMenuItem.Text" xml:space="preserve">
<value>Мышь</value>
</data>
<data name="cMSPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>214, 244</value>
<value>179, 208</value>
</data>
<data name="cbStartTouchpadOff.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 137</value>
<data name="fLPTouchSwipe.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 170</value>
</data>
<data name="cbStartTouchpadOff.Size" type="System.Drawing.Size, System.Drawing">
<value>328, 21</value>
</data>
<data name="cbStartTouchpadOff.Text" xml:space="preserve">
<value>Выключить скольжение и прокрутку тачпада</value>
<data name="gBTouchpad.Location" type="System.Drawing.Point, System.Drawing">
<value>2, 251</value>
</data>
<data name="gBTouchpad.Size" type="System.Drawing.Size, System.Drawing">
<value>337, 236</value>
<value>270, 201</value>
</data>
<data name="gBTouchpad.Text" xml:space="preserve">
<value>Тачпад</value>
</data>
<data name="btPollRateLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 233</value>
</data>
<data name="btPollRateComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>86, 230</value>
</data>
<data name="enableTouchToggleCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 186</value>
</data>
<data name="cBDinput.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 181</value>
<value>13, 164</value>
</data>
<data name="cBDinput.Size" type="System.Drawing.Size, System.Drawing">
<value>216, 21</value>
<value>172, 17</value>
</data>
<data name="cBDinput.Text" xml:space="preserve">
<value>Использовать только DInput</value>
@ -399,53 +462,56 @@
<value>287, 144</value>
</data>
<data name="cBLaunchProgram.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 140</value>
<value>8, 131</value>
</data>
<data name="cBLaunchProgram.Size" type="System.Drawing.Size, System.Drawing">
<value>176, 38</value>
<value>141, 30</value>
</data>
<data name="cBLaunchProgram.Text" xml:space="preserve">
<value>Запускать программу
с профилем</value>
</data>
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>193, 144</value>
<value>158, 134</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>Обзор...</value>
</data>
<data name="lbUseController.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 87</value>
</data>
<data name="lbUseController.Size" type="System.Drawing.Size, System.Drawing">
<value>182, 17</value>
<value>142, 13</value>
</data>
<data name="lbUseController.Text" xml:space="preserve">
<value>Использовать контроллер</value>
</data>
<data name="cBMouseAccel.Location" type="System.Drawing.Point, System.Drawing">
<value>189, 26</value>
<value>13, 39</value>
</data>
<data name="cBMouseAccel.Size" type="System.Drawing.Size, System.Drawing">
<value>143, 21</value>
<value>115, 17</value>
</data>
<data name="cBMouseAccel.Text" xml:space="preserve">
<value>Ускорение мыши</value>
</data>
<data name="nUDSixaxis.Location" type="System.Drawing.Point, System.Drawing">
<value>201, 92</value>
<value>164, 85</value>
</data>
<data name="cBControllerInput.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 115</value>
<value>8, 111</value>
</data>
<data name="cBControllerInput.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 21</value>
<value>234, 17</value>
</data>
<data name="cBControllerInput.Text" xml:space="preserve">
<value>для назначения клавиш и вывода текста</value>
</data>
<data name="cBIdleDisconnect.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 63</value>
<value>8, 60</value>
</data>
<data name="cBIdleDisconnect.Size" type="System.Drawing.Size, System.Drawing">
<value>160, 21</value>
<value>140, 17</value>
</data>
<data name="cBIdleDisconnect.Text" xml:space="preserve">
<value>Таймаут бездействия:</value>
@ -453,6 +519,9 @@
<data name="gBOther.Text" xml:space="preserve">
<value>Другое</value>
</data>
<data name="nUDRainbowB.Location" type="System.Drawing.Point, System.Drawing">
<value>151, 215</value>
</data>
<data name="cBFlashType.Items" xml:space="preserve">
<value>Мигать при</value>
</data>
@ -472,13 +541,13 @@
<value>цвет</value>
</data>
<data name="cBWhileCharging.Location" type="System.Drawing.Point, System.Drawing">
<value>142, 206</value>
<value>122, 166</value>
</data>
<data name="btnChargingColor.Location" type="System.Drawing.Point, System.Drawing">
<value>300, 209</value>
</data>
<data name="lbWhileCharging.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 17</value>
<value>111, 13</value>
</data>
<data name="lbWhileCharging.Text" xml:space="preserve">
<value>Индикация зарядки:</value>
@ -487,10 +556,10 @@
<value>Световая панель</value>
</data>
<data name="btnRumbleLightTest.Location" type="System.Drawing.Point, System.Drawing">
<value>224, 19</value>
<value>165, 12</value>
</data>
<data name="btnRumbleLightTest.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 29</value>
<value>91, 30</value>
</data>
<data name="btnRumbleLightTest.Text" xml:space="preserve">
<value>Тест слабой</value>
@ -502,7 +571,7 @@
<value>Правый стик</value>
</data>
<data name="lbInputDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>148, 17</value>
<value>119, 13</value>
</data>
<data name="lbInputDelay.Text" xml:space="preserve">
<value>Задержка ввода: Н/Д</value>
@ -514,19 +583,34 @@
<value>Гироскоп: ось X инвертирована для простоты считывания</value>
</data>
<data name="lb6Accel.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 17</value>
<value>81, 13</value>
</data>
<data name="lb6Accel.Text" xml:space="preserve">
<value>Акселерометр</value>
</data>
<data name="lb6Gryo.Size" type="System.Drawing.Size, System.Drawing">
<value>40, 17</value>
<value>55, 13</value>
</data>
<data name="lb6Gryo.Text" xml:space="preserve">
<value>Гироскоп</value>
</data>
<data name="fLPTiltControls.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 103</value>
<value>0, 55</value>
</data>
<data name="fLPTiltControls.Size" type="System.Drawing.Size, System.Drawing">
<value>271, 128</value>
</data>
<data name="lBControls.Location" type="System.Drawing.Point, System.Drawing">
<value>275, 237</value>
</data>
<data name="lBControls.Size" type="System.Drawing.Size, System.Drawing">
<value>157, 199</value>
</data>
<data name="lbControlTip.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 238</value>
</data>
<data name="lbControlTip.Size" type="System.Drawing.Size, System.Drawing">
<value>182, 14</value>
</data>
<data name="lbControlTip.Text" xml:space="preserve">
<value>Нажмите на кнопку для назначения действия
@ -565,133 +649,157 @@
<data name="tPCurve.Text" xml:space="preserve">
<value>Кривые</value>
</data>
<data name="rBSAControls.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="rBSAControls.Location" type="System.Drawing.Point, System.Drawing">
<value>14, 48</value>
<value>140, 20</value>
</data>
<data name="rBSAControls.Size" type="System.Drawing.Size, System.Drawing">
<value>231, 21</value>
<value>120, 30</value>
</data>
<data name="rBSAControls.Text" xml:space="preserve">
<value>Использовать для управления</value>
</data>
<data name="rBSAMouse.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="rBSAMouse.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 20</value>
</data>
<data name="rBSAMouse.Size" type="System.Drawing.Size, System.Drawing">
<value>188, 21</value>
<value>120, 30</value>
</data>
<data name="rBSAMouse.Text" xml:space="preserve">
<value>Использовать как мышь</value>
</data>
<data name="cBGyroMouseXAxis.Location" type="System.Drawing.Point, System.Drawing">
<value>172, 93</value>
</data>
<data name="lbGyroSmooth.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 141</value>
</data>
<data name="cBGyroSmooth.Location" type="System.Drawing.Point, System.Drawing">
<value>75, 141</value>
</data>
<data name="lbSmoothWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 142</value>
</data>
<data name="nUDGyroSmoothWeight.Location" type="System.Drawing.Point, System.Drawing">
<value>191, 134</value>
</data>
<data name="cBGyroInvertY.Location" type="System.Drawing.Point, System.Drawing">
<value>191, 95</value>
<value>146, 120</value>
</data>
<data name="cBGyroInvertX.Location" type="System.Drawing.Point, System.Drawing">
<value>137, 95</value>
<value>102, 120</value>
</data>
<data name="lbGyroInvert.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 17</value>
<value>88, 13</value>
</data>
<data name="lbGyroInvert.Text" xml:space="preserve">
<value>Инвертировать:</value>
</data>
<data name="lbGyroTriggers.Size" type="System.Drawing.Size, System.Drawing">
<value>71, 17</value>
<value>51, 13</value>
</data>
<data name="lbGyroTriggers.Text" xml:space="preserve">
<value>Триггер:</value>
</data>
<data name="nUDGyroSensitivity.Location" type="System.Drawing.Point, System.Drawing">
<value>101, 67</value>
</data>
<data name="lbGyroSens.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="lbGyroSens.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 61</value>
</data>
<data name="lbGyroSens.Size" type="System.Drawing.Size, System.Drawing">
<value>196, 17</value>
<value>88, 30</value>
</data>
<data name="lbGyroSens.Text" xml:space="preserve">
<value>Чувствительность гироскопа:</value>
</data>
<data name="pnlSAMouse.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 93</value>
<value>-2, 51</value>
</data>
<data name="pnlSAMouse.Size" type="System.Drawing.Size, System.Drawing">
<value>269, 168</value>
</data>
<data name="gBGyro.Size" type="System.Drawing.Size, System.Drawing">
<value>340, 259</value>
<value>272, 208</value>
</data>
<data name="crossToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="circleToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="squareToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="triangleToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="l1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="l2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="r1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="r2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="onTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="downToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="leftToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="rightToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="l3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="r3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="fingerOnTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="fingerOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>Палец на тачпаде</value>
</data>
<data name="fingersOnTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="fingersOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>Два пальца на тачпаде</value>
</data>
<data name="optionsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="shareToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="pSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="alwaysOnToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>244, 26</value>
<value>198, 22</value>
</data>
<data name="alwaysOnToolStripMenuItem.Text" xml:space="preserve">
<value>Всегда включен</value>
</data>
<data name="cMGyroTriggers.Size" type="System.Drawing.Size, System.Drawing">
<value>245, 524</value>
</data>
<data name="gBSensitivity,Text" xml:space="preserve">
<value>Чувствительность</value>
</data>
<data name="resetToolStripMenuItem.Text" xml:space="preserve">
<value>Сброс</value>
</data>
<data name="tPController.Text" xml:space="preserve">
<value>Считывание контроллера</value>
<value>199, 444</value>
</data>
</root>

View File

@ -119,82 +119,106 @@
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="cBLightbyBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 21</value>
<value>146, 17</value>
</data>
<data name="cBLightbyBattery.Text" xml:space="preserve">
<value>颜色随电量百分比变化</value>
</data>
<data name="lbBlue.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 77</value>
</data>
<data name="lbBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbBlue.Text" xml:space="preserve">
<value>蓝</value>
</data>
<data name="lbGreen.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 55</value>
</data>
<data name="lbGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbGreen.Text" xml:space="preserve">
<value>绿</value>
</data>
<data name="lbspc.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
<value>48, 13</value>
</data>
<data name="lbspc.Text" xml:space="preserve">
<value>秒/循環</value>
</data>
<data name="lbRed.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 29</value>
</data>
<data name="lbRed.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbRed.Text" xml:space="preserve">
<value>红</value>
</data>
<data name="cBDoubleTap.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
<value>50, 17</value>
</data>
<data name="cBDoubleTap.Text" xml:space="preserve">
<value>双击</value>
</data>
<data name="cBTap.Size" type="System.Drawing.Size, System.Drawing">
<value>50, 17</value>
</data>
<data name="cBTap.Text" xml:space="preserve">
<value>轻触</value>
</data>
<data name="cBScroll.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
<value>47, 17</value>
</data>
<data name="cBScroll.Text" xml:space="preserve">
<value>滚动</value>
</data>
<data name="cBSlide.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 21</value>
<value>50, 17</value>
</data>
<data name="cBSlide.Text" xml:space="preserve">
<value>滑动</value>
</data>
<data name="lbButtonMouseSens.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 17</value>
</data>
<data name="lbButtonMouseSens.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 17</value>
<value>67, 13</value>
</data>
<data name="lbButtonMouseSens.Text" xml:space="preserve">
<value>鼠标灵敏度</value>
</data>
<data name="cBlowerRCOn.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 21</value>
<value>110, 17</value>
</data>
<data name="cBlowerRCOn.Text" xml:space="preserve">
<value>右下角設為右鍵</value>
</data>
<data name="cBTouchpadJitterCompensation.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
<value>74, 17</value>
</data>
<data name="cBTouchpadJitterCompensation.Text" xml:space="preserve">
<value>抖動補償</value>
</data>
<data name="lbIdleMinutes.Location" type="System.Drawing.Point, System.Drawing">
<value>179, 65</value>
</data>
<data name="lbIdleMinutes.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
<value>19, 13</value>
</data>
<data name="lbIdleMinutes.Text" xml:space="preserve">
<value>分</value>
</data>
<data name="nUDIdleDisconnect.Location" type="System.Drawing.Point, System.Drawing">
<value>124, 62</value>
</data>
<data name="cBFlushHIDQueue.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 172</value>
</data>
<data name="cBFlushHIDQueue.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 21</value>
<value>69, 17</value>
</data>
<data name="cBFlushHIDQueue.Text" xml:space="preserve">
<value>清空HID</value>
@ -203,233 +227,269 @@
<value>测试震动</value>
</data>
<data name="lbFull.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 17</value>
<value>37, 13</value>
</data>
<data name="lbFull.Text" xml:space="preserve">
<value>滿電:</value>
</data>
<data name="lbLowRed.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 30</value>
</data>
<data name="lbLowRed.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbLowRed.Text" xml:space="preserve">
<value>红</value>
</data>
<data name="lbLowGreen.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 56</value>
</data>
<data name="lbLowGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbLowGreen.Text" xml:space="preserve">
<value>绿</value>
</data>
<data name="lbLowBlue.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 78</value>
</data>
<data name="lbLowBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
<value>19, 13</value>
</data>
<data name="lbLowBlue.Text" xml:space="preserve">
<value>蓝</value>
</data>
<data name="lbEmpty.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
<value>25, 13</value>
</data>
<data name="lbEmpty.Text" xml:space="preserve">
<value>空:</value>
</data>
<data name="numUDMouseSens.Location" type="System.Drawing.Point, System.Drawing">
<value>85, 15</value>
</data>
<data name="cbStartTouchpadOff.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 21</value>
<value>139, 17</value>
</data>
<data name="cbStartTouchpadOff.Text" xml:space="preserve">
<value>開啟時滑動/捲動關閉</value>
</data>
<data name="controlToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 6</value>
<value>111, 6</value>
</data>
<data name="defaultToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="defaultToolStripMenuItem.Text" xml:space="preserve">
<value>默认</value>
</data>
<data name="tSMIDPadInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIDPadInverted.Text" xml:space="preserve">
<value>反转</value>
</data>
<data name="tSMIDPadInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIDPadInvertedX.Text" xml:space="preserve">
<value>反转X轴</value>
</data>
<data name="tSMIDPadInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIDPadInvertedY.Text" xml:space="preserve">
<value>反转Y轴</value>
</data>
<data name="DpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="DpadToolStripMenuItem.Text" xml:space="preserve">
<value>十字键</value>
</data>
<data name="tSMILSInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMILSInverted.Text" xml:space="preserve">
<value>反转</value>
</data>
<data name="tSMILSInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMILSInvertedX.Text" xml:space="preserve">
<value>反转X轴</value>
</data>
<data name="tSMILSInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMILSInvertedY.Text" xml:space="preserve">
<value>反转Y轴</value>
</data>
<data name="LSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="LSToolStripMenuItem.Text" xml:space="preserve">
<value>左摇杆</value>
</data>
<data name="tSMIRSInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIRSInverted.Text" xml:space="preserve">
<value>反转</value>
</data>
<data name="tSMIRSInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIRSInvertedX.Text" xml:space="preserve">
<value>反转X轴</value>
</data>
<data name="tSMIRSInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIRSInvertedY.Text" xml:space="preserve">
<value>反转Y轴</value>
</data>
<data name="RSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="RSToolStripMenuItem.Text" xml:space="preserve">
<value>右摇杆</value>
</data>
<data name="ABXYToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="ABXYToolStripMenuItem.Text" xml:space="preserve">
<value>右侧动作键</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 26</value>
<value>139, 22</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Text" xml:space="preserve">
<value>用掃描代碼</value>
</data>
<data name="WASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 26</value>
<value>139, 22</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>用掃描代碼</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>方向键</value>
</data>
<data name="tSMIMouseInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIMouseInverted.Text" xml:space="preserve">
<value>反转</value>
</data>
<data name="tSMIMouseInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIMouseInvertedX.Text" xml:space="preserve">
<value>反转X轴</value>
</data>
<data name="tSMIMouseInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>141, 26</value>
<value>120, 22</value>
</data>
<data name="tSMIMouseInvertedY.Text" xml:space="preserve">
<value>反转Y轴</value>
</data>
<data name="MouseToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 26</value>
<value>114, 22</value>
</data>
<data name="MouseToolStripMenuItem.Text" xml:space="preserve">
<value>鼠标</value>
</data>
<data name="cMSPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>134, 244</value>
<value>115, 208</value>
</data>
<data name="gBTouchpad.Text" xml:space="preserve">
<value>触摸板</value>
</data>
<data name="btPollRateLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 222</value>
</data>
<data name="btPollRateComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>84, 219</value>
</data>
<data name="enableTouchToggleCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 196</value>
</data>
<data name="cBDinput.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 149</value>
</data>
<data name="cBDinput.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 21</value>
<value>96, 17</value>
</data>
<data name="cBDinput.Text" xml:space="preserve">
<value>只使用 Dinput</value>
</data>
<data name="pBProgram.Location" type="System.Drawing.Point, System.Drawing">
<value>236, 133</value>
<value>233, 119</value>
</data>
<data name="cBLaunchProgram.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 140</value>
<value>9, 121</value>
</data>
<data name="cBLaunchProgram.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 21</value>
<value>134, 17</value>
</data>
<data name="cBLaunchProgram.Text" xml:space="preserve">
<value>运行程式与配置文件</value>
</data>
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 135</value>
<value>149, 119</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>浏览...</value>
</data>
<data name="lbUseController.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 95</value>
</data>
<data name="lbUseController.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
<value>67, 13</value>
</data>
<data name="lbUseController.Text" xml:space="preserve">
<value>使用控制器</value>
</data>
<data name="cBMouseAccel.Location" type="System.Drawing.Point, System.Drawing">
<value>205, 21</value>
<value>9, 40</value>
</data>
<data name="cBMouseAccel.Size" type="System.Drawing.Size, System.Drawing">
<value>77, 21</value>
<value>74, 17</value>
</data>
<data name="cBMouseAccel.Text" xml:space="preserve">
<value>鼠标加速</value>
</data>
<data name="nUDSixaxis.Location" type="System.Drawing.Point, System.Drawing">
<value>77, 94</value>
</data>
<data name="cBControllerInput.Location" type="System.Drawing.Point, System.Drawing">
<value>115, 96</value>
</data>
<data name="cBControllerInput.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 21</value>
<value>110, 17</value>
</data>
<data name="cBControllerInput.Text" xml:space="preserve">
<value>用於映射和讀出</value>
</data>
<data name="cBIdleDisconnect.Size" type="System.Drawing.Size, System.Drawing">
<value>116, 21</value>
<value>110, 17</value>
</data>
<data name="cBIdleDisconnect.Text" xml:space="preserve">
<value>空闲时断开连接</value>
</data>
<data name="gBOther.Size" type="System.Drawing.Size, System.Drawing">
<value>267, 250</value>
</data>
<data name="gBOther.Text" xml:space="preserve">
<value>其他</value>
</data>
@ -452,35 +512,11 @@
<value>颜色</value>
</data>
<data name="lbWhileCharging.Size" type="System.Drawing.Size, System.Drawing">
<value>58, 17</value>
<value>49, 13</value>
</data>
<data name="lbWhileCharging.Text" xml:space="preserve">
<value>充电时:</value>
</data>
<data name="cBShiftLight.Size" type="System.Drawing.Size, System.Drawing">
<value>176, 21</value>
</data>
<data name="cBShiftLight.Text" xml:space="preserve">
<value>shift mode 時用另一種顏色</value>
</data>
<data name="lbShiftRed.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="lbShiftRed.Text" xml:space="preserve">
<value>红</value>
</data>
<data name="lbShiftGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="lbShiftGreen.Text" xml:space="preserve">
<value>绿</value>
</data>
<data name="lbShiftBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>22, 17</value>
</data>
<data name="lbShiftBlue.Text" xml:space="preserve">
<value>蓝</value>
</data>
<data name="gBLightbar.Text" xml:space="preserve">
<value>灯条</value>
</data>
@ -494,7 +530,7 @@
<value>右摇杆</value>
</data>
<data name="lbInputDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 17</value>
<value>94, 13</value>
</data>
<data name="lbInputDelay.Text" xml:space="preserve">
<value>输入延迟N/Ams</value>
@ -506,32 +542,17 @@
<value>六軸X軸已反轉來方便閱讀</value>
</data>
<data name="lb6Accel.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
<value>31, 13</value>
</data>
<data name="lb6Accel.Text" xml:space="preserve">
<value>加速</value>
</data>
<data name="lb6Gryo.Size" type="System.Drawing.Size, System.Drawing">
<value>44, 17</value>
<value>43, 13</value>
</data>
<data name="lb6Gryo.Text" xml:space="preserve">
<value>陀螺仪</value>
</data>
<data name="lbHold.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
</data>
<data name="lbHold.Text" xml:space="preserve">
<value>按住</value>
</data>
<data name="lbtoUse.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 17</value>
</data>
<data name="lbtoUse.Text" xml:space="preserve">
<value>來使用這些控制</value>
</data>
<data name="cBShiftControl.Items" xml:space="preserve">
<value>(無)/shift 關閉</value>
</data>
<data name="lbControlTip.Text" xml:space="preserve">
<value>點擊光調來開啟顏色選擇器</value>
</data>

View File

@ -119,91 +119,103 @@
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="cBLightbyBattery.Size" type="System.Drawing.Size, System.Drawing">
<value>119, 21</value>
<value>118, 17</value>
</data>
<data name="cBLightbyBattery.Text" xml:space="preserve">
<value>顏色依電量%變化</value>
</data>
<data name="lbBlue.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 77</value>
</data>
<data name="lbBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
<value>19, 13</value>
</data>
<data name="lbBlue.Text" xml:space="preserve">
<value>藍</value>
</data>
<data name="lbGreen.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 55</value>
</data>
<data name="lbGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 13</value>
</data>
<data name="lbGreen.Text" xml:space="preserve">
<value>綠</value>
</data>
<data name="lbspc.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 17</value>
<value>48, 13</value>
</data>
<data name="lbspc.Text" xml:space="preserve">
<value>秒/循環</value>
</data>
<data name="lbRed.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 29</value>
</data>
<data name="lbRed.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
<value>19, 13</value>
</data>
<data name="lbRed.Text" xml:space="preserve">
<value>紅</value>
</data>
<data name="cBDoubleTap.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
<value>50, 17</value>
</data>
<data name="cBDoubleTap.Text" xml:space="preserve">
<value>雙擊</value>
</data>
<data name="cBTap.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
<value>50, 17</value>
</data>
<data name="cBTap.Text" xml:space="preserve">
<value>點擊</value>
</data>
<data name="cBScroll.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
<value>50, 17</value>
</data>
<data name="cBScroll.Text" xml:space="preserve">
<value>捲動</value>
</data>
<data name="cBSlide.Size" type="System.Drawing.Size, System.Drawing">
<value>52, 21</value>
<value>50, 17</value>
</data>
<data name="cBSlide.Text" xml:space="preserve">
<value>滑動</value>
</data>
<data name="lbButtonMouseSens.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
<value>73, 13</value>
</data>
<data name="lbButtonMouseSens.Text" xml:space="preserve">
<value>滑鼠靈敏度:</value>
</data>
<data name="cBlowerRCOn.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 21</value>
<value>110, 17</value>
</data>
<data name="cBlowerRCOn.Text" xml:space="preserve">
<value>右下角設為右鍵</value>
</data>
<data name="cBTouchpadJitterCompensation.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
<value>74, 17</value>
</data>
<data name="cBTouchpadJitterCompensation.Text" xml:space="preserve">
<value>抖動補償</value>
</data>
<data name="lbIdleMinutes.Location" type="System.Drawing.Point, System.Drawing">
<value>170, 59</value>
<value>155, 66</value>
</data>
<data name="lbIdleMinutes.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
<value>31, 13</value>
</data>
<data name="lbIdleMinutes.Text" xml:space="preserve">
<value>分鐘</value>
</data>
<data name="nUDIdleDisconnect.Location" type="System.Drawing.Point, System.Drawing">
<value>102, 55</value>
<value>100, 62</value>
</data>
<data name="cBFlushHIDQueue.Location" type="System.Drawing.Point, System.Drawing">
<value>45, 213</value>
<value>10, 201</value>
</data>
<data name="cBFlushHIDQueue.Size" type="System.Drawing.Size, System.Drawing">
<value>79, 21</value>
<value>72, 17</value>
</data>
<data name="cBFlushHIDQueue.Text" xml:space="preserve">
<value>刷新 HID</value>
@ -212,233 +224,254 @@
<value>測試強震</value>
</data>
<data name="lbFull.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 17</value>
<value>37, 13</value>
</data>
<data name="lbFull.Text" xml:space="preserve">
<value>滿電:</value>
</data>
<data name="lbLowRed.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 30</value>
</data>
<data name="lbLowRed.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
<value>19, 13</value>
</data>
<data name="lbLowRed.Text" xml:space="preserve">
<value>紅</value>
</data>
<data name="lbLowGreen.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 51</value>
</data>
<data name="lbLowGreen.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 13</value>
</data>
<data name="lbLowGreen.Text" xml:space="preserve">
<value>綠</value>
</data>
<data name="lbLowBlue.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 74</value>
</data>
<data name="lbLowBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
<value>19, 13</value>
</data>
<data name="lbLowBlue.Text" xml:space="preserve">
<value>藍</value>
</data>
<data name="lbEmpty.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 17</value>
<value>37, 13</value>
</data>
<data name="lbEmpty.Text" xml:space="preserve">
<value>沒電:</value>
</data>
<data name="numUDMouseSens.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 19</value>
<value>84, 17</value>
</data>
<data name="gBTouchpad.Text" xml:space="preserve">
<value>觸控版</value>
</data>
<data name="pnlTPMouse.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 60</value>
<value>3, 36</value>
</data>
<data name="cbStartTouchpadOff.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 21</value>
<value>139, 17</value>
</data>
<data name="cbStartTouchpadOff.Text" xml:space="preserve">
<value>開啟時滑動/捲動關閉</value>
</data>
<data name="fLPShiftTouchSwipe.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 61</value>
<data name="fLPTouchSwipe.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 40</value>
</data>
<data name="fLPTouchSwipe.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 153</value>
</data>
<data name="cMSPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>150, 244</value>
<value>128, 208</value>
</data>
<data name="controlToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
<value>146, 6</value>
<value>124, 6</value>
</data>
<data name="defaultToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="defaultToolStripMenuItem.Text" xml:space="preserve">
<value>預設</value>
</data>
<data name="DpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="DpadToolStripMenuItem.Text" xml:space="preserve">
<value>十字鍵</value>
</data>
<data name="tSMIDPadInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIDPadInverted.Text" xml:space="preserve">
<value>反轉</value>
</data>
<data name="tSMIDPadInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIDPadInvertedX.Text" xml:space="preserve">
<value>反轉 X</value>
</data>
<data name="tSMIDPadInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIDPadInvertedY.Text" xml:space="preserve">
<value>反轉 Y</value>
</data>
<data name="LSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="LSToolStripMenuItem.Text" xml:space="preserve">
<value>左搖桿</value>
</data>
<data name="tSMILSInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMILSInverted.Text" xml:space="preserve">
<value>反轉</value>
</data>
<data name="tSMILSInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMILSInvertedX.Text" xml:space="preserve">
<value>反轉 X</value>
</data>
<data name="tSMILSInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMILSInvertedY.Text" xml:space="preserve">
<value>反轉 Y</value>
</data>
<data name="RSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="RSToolStripMenuItem.Text" xml:space="preserve">
<value>右搖桿</value>
</data>
<data name="tSMIRSInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIRSInverted.Text" xml:space="preserve">
<value>反轉</value>
</data>
<data name="tSMIRSInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIRSInvertedX.Text" xml:space="preserve">
<value>反轉 X</value>
</data>
<data name="tSMIRSInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIRSInvertedY.Text" xml:space="preserve">
<value>反轉 Y</value>
</data>
<data name="ABXYToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="ABXYToolStripMenuItem.Text" xml:space="preserve">
<value>右側四個按鈕</value>
</data>
<data name="WASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 26</value>
<value>139, 22</value>
</data>
<data name="wScanCodeWASDToolStripMenuItem.Text" xml:space="preserve">
<value>用掃描代碼</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="ArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>方向鍵</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>164, 26</value>
<value>139, 22</value>
</data>
<data name="wScanCodeArrowKeysToolStripMenuItem.Text" xml:space="preserve">
<value>用掃描代碼</value>
</data>
<data name="MouseToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 26</value>
<value>127, 22</value>
</data>
<data name="MouseToolStripMenuItem.Text" xml:space="preserve">
<value>滑鼠</value>
</data>
<data name="tSMIMouseInverted.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIMouseInverted.Text" xml:space="preserve">
<value>反轉</value>
</data>
<data name="tSMIMouseInvertedX.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIMouseInvertedX.Text" xml:space="preserve">
<value>反轉 X</value>
</data>
<data name="tSMIMouseInvertedY.Size" type="System.Drawing.Size, System.Drawing">
<value>129, 26</value>
<value>110, 22</value>
</data>
<data name="tSMIMouseInvertedY.Text" xml:space="preserve">
<value>反轉 Y</value>
</data>
<data name="fLPTouchSwipe.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 61</value>
<data name="gBOther.Size" type="System.Drawing.Size, System.Drawing">
<value>272, 245</value>
</data>
<data name="gBOther.Text" xml:space="preserve">
<value>其它</value>
</data>
<data name="btPollRateLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 226</value>
</data>
<data name="btPollRateComboBox.Location" type="System.Drawing.Point, System.Drawing">
<value>83, 221</value>
</data>
<data name="enableTouchToggleCheckbox.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 179</value>
</data>
<data name="cBDinput.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 184</value>
<value>8, 158</value>
</data>
<data name="cBDinput.Size" type="System.Drawing.Size, System.Drawing">
<value>108, 21</value>
<value>96, 17</value>
</data>
<data name="cBDinput.Text" xml:space="preserve">
<value>只使用 Dinput</value>
</data>
<data name="pBProgram.Location" type="System.Drawing.Point, System.Drawing">
<value>197, 133</value>
<value>183, 125</value>
</data>
<data name="cBLaunchProgram.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 131</value>
<value>6, 122</value>
</data>
<data name="cBLaunchProgram.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 38</value>
<value>86, 30</value>
</data>
<data name="cBLaunchProgram.Text" xml:space="preserve">
<value>啟用程式
使用設定檔</value>
</data>
<data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
<value>107, 135</value>
<value>100, 125</value>
</data>
<data name="btnBrowse.Text" xml:space="preserve">
<value>瀏覽...</value>
</data>
<data name="lbUseController.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
<value>67, 13</value>
</data>
<data name="lbUseController.Text" xml:space="preserve">
<value>使用控制器</value>
</data>
<data name="cBMouseAccel.Location" type="System.Drawing.Point, System.Drawing">
<value>156, 20</value>
</data>
<data name="cBMouseAccel.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 21</value>
<value>74, 17</value>
</data>
<data name="cBMouseAccel.Text" xml:space="preserve">
<value>滑鼠加速</value>
@ -450,13 +483,13 @@
<value>128, 93</value>
</data>
<data name="cBControllerInput.Size" type="System.Drawing.Size, System.Drawing">
<value>107, 21</value>
<value>110, 17</value>
</data>
<data name="cBControllerInput.Text" xml:space="preserve">
<value>用於映射和讀出</value>
</data>
<data name="cBIdleDisconnect.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 21</value>
<value>86, 17</value>
</data>
<data name="cBIdleDisconnect.Text" xml:space="preserve">
<value>閒置時斷開</value>
@ -483,32 +516,11 @@
<value>顏色</value>
</data>
<data name="lbWhileCharging.Size" type="System.Drawing.Size, System.Drawing">
<value>63, 17</value>
<value>61, 13</value>
</data>
<data name="lbWhileCharging.Text" xml:space="preserve">
<value>當改變時:</value>
</data>
<data name="cBShiftLight.Size" type="System.Drawing.Size, System.Drawing">
<value>176, 21</value>
</data>
<data name="cBShiftLight.Text" xml:space="preserve">
<value>shift mode 時用另一種顏色</value>
</data>
<data name="lbShiftRed.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
</data>
<data name="lbShiftRed.Text" xml:space="preserve">
<value>紅</value>
</data>
<data name="lbShiftGreen.Text" xml:space="preserve">
<value>綠</value>
</data>
<data name="lbShiftBlue.Size" type="System.Drawing.Size, System.Drawing">
<value>19, 17</value>
</data>
<data name="lbShiftBlue.Text" xml:space="preserve">
<value>藍</value>
</data>
<data name="gBRumble.Text" xml:space="preserve">
<value>震動</value>
</data>
@ -519,7 +531,7 @@
<value>右搖桿</value>
</data>
<data name="lbInputDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>101, 17</value>
<value>94, 13</value>
</data>
<data name="lbInputDelay.Text" xml:space="preserve">
<value>輸入延遲: N/Ams</value>
@ -531,35 +543,17 @@
<value>六軸X軸已反轉來方便閱讀</value>
</data>
<data name="lb6Accel.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
<value>31, 13</value>
</data>
<data name="lb6Accel.Text" xml:space="preserve">
<value>加速</value>
</data>
<data name="lb6Gryo.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 17</value>
<value>43, 13</value>
</data>
<data name="lb6Gryo.Text" xml:space="preserve">
<value>陀螺儀</value>
</data>
<data name="lbHold.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
</data>
<data name="lbHold.Text" xml:space="preserve">
<value>按住</value>
</data>
<data name="lbtoUse.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 17</value>
</data>
<data name="lbtoUse.Text" xml:space="preserve">
<value>來使用這些控制</value>
</data>
<data name="cBShiftControl.Items" xml:space="preserve">
<value>(無)/shift 關閉</value>
</data>
<data name="cBShiftControl.Items26" xml:space="preserve">
<value>觸控版 (未點擊)</value>
</data>
<data name="tPControls.Text" xml:space="preserve">
<value>控制器</value>
</data>
@ -597,119 +591,103 @@
<value>死區</value>
</data>
<data name="rBSAControls.Size" type="System.Drawing.Size, System.Drawing">
<value>84, 21</value>
<value>85, 17</value>
</data>
<data name="rBSAControls.Text" xml:space="preserve">
<value>當成控制器</value>
</data>
<data name="rBSAMouse.Size" type="System.Drawing.Size, System.Drawing">
<value>73, 21</value>
<value>73, 17</value>
</data>
<data name="rBSAMouse.Text" xml:space="preserve">
<value>當成滑鼠</value>
</data>
<data name="lbGyroInvert.Size" type="System.Drawing.Size, System.Drawing">
<value>30, 17</value>
<value>31, 13</value>
</data>
<data name="lbGyroInvert.Text" xml:space="preserve">
<value>反轉</value>
</data>
<data name="lbGyroTriggers.Size" type="System.Drawing.Size, System.Drawing">
<value>55, 17</value>
<value>55, 13</value>
</data>
<data name="lbGyroTriggers.Text" xml:space="preserve">
<value>啟動按鍵</value>
</data>
<data name="lbGyroSens.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 17</value>
<value>79, 13</value>
</data>
<data name="lbGyroSens.Text" xml:space="preserve">
<value>陀螺儀靈敏度</value>
</data>
<data name="cMGyroTriggers.Size" type="System.Drawing.Size, System.Drawing">
<value>205, 524</value>
<value>172, 444</value>
</data>
<data name="crossToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="circleToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="squareToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="triangleToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="l1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="l2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="r1ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="r2ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="onTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="downToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="leftToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="rightToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="l3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="r3ToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="fingerOnTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="fingerOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>手指放在觸摸板</value>
</data>
<data name="fingersOnTouchpadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="fingersOnTouchpadToolStripMenuItem.Text" xml:space="preserve">
<value>2手指放在觸摸板</value>
</data>
<data name="optionsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="shareToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="pSToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
<value>171, 22</value>
</data>
<data name="resetToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>204, 26</value>
</data>
<data name="resetToolStripMenuItem.Text" xml:space="preserve">
<value>重置</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<data name="gBSensitivity,Text" xml:space="preserve">
<value>靈敏度</value>
</data>
<data name="tPController.Text" xml:space="preserve">
<value>控制器讀數</value>
</data>
<data name="tPShiftMod.Text" xml:space="preserve">
<value>Shift Modifier</value>
<data name="alwaysOnToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>171, 22</value>
</data>
<data name="alwaysOnToolStripMenuItem.Text" xml:space="preserve">
<value>總是啟用</value>

View File

@ -69,7 +69,7 @@
this.btnRecord.UseVisualStyleBackColor = true;
this.btnRecord.Click += new System.EventHandler(this.btnRecord_Click);
this.btnRecord.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.btnRecord.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.btnRecord.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
//
// cBRecordDelays
//
@ -78,7 +78,7 @@
this.cBRecordDelays.TabStop = false;
this.cBRecordDelays.UseVisualStyleBackColor = true;
this.cBRecordDelays.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.cBRecordDelays.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.cBRecordDelays.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
this.cBRecordDelays.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown);
this.cBRecordDelays.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp);
//
@ -97,7 +97,7 @@
this.lVMacros.View = System.Windows.Forms.View.Details;
this.lVMacros.SelectedIndexChanged += new System.EventHandler(this.lVMacros_SelectedIndexChanged);
this.lVMacros.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.lVMacros.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.lVMacros.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
this.lVMacros.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lVMacros_MouseDoubleClick);
this.lVMacros.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown);
this.lVMacros.MouseHover += new System.EventHandler(this.lVMacros_MouseHover);
@ -185,7 +185,7 @@
this.btnLightbar.UseVisualStyleBackColor = true;
this.btnLightbar.Click += new System.EventHandler(this.btnLightbar_Click);
this.btnLightbar.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.btnLightbar.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.btnLightbar.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
//
// btnRumble
//
@ -194,7 +194,7 @@
this.btnRumble.UseVisualStyleBackColor = true;
this.btnRumble.Click += new System.EventHandler(this.btnRumble_Click);
this.btnRumble.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.btnRumble.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.btnRumble.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
//
// btn5th
//
@ -203,7 +203,7 @@
this.btn5th.UseVisualStyleBackColor = true;
this.btn5th.Click += new System.EventHandler(this.btn5th_Click);
this.btn5th.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.btn5th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.btn5th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
//
// btn4th
//
@ -212,7 +212,7 @@
this.btn4th.UseVisualStyleBackColor = true;
this.btn4th.Click += new System.EventHandler(this.btn4th_Click);
this.btn4th.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.btn4th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.btn4th.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
//
// btnLoadP
//
@ -286,7 +286,7 @@
this.ShowInTaskbar = false;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.RecordBox_FormClosing);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.anyKeyDown);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.anyKeyUp);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.AnyKeyUp);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.anyMouseDown);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.anyMouseUp);
this.Resize += new System.EventHandler(this.RecordBox_Resize);

View File

@ -1,15 +1,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NonFormTimer = System.Timers.Timer;
using System.IO;
using System.Reflection;
@ -19,7 +14,8 @@ namespace DS4Windows
public partial class RecordBox : Form
{
Stopwatch sw = new Stopwatch();
Timer ds4 = new Timer();
//Timer ds4 = new Timer();
NonFormTimer ds4 = new NonFormTimer();
public List<int> macros = new List<int>(), macrosAfter = new List<int>();
public List<string> macronames = new List<string>();
SpecActions sA;
@ -36,12 +32,16 @@ namespace DS4Windows
openPresets.Filter = Properties.Resources.TextDocs + "|*.txt";
savePresets.Filter = Properties.Resources.TextDocs + "|*.txt";
if (op != null)
if (kbm.macrorepeat)
cBStyle.SelectedIndex = 1;
else
cBStyle.SelectedIndex = 0;
{
if (kbm.macrorepeat)
cBStyle.SelectedIndex = 1;
else
cBStyle.SelectedIndex = 0;
}
AddtoDS4List();
ds4.Tick += ds4_Tick;
//ds4.Tick += ds4_Tick;
ds4.Elapsed += Ds4_Tick;
ds4.Interval = 1;
if (kbm.macrostag.Count > 0)
{
@ -59,10 +59,13 @@ namespace DS4Windows
cBStyle.SelectedIndex = 1;
else
cBStyle.SelectedIndex = 0;
AddtoDS4List();
if (button > -1)
sAButton = button;
ds4.Tick += ds4_Tick;
//ds4.Tick += ds4_Tick;
ds4.Elapsed += Ds4_Tick;
ds4.Interval = 1;
lbRecordTip.Visible = false;
cBStyle.Visible = false;
@ -86,7 +89,6 @@ namespace DS4Windows
void AddtoDS4List()
{
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Cross);
dcs.Add(DS4Controls.Circle);
dcs.Add(DS4Controls.Square);
@ -121,81 +123,65 @@ namespace DS4Windows
else
macros.Add(value);
}
bool[] pTP = new bool[4];
void ds4_Tick(object sender, EventArgs e)
private void Ds4_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
if (Program.rootHub.DS4Controllers[0] != null)
{
cState = Program.rootHub.getDS4State(0);
if (btnRecord.Text == Properties.Resources.StopText)
this.BeginInvoke((Action)(() =>
{
if (cBRecordDelays.Checked)
if (btnRecord.Text == Properties.Resources.StopText)
{
Mouse tP = Program.rootHub.touchPad[0];
if (tP.leftDown && !pTP[0])
if (!btnRumble.Text.Contains("Stop"))
btnRumble_Click(sender, e);
else if (!tP.leftDown && pTP[0])
if (btnRumble.Text.Contains("Stop"))
btnRumble_Click(sender, e);
if (tP.rightDown && !pTP[1])
if (!btnLightbar.Text.Contains("Reset"))
btnLightbar_Click(sender, e);
else if (!tP.rightDown && pTP[1])
if (btnLightbar.Text.Contains("Reset"))
btnLightbar_Click(sender, e);
pTP[0] = tP.leftDown;
pTP[1] = tP.rightDown;
}
foreach (DS4Controls dc in dcs)
if (Mapping.getBoolMapping(0, dc, cState, null, null))
if (cBRecordDelays.Checked)
{
int value = DS4ControltoInt(dc);
int count = 0;
foreach (int i in macros)
{
if (i == value)
count++;
}
if (macros.Count == 0)
{
AddMacroValue(value);
lVMacros.Items.Add(DS4ControltoX360(dc), 0);
if (cBRecordDelays.Checked)
{
sw.Reset();
sw.Start();
}
}
else if (count % 2 == 0)
{
if (cBRecordDelays.Checked)
{
AddMacroValue((int)sw.ElapsedMilliseconds + 300);
lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2);
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(DS4ControltoX360(dc), 0);
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
Mouse tP = Program.rootHub.touchPad[0];
if (tP.leftDown && !pTP[0])
if (!btnRumble.Text.Contains("Stop"))
btnRumble_Click(sender, e);
else if (!tP.leftDown && pTP[0])
if (btnRumble.Text.Contains("Stop"))
btnRumble_Click(sender, e);
if (tP.rightDown && !pTP[1])
if (!btnLightbar.Text.Contains("Reset"))
btnLightbar_Click(sender, e);
else if (!tP.rightDown && pTP[1])
if (btnLightbar.Text.Contains("Reset"))
btnLightbar_Click(sender, e);
pTP[0] = tP.leftDown;
pTP[1] = tP.rightDown;
}
else if (!Mapping.getBoolMapping(0, dc, cState, null, null))
//foreach (DS4Controls dc in dcs)
for (int controlIndex = 0, dcsLen = dcs.Count; controlIndex < dcsLen; controlIndex++)
{
if (macros.Count != 0)
DS4Controls dc = dcs[controlIndex];
if (Mapping.getBoolMapping(0, dc, cState, null, null))
{
int value = DS4ControltoInt(dc);
int count = 0;
foreach (int i in macros)
int macroLen = macros.Count;
//foreach (int i in macros)
for (int macroIndex = 0; macroIndex < macroLen; macroIndex++)
{
int i = macros[macroIndex];
if (i == value)
count++;
}
/*for (int i = macros.Count - 1; i >= 0; i--)
if (macros.Count == 261)
count++;*/
if (count % 2 == 1)
if (macroLen == 0)
{
AddMacroValue(value);
lVMacros.Items.Add(DS4ControltoX360(dc), 0);
if (cBRecordDelays.Checked)
{
sw.Reset();
sw.Start();
}
}
else if (count % 2 == 0)
{
if (cBRecordDelays.Checked)
{
@ -205,12 +191,49 @@ namespace DS4Windows
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(DS4ControltoX360(dc), 1);
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
lVMacros.Items.Add(DS4ControltoX360(dc), 0);
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
else if (!Mapping.getBoolMapping(0, dc, cState, null, null))
{
int macroLen = macros.Count;
if (macroLen != 0)
{
int value = DS4ControltoInt(dc);
int count = 0;
//foreach (int i in macros)
for (int macroIndex = 0; macroIndex < macroLen; macroIndex++)
{
int i = macros[macroIndex];
if (i == value)
count++;
}
/*for (int i = macros.Count - 1; i >= 0; i--)
if (macros.Count == 261)
count++;*/
if (count % 2 == 1)
{
if (cBRecordDelays.Checked)
{
AddMacroValue((int)sw.ElapsedMilliseconds + 300);
lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", sw.ElapsedMilliseconds.ToString()).Replace("*ms*", "ms"), 2);
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(DS4ControltoX360(dc), 1);
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
}
}
}
}
}
}));
}
}
@ -277,16 +300,20 @@ namespace DS4Windows
case DS4Controls.RYPos: return "RS Down";
case DS4Controls.RYNeg: return "RS Up";
}
return "None";
}
bool recordAfter = false;
int recordAfterInt = 0;
private void btnRecord_Click(object sender, EventArgs e)
{
if (btnRecord.Text != Properties.Resources.StopText)
{
if (cBRecordDelays.Checked)
sw.Start();
btnRumble.Visible = cBRecordDelays.Checked;
btnLightbar.Visible = cBRecordDelays.Checked;
pBLtouch.Visible = cBRecordDelays.Checked;
@ -296,6 +323,7 @@ namespace DS4Windows
ds4.Start();
if (!recordAfter)
macros.Clear();
lVMacros.Items.Clear();
btnRecord.Text = Properties.Resources.StopText;
EnableControls(false);
@ -314,21 +342,28 @@ namespace DS4Windows
recordAfter = false;
LoadMacro();
}
if (btn4th.Text.Contains(Properties.Resources.UpText))
btn4th_Click(sender, e);
if (btn5th.Text.Contains(Properties.Resources.UpText))
btn5th_Click(sender, e);
if (cBRecordDelays.Checked)
{
if (btnRumble.Text.Contains("Stop"))
btnRumble_Click(sender, e);
if (btnLightbar.Text.Contains("Reset"))
btnLightbar_Click(sender, e);
}
if (cBRecordDelays.Checked)
sw.Reset();
if (cBRecordDelays.Checked)
lbDelayTip.Visible = true;
btnRecord.Text = Properties.Resources.RecordText;
EnableControls(true);
}
@ -352,17 +387,22 @@ namespace DS4Windows
int value = WhichKey(e, 0);
int count = 0;
if (recordAfter)
{
foreach (int i in macrosAfter)
{
if (i == value)
count++;
}
else
foreach (int i in macros)
{
if (i == value)
count++;
}
else
{
foreach (int i in macros)
{
if (i == value)
count++;
}
}
if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0))
{
AddMacroValue(value);
@ -382,19 +422,25 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(((Keys)value).ToString(), 0);
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
else if (e.KeyValue == 27)
{
Close();
}
else if (e.KeyCode == Keys.Delete)
{
if (lVMacros.SelectedIndices.Count > 0 && lVMacros.SelectedIndices[0] > -1)
{
macros.RemoveAt(lVMacros.SelectedIndices[0]);
lVMacros.Items.Remove(lVMacros.SelectedItems[0]);
}
}
}
private int WhichKey(KeyEventArgs e, int keystate)
@ -406,55 +452,75 @@ namespace DS4Windows
if (recordAfter)
{
for (int i = macrosAfter.Count - 1; i >= 0; i--)
{
if (macrosAfter[i] == 160)
return 160;
else if (macrosAfter[i] == 161)
return 161;
}
}
else
{
for (int i = macros.Count - 1; i >= 0; i--)
{
if (macros[i] == 160)
return 160;
else if (macros[i] == 161)
return 161;
}
}
}
else if (e.KeyCode == Keys.ControlKey)
{
if (recordAfter)
{
for (int i = macrosAfter.Count - 1; i >= 0; i--)
{
if (macrosAfter[i] == 162)
return 162;
else if (macrosAfter[i] == 163)
return 163;
}
}
else
for (int i = macros.Count - 1; i >= 0; i--)
if (macros[i] == 162)
return 162;
else if (macros[i] == 163)
return 163;
{
for (int i = macros.Count - 1; i >= 0; i--)
{
if (macros[i] == 162)
return 162;
else if (macros[i] == 163)
return 163;
}
}
}
else if (e.KeyCode == Keys.Menu)
{
if (recordAfter)
{
for (int i = macrosAfter.Count - 1; i >= 0; i--)
{
if (macrosAfter[i] == 164)
return 164;
else if (macrosAfter[i] == 165)
return 165;
}
}
else
{
for (int i = macros.Count - 1; i >= 0; i--)
{
if (macros[i] == 164)
return 164;
else if (macros[i] == 165)
return 165;
}
}
}
return e.KeyValue;
}
else
{
if (e.KeyCode == Keys.ShiftKey)
{
if (Convert.ToBoolean(GetAsyncKeyState(Keys.LShiftKey)))
@ -476,15 +542,17 @@ namespace DS4Windows
return 164;
if (Convert.ToBoolean(GetAsyncKeyState(Keys.RMenu)))
return 165;
}
}
return e.KeyValue;
}
private void anyKeyUp(object sender, KeyEventArgs e)
private void AnyKeyUp(object sender, KeyEventArgs e)
{
if (btnRecord.Text == Properties.Resources.StopText && (macros.Count != 0 || (recordAfter && macrosAfter.Count != 0)))
{
lVMacros.BeginUpdate();
int value = WhichKey(e, 1);
if (cBRecordDelays.Checked)
{
@ -493,9 +561,19 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
if (e.KeyCode == Keys.PrintScreen)
{
int tempvalue = WhichKey(e, 0);
AddMacroValue(tempvalue);
lVMacros.Items.Add(((Keys)value).ToString(), 0);
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
AddMacroValue(value);
lVMacros.Items.Add(((Keys)value).ToString(), 1);
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
lVMacros.EndUpdate();
}
}
private void anyMouseDown(object sender, MouseEventArgs e)
@ -505,13 +583,14 @@ namespace DS4Windows
int value;
switch (e.Button)
{
case System.Windows.Forms.MouseButtons.Left: value = 256; break;
case System.Windows.Forms.MouseButtons.Right: value = 257; break;
case System.Windows.Forms.MouseButtons.Middle: value = 258; break;
case System.Windows.Forms.MouseButtons.XButton1: value = 259; break;
case System.Windows.Forms.MouseButtons.XButton2: value = 260; break;
case MouseButtons.Left: value = 256; break;
case MouseButtons.Right: value = 257; break;
case MouseButtons.Middle: value = 258; break;
case MouseButtons.XButton1: value = 259; break;
case MouseButtons.XButton2: value = 260; break;
default: value = 0; break;
}
if (macros.Count == 0 || (recordAfter && macrosAfter.Count == 0))
{
AddMacroValue(value);
@ -531,13 +610,17 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(e.Button.ToString() + " Mouse Button", 0);
}
if (e.Button == System.Windows.Forms.MouseButtons.XButton1)
if (e.Button == MouseButtons.XButton1)
lVMacros.Items[lVMacros.Items.Count - 1].Text = "4th Mouse Button";
if (e.Button == System.Windows.Forms.MouseButtons.XButton2)
if (e.Button == MouseButtons.XButton2)
lVMacros.Items[lVMacros.Items.Count - 1].Text = "5th Mouse Button";
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
}
@ -549,11 +632,11 @@ namespace DS4Windows
int value;
switch (e.Button)
{
case System.Windows.Forms.MouseButtons.Left: value = 256; break;
case System.Windows.Forms.MouseButtons.Right: value = 257; break;
case System.Windows.Forms.MouseButtons.Middle: value = 258; break;
case System.Windows.Forms.MouseButtons.XButton1: value = 259; break;
case System.Windows.Forms.MouseButtons.XButton2: value = 260; break;
case MouseButtons.Left: value = 256; break;
case MouseButtons.Right: value = 257; break;
case MouseButtons.Middle: value = 258; break;
case MouseButtons.XButton1: value = 259; break;
case MouseButtons.XButton2: value = 260; break;
default: value = 0; break;
}
@ -564,12 +647,16 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add(e.Button.ToString() + " Mouse Button", 1);
if (e.Button == System.Windows.Forms.MouseButtons.XButton1)
if (e.Button == MouseButtons.XButton1)
lVMacros.Items[lVMacros.Items.Count - 1].Text = "4th Mouse Button";
if (e.Button == System.Windows.Forms.MouseButtons.XButton2)
if (e.Button == MouseButtons.XButton2)
lVMacros.Items[lVMacros.Items.Count - 1].Text = "5th Mouse Button";
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
}
@ -598,9 +685,11 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("4th Mouse Button", 0);
}
btn4th.Text = Properties.Resources.FourthMouseUp;
}
else
@ -612,10 +701,12 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("4th Mouse Button", 1);
btn4th.Text = Properties.Resources.FourthMouseDown;
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
@ -643,9 +734,11 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("5th Mouse Button", 0);
}
btn5th.Text = Properties.Resources.FifthMouseUp;
}
else
@ -657,10 +750,12 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("5th Mouse Button", 1);
btn5th.Text = Properties.Resources.FifthMouseDown;
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
@ -689,9 +784,11 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("Rumble 255,255 (100%)", 0);
}
btnRumble.Text = "Stop Rumble";
}
else
@ -704,10 +801,12 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("Stop Rumble", 1);
btnRumble.Text = "Add Rumble";
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
@ -735,9 +834,11 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("Lightbar Color: 255,255,255", 0);
}
btnLightbar.Text = "Reset Lightbar Color";
}
else
@ -750,10 +851,12 @@ namespace DS4Windows
sw.Reset();
sw.Start();
}
AddMacroValue(value);
lVMacros.Items.Add("Reset Lightbar", 1);
btnLightbar.Text = "Change Lightbar Color";
}
lVMacros.Items[lVMacros.Items.Count - 1].EnsureVisible();
}
@ -768,6 +871,7 @@ namespace DS4Windows
case 1: sA.btnHoldT.Text = macros.Count > 0 ? Properties.Resources.MacroRecorded : Properties.Resources.SelectMacro; break;
case 2: sA.btnDTapT.Text = macros.Count > 0 ? Properties.Resources.MacroRecorded : Properties.Resources.SelectMacro; break;
}
saved = true;
Close();
}
@ -778,14 +882,14 @@ namespace DS4Windows
{
macronames.Add(lvi.Text);
}
string macro = string.Join(", ", macronames.ToArray());
if (kbm != null)
{
kbm.macrostag = macros;
kbm.macros = macronames;
kbm.lBMacroOn.Visible = true;
if (cBStyle.SelectedIndex == 1)
kbm.macrorepeat = true;
kbm.macrorepeat = cBStyle.SelectedIndex == 1;
saved = true;
if (sender != kbm)
kbm.Close();
@ -796,8 +900,7 @@ namespace DS4Windows
sA.macros = macronames;
sA.lbMacroRecorded.Text = string.Join(", ", macronames);
//kbm.lBMacroOn.Visible = true;
if (cBStyle.SelectedIndex == 1)
sA.macrorepeat = true;
sA.macrorepeat = cBStyle.SelectedIndex == 1;
saved = true;
//if (sender != sA)
// sA.Close();
@ -806,10 +909,12 @@ namespace DS4Windows
else
Close();
}
else MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else
{
MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void btnSaveP_Click(object sender, EventArgs e)
{
if (macros.Count > 0)
@ -822,13 +927,16 @@ namespace DS4Windows
savePresets.InitialDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\Macros\";
else
savePresets.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + @"\Macros\";
if (!Directory.Exists(savePresets.InitialDirectory))
{
Directory.CreateDirectory(savePresets.InitialDirectory);
//savePresets.InitialDirectory = path;
}
Console.WriteLine(savePresets.InitialDirectory);
if (savePresets.ShowDialog() == System.Windows.Forms.DialogResult.OK)
if (savePresets.ShowDialog() == DialogResult.OK)
{
if ((stream = savePresets.OpenFile()) != null)
{
string macro = string.Join("/", macros.ToArray());
@ -836,8 +944,12 @@ namespace DS4Windows
sw.Write(macro);
sw.Close();
}
}
}
else
{
MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else MessageBox.Show(Properties.Resources.NoMacroRecorded, "DS4Windows", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
private void btnLoadP_Click(object sender, EventArgs e)
@ -863,7 +975,8 @@ namespace DS4Windows
openPresets.InitialDirectory = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName + @"\Macros\";
else
openPresets.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\DS4Tool" + @"\Macros\";
if (openPresets.ShowDialog() == System.Windows.Forms.DialogResult.OK)
if (openPresets.ShowDialog() == DialogResult.OK)
{
string file = openPresets.FileName;
macros.Clear();
@ -876,6 +989,7 @@ namespace DS4Windows
if (int.TryParse(s, out temp))
macros.Add(temp);
}
LoadMacro();
sr.Close();
}
@ -894,7 +1008,6 @@ namespace DS4Windows
void LoadMacro()
{
if (macros.Count > 0)
{
bool[] keydown = new bool[286];
@ -928,7 +1041,9 @@ namespace DS4Windows
lVMacros.Items.Add("Stop Rumble", 1);
}
else if (i >= 300) //ints over 300 used to delay
{
lVMacros.Items.Add(Properties.Resources.WaitMS.Replace("*number*", (i - 300).ToString()).Replace("*ms*", "ms"), 2);
}
else if (!keydown[i])
{
//anything above 255 is not a keyvalue
@ -1001,6 +1116,7 @@ namespace DS4Windows
keydown[i] = false;
}
}
for (int i = 0; i < keydown.Length; i++)
{
if (keydown[i])
@ -1042,13 +1158,15 @@ namespace DS4Windows
}
}
private void RecordBox_FormClosing(object sender, FormClosingEventArgs e)
{
if (!saved && macros.Count > 0)
if (MessageBox.Show(Properties.Resources.SaveRecordedMacro, "DS4Windows", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
if (MessageBox.Show(Properties.Resources.SaveRecordedMacro, "DS4Windows", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
btnSave_Click(null, null);
}
Program.rootHub.recordingMacro = false;
}
protected override bool IsInputKey(Keys keyData)
@ -1074,8 +1192,10 @@ namespace DS4Windows
case Keys.Shift | Keys.MediaNextTrack:
return true;
}
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
@ -1099,11 +1219,14 @@ namespace DS4Windows
break;
}
}
private int selection;
private bool changingDelay = false;
private void lVMacros_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (lVMacros.SelectedIndices[0] >= 0)
{
if (lVMacros.SelectedItems[0].ImageIndex == 2)
{
TextBox tb = new TextBox();
@ -1166,6 +1289,7 @@ namespace DS4Windows
tb2.TextChanged += tb_TextChanged;
tb1.Focus();
}
}
}
void tb_TextChanged(object sender, EventArgs e)
@ -1174,8 +1298,10 @@ namespace DS4Windows
//if (changingDelay)
{
for (int i = tb.Text.Length - 1; i >= 0; i--)
{
if (!char.IsDigit(tb.Text[i]))
tb.Text = tb.Text.Remove(i, 1);
}
}
}
@ -1189,6 +1315,7 @@ namespace DS4Windows
if (e.KeyCode == Keys.Enter)
SaveMacroChange((TextBox)sender);
}
private void SaveMacroChange(TextBox tb)
{
int i, j;
@ -1220,6 +1347,7 @@ namespace DS4Windows
}
}
}
lVMacros.MouseHover += lVMacros_MouseHover;
}
@ -1243,6 +1371,7 @@ namespace DS4Windows
private void lVMacros_SelectedIndexChanged(object sender, EventArgs e)
{
if (btnRecord.Text != Properties.Resources.StopText)
{
if (lVMacros.SelectedIndices.Count > 0 && lVMacros.SelectedIndices[0] > -1)
{
recordAfter = true;
@ -1254,7 +1383,7 @@ namespace DS4Windows
recordAfter = false;
btnRecord.Text = "Record";
}
}
}
}
}

View File

@ -117,10 +117,188 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnRecord.Location" type="System.Drawing.Point, System.Drawing">
<value>536, 29</value>
</data>
<data name="btnRecord.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 46</value>
</data>
<data name="cBRecordDelays.Location" type="System.Drawing.Point, System.Drawing">
<value>591, 121</value>
</data>
<data name="cBRecordDelays.Size" type="System.Drawing.Size, System.Drawing">
<value>96, 17</value>
</data>
<data name="iLKeys.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
CgAAAk1TRnQBSQFMAgEBAwEAAcwBAQHMAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAAf8B7wH3AfQGAAH/
Au8B/xgAAf8BBw4AAuwB/wcAAf8BBwHxAQcBvAGRAosBkQG8AQcB8QHvAf8XAAH/AuwBBw0AAuwB/wgA
AfQB8AEHBosCBwH0FwAB/wTsAQcMAALsAf8IAAHxAZEBiwe0AZEB8RYAAf8G7AEHCwAC7AH/BwAB9AG0
Aa0BtAG1AfEC/wHxAbUBtAGtAbQB9BUAAuwBBwLsAf8C7AH/CgAC7AH/BwABvAGzAbQBtQb/ArQBswG8
FQAB7AEHAQAC7AL/AewB/woAAuwB/wcAAbUBtAG1ARkC9AEHAfMB/wEZAQkCtAG1FQABBwIAAuwB/wEA
Av8HAAH/AgAC7AH/AgAB/wQAArQBtQP0AuwBvAH/ARkDtBgAAuwB/woAAewB/wEAAuwB/wEAAQcB/wQA
ArQBtQH0Av8B7AHvAewBBwEZA7QYAALsAf8KAALsAf8C7AH/AQcB7AH/BAABuwG0AbsBGQH/AfQBkgH0
Af8B7wEZAbUBtAG7GAAC7AH/CgABBwTsAQcC7AH/BAAB8AG0AbsBCQH/AfQB8gP/ArsBtAHwGAAC7AH/
CwABBwXsAf8EAAH0AVgBUgG7AgkB8wL0AfMBCQG7ARwBUgF5Af8XAALsAf8MAAEHA+wB/wUAARoBmgF6
AVIDCQK1AgkBuwFYARoBegH/FwAC7AH/DQABBwHsAf8GAAEaAXoBwwF6AVgB3AQJAbsBUgKaAXoB/xcA
A/8OAAH/BwAB/wEaAXoBwwF6AZkBCQLcAQkBmQF6AZoBegH2MgAB/wEaAVkBegH/BAAB/wFZAXoB9hIA
AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/AYcB4QIAAf4BfwH+AT8BgAEB
AgAB/AE/Af4BPwHAAQMCAAH4AR8B/gE/AcABAwIAAfABDwH+AT8BgAEBAgAB8AEHAf4BPwGAAQECAAHy
AQcB/gE/AYABAQIAAfYBJwH2ATcBgAEBAgAB/gE/AfIBJwGAAQECAAH+AT8B8AEHAYABAQIAAf4BPwHw
AQcBgAEBAgAB/gE/AfgBDwQAAf4BPwH8AR8EAAH+AT8B/gE/BAAB/gE/Af8BfwEAAQECAAT/AYMBwwIA
Cw==
</value>
</data>
<data name="lVMacros.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 29</value>
</data>
<data name="lVMacros.Size" type="System.Drawing.Size, System.Drawing">
<value>527, 342</value>
</data>
<data name="cBStyle.Location" type="System.Drawing.Point, System.Drawing">
<value>578, 179</value>
</data>
<data name="cBStyle.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="btnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>536, 2</value>
</data>
<data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 23</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>保存</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>646, 2</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 23</value>
</data>
<data name="btnSaveP.Location" type="System.Drawing.Point, System.Drawing">
<value>646, 81</value>
</data>
<data name="btnSaveP.Size" type="System.Drawing.Size, System.Drawing">
<value>103, 23</value>
</data>
<data name="btnSaveP.Text" xml:space="preserve">
<value>プリセットを保存</value>
</data>
<data name="lbRecordTip.Location" type="System.Drawing.Point, System.Drawing">
<value>309, 7</value>
</data>
<data name="lbRecordTip.Size" type="System.Drawing.Size, System.Drawing">
<value>221, 13</value>
</data>
<data name="pBRtouch.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 106</value>
</data>
<data name="pBRtouch.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 23</value>
</data>
<data name="pBLtouch.Location" type="System.Drawing.Point, System.Drawing">
<value>152, 77</value>
</data>
<data name="pBLtouch.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 23</value>
</data>
<data name="btnLightbar.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 106</value>
</data>
<data name="btnLightbar.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 23</value>
</data>
<data name="btnRumble.Location" type="System.Drawing.Point, System.Drawing">
<value>17, 77</value>
</data>
<data name="btnRumble.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 23</value>
</data>
<data name="btn5th.Location" type="System.Drawing.Point, System.Drawing">
<value>39, 39</value>
</data>
<data name="btn5th.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 23</value>
</data>
<data name="btn4th.Location" type="System.Drawing.Point, System.Drawing">
<value>39, 10</value>
</data>
<data name="btn4th.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 23</value>
</data>
<data name="pnlMouseButtons.Location" type="System.Drawing.Point, System.Drawing">
<value>539, 225</value>
</data>
<data name="pnlMouseButtons.Size" type="System.Drawing.Size, System.Drawing">
<value>210, 138</value>
</data>
<data name="btnLoadP.Location" type="System.Drawing.Point, System.Drawing">
<value>536, 81</value>
</data>
<data name="btnLoadP.Size" type="System.Drawing.Size, System.Drawing">
<value>104, 23</value>
</data>
<data name="lbMacroOrder.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 8</value>
</data>
<data name="lbMacroOrder.Size" type="System.Drawing.Size, System.Drawing">
<value>66, 13</value>
</data>
<data name="lbDelayTip.Location" type="System.Drawing.Point, System.Drawing">
<value>536, 142</value>
</data>
<data name="lbDelayTip.Size" type="System.Drawing.Size, System.Drawing">
<value>212, 33</value>
</data>
<data name="altTabToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="fromFileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>132, 22</value>
</data>
<data name="cMSLoadPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>133, 48</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>750, 375</value>
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>260, 205</value>
</data>
</root>

View File

@ -140,8 +140,8 @@
<data name="btn4th.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="lbRecordTip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="cHMacro.Text" xml:space="preserve">
<value>Macro Order</value>
</data>
<data name="&gt;&gt;btnRumble.ZOrder" xml:space="preserve">
<value>3</value>
@ -171,8 +171,8 @@
<data name="&gt;&gt;btnSave.Name" xml:space="preserve">
<value>btnSave</value>
</data>
<data name="cMSLoadPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 56</value>
<data name="&gt;&gt;lbMacroOrder.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnSaveP.Text" xml:space="preserve">
<value>Save Preset</value>
@ -195,11 +195,8 @@
<data name="&gt;&gt;cBStyle.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cBStyle.TabIndex" type="System.Int32, mscorlib">
<value>327</value>
</data>
<data name="lbRecordTip.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 17</value>
<data name="btnLightbar.Location" type="System.Drawing.Point, System.Drawing">
<value>23, 130</value>
</data>
<data name="pBRtouch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
@ -207,12 +204,24 @@
<data name="&gt;&gt;btnLightbar.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="lbDelayTip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="&gt;&gt;btnLightbar.Name" xml:space="preserve">
<value>btnLightbar</value>
</data>
<data name="&gt;&gt;iLKeys.Name" xml:space="preserve">
<value>iLKeys</value>
</data>
<data name="&gt;&gt;btnRecord.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="lbDelayTip.Size" type="System.Drawing.Size, System.Drawing">
<value>283, 41</value>
</data>
<data name="btnSaveP.Location" type="System.Drawing.Point, System.Drawing">
<value>861, 100</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Record a Macro</value>
</data>
@ -243,11 +252,14 @@
<data name="btnLoadP.Location" type="System.Drawing.Point, System.Drawing">
<value>715, 100</value>
</data>
<data name="&gt;&gt;pBLtouch.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;fromFileToolStripMenuItem.Name" xml:space="preserve">
<value>fromFileToolStripMenuItem</value>
</data>
<data name="btnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>715, 2</value>
<data name="&gt;&gt;btnLightbar.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 16</value>
@ -288,6 +300,12 @@
<data name="btnRumble.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;cHMacro.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lbMacroOrder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;btnLoadP.ZOrder" xml:space="preserve">
<value>5</value>
</data>
@ -324,12 +342,6 @@
<data name="pBRtouch.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>Zoom</value>
</data>
<data name="btnRumble.Text" xml:space="preserve">
<value>Add Rumble</value>
</data>
<data name="btnRecord.Location" type="System.Drawing.Point, System.Drawing">
<value>715, 36</value>
</data>
<data name="btnLightbar.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@ -345,9 +357,6 @@
<data name="pBLtouch.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="btn5th.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="cBStyle.Items1" xml:space="preserve">
<value>Repeat while held</value>
</data>
@ -366,9 +375,6 @@
<data name="pnlMouseButtons.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;lbMacroOrder.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnRecord.Size" type="System.Drawing.Size, System.Drawing">
<value>284, 57</value>
</data>
@ -378,8 +384,8 @@
<data name="&gt;&gt;lbDelayTip.Name" xml:space="preserve">
<value>lbDelayTip</value>
</data>
<data name="lbMacroOrder.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
<data name="lbRecordTip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="btn4th.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -387,14 +393,14 @@
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>347, 252</value>
</data>
<data name="cBStyle.Location" type="System.Drawing.Point, System.Drawing">
<value>771, 220</value>
<data name="btnSave.TabIndex" type="System.Int32, mscorlib">
<value>328</value>
</data>
<data name="&gt;&gt;pBLtouch.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="lbMacroOrder.Text" xml:space="preserve">
<value>Macro Order</value>
<data name="cBStyle.Location" type="System.Drawing.Point, System.Drawing">
<value>771, 220</value>
</data>
<data name="lVMacros.Size" type="System.Drawing.Size, System.Drawing">
<value>701, 420</value>
@ -423,6 +429,9 @@
<data name="lbRecordTip.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;cBStyle.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cHMacro.Width" type="System.Int32, mscorlib">
<value>200</value>
</data>
@ -441,9 +450,6 @@
<data name="&gt;&gt;btn4th.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="lbRecordTip.Text" xml:space="preserve">
<value>Use Keyboard/Mouse + Controller 1 to record</value>
</data>
<data name="btnRecord.TabIndex" type="System.Int32, mscorlib">
<value>322</value>
</data>
@ -459,9 +465,6 @@
<data name="&gt;&gt;cMSLoadPresets.Name" xml:space="preserve">
<value>cMSLoadPresets</value>
</data>
<data name="btnSave.TabIndex" type="System.Int32, mscorlib">
<value>328</value>
</data>
<data name="altTabToolStripMenuItem.Text" xml:space="preserve">
<value>Cycle Programs</value>
</data>
@ -486,15 +489,15 @@
<data name="btnLoadP.TabIndex" type="System.Int32, mscorlib">
<value>332</value>
</data>
<data name="cMSLoadPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>156, 56</value>
</data>
<data name="lVMacros.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="&gt;&gt;cBRecordDelays.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="cBRecordDelays.TabIndex" type="System.Int32, mscorlib">
<value>324</value>
</data>
<data name="lbMacroOrder.TabIndex" type="System.Int32, mscorlib">
<value>333</value>
</data>
@ -504,9 +507,6 @@
<data name="&gt;&gt;iLKeys.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnLightbar.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btn4th.ZOrder" xml:space="preserve">
<value>5</value>
</data>
@ -522,6 +522,9 @@
<data name="&gt;&gt;cBRecordDelays.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="lbRecordTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -531,18 +534,12 @@
<data name="lbDelayTip.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>139, 28</value>
</data>
<data name="lVMacros.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 36</value>
</data>
<data name="&gt;&gt;pBLtouch.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnLightbar.Location" type="System.Drawing.Point, System.Drawing">
<value>23, 130</value>
</data>
<data name="cBStyle.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
@ -588,9 +585,6 @@
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 28</value>
</data>
<data name="lbRecordTip.Location" type="System.Drawing.Point, System.Drawing">
<value>412, 9</value>
</data>
<data name="btnLightbar.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
</data>
@ -612,7 +606,10 @@
<data name="&gt;&gt;btn5th.Parent" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<data name="&gt;&gt;btnLoadP.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBStyle.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;altTabToolStripMenuItem.Type" xml:space="preserve">
@ -621,8 +618,8 @@
<data name="btnRecord.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="&gt;&gt;btnLoadP.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="btnRecord.Location" type="System.Drawing.Point, System.Drawing">
<value>715, 36</value>
</data>
<data name="&gt;&gt;pBRtouch.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@ -633,14 +630,14 @@
<data name="&gt;&gt;btn5th.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="&gt;&gt;iLKeys.Name" xml:space="preserve">
<value>iLKeys</value>
<data name="lbRecordTip.Location" type="System.Drawing.Point, System.Drawing">
<value>412, 9</value>
</data>
<data name="btn5th.Location" type="System.Drawing.Point, System.Drawing">
<value>52, 48</value>
</data>
<data name="&gt;&gt;cHMacro.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="btnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>715, 2</value>
</data>
<data name="btnRecord.Text" xml:space="preserve">
<value>Record</value>
@ -648,8 +645,8 @@
<data name="&gt;&gt;btnRecord.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="pBRtouch.Location" type="System.Drawing.Point, System.Drawing">
<value>203, 130</value>
<data name="&gt;&gt;btnLightbar.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lbRecordTip.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleCenter</value>
@ -660,17 +657,17 @@
<data name="btn5th.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;btnLightbar.ZOrder" xml:space="preserve">
<value>2</value>
<data name="pBRtouch.Location" type="System.Drawing.Point, System.Drawing">
<value>203, 130</value>
</data>
<data name="&gt;&gt;lbDelayTip.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lbDelayTip.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="btnRumble.Text" xml:space="preserve">
<value>Add Rumble</value>
</data>
<data name="&gt;&gt;pBLtouch.ZOrder" xml:space="preserve">
<value>1</value>
<data name="cBRecordDelays.TabIndex" type="System.Int32, mscorlib">
<value>324</value>
</data>
<data name="&gt;&gt;lVMacros.Parent" xml:space="preserve">
<value>$this</value>
@ -690,6 +687,9 @@
<data name="&gt;&gt;altTabToolStripMenuItem.Name" xml:space="preserve">
<value>altTabToolStripMenuItem</value>
</data>
<data name="lbMacroOrder.Text" xml:space="preserve">
<value>Macro Order</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>1000, 462</value>
</data>
@ -702,26 +702,23 @@
<data name="&gt;&gt;pnlMouseButtons.Name" xml:space="preserve">
<value>pnlMouseButtons</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="btnRumble.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="cHMacro.Text" xml:space="preserve">
<value>Macro Order</value>
</data>
<data name="&gt;&gt;lbDelayTip.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBRecordDelays.Parent" xml:space="preserve">
<value>$this</value>
<data name="cBStyle.TabIndex" type="System.Int32, mscorlib">
<value>327</value>
</data>
<data name="cBRecordDelays.Text" xml:space="preserve">
<value>Record Delays</value>
</data>
<data name="&gt;&gt;cBStyle.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="btn5th.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnLightbar.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
@ -735,15 +732,15 @@
<data name="&gt;&gt;lVMacros.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="btnSaveP.Location" type="System.Drawing.Point, System.Drawing">
<value>861, 100</value>
<data name="lbRecordTip.Text" xml:space="preserve">
<value>Use Keyboard/Mouse + Controller 1 to record</value>
</data>
<data name="iLKeys.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
CgAAAk1TRnQBSQFMAgEBAwEAAZwBAQHEAQEBEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo
CgAAAk1TRnQBSQFMAgEBAwEAAZwBAQHIAQEBEAEAARABAAT/AQkBEAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -789,6 +786,9 @@
Cw==
</value>
</data>
<data name="&gt;&gt;cBRecordDelays.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="pBRtouch.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
@ -807,8 +807,8 @@
<data name="lbDelayTip.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lbDelayTip.Size" type="System.Drawing.Size, System.Drawing">
<value>283, 41</value>
<data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>139, 28</value>
</data>
<data name="altTabToolStripMenuItem.ToolTipText" xml:space="preserve">
<value>Edit the Wait to change the cycle rate</value>
@ -831,8 +831,8 @@
<data name="&gt;&gt;btnSave.ZOrder" xml:space="preserve">
<value>11</value>
</data>
<data name="&gt;&gt;cBStyle.Parent" xml:space="preserve">
<value>$this</value>
<data name="lbRecordTip.Size" type="System.Drawing.Size, System.Drawing">
<value>294, 17</value>
</data>
<metadata name="openPresets.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>238, 17</value>
@ -849,7 +849,4 @@
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>ja</value>
</metadata>
</root>

View File

@ -40,14 +40,14 @@
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.ForeColor = System.Drawing.SystemColors.GrayText;
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.ForeColor = System.Drawing.SystemColors.GrayText;
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// bnAppdataFolder

View File

@ -127,7 +127,7 @@
<value>No elimines los otros ajustes aún</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>Para aquellos que prefieren un programa portable Nota: esta opción no funciona si esta en una carpeta admin son o sin UAC</value>
<value>Para aquellos que prefieren un programa portable. Nota: esta opción no funciona si esta en una carpeta admin con o sin UAC</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>Para aquellos que prefieren una instalación de ajustes regular se guarda en %appdata%/ds4tool</value>

View File

@ -118,250 +118,226 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbMultiSaves.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 10</value>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>206, 89</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Name" xml:space="preserve">
<value>bnPrgmFolder</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Name" xml:space="preserve">
<value>cBDeleteOther</value>
</data>
<data name="lbPickWhere.Size" type="System.Drawing.Size, System.Drawing">
<value>515, 33</value>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 69</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cBDeleteOther.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;cBDeleteOther.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lbMultiSaves.Text" xml:space="preserve">
<value>Multiple save locations detected</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>5, 5, 5, 5</value>
</data>
<data name="lbMultiSaves.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="bnAppdataFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 28</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label4.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>260, 85</value>
<data name="label4.Text" xml:space="preserve">
<value>For those who prefer a regular install Settings saved at %appdata%/DS4Windows</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>8, 16</value>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="cBDeleteOther.Text" xml:space="preserve">
<value>Don't Delete the
other settings yet</value>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
</data>
<data name="&gt;&gt;lbMultiSaves.Parent" xml:space="preserve">
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="label4.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>7, 110</value>
<value>5, 89</value>
</data>
<data name="bnPrgmFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>43, 78</value>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 69</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.ZOrder" xml:space="preserve">
<value>6</value>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;lbMultiSaves.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="cBDeleteOther.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="lbMultiSaves.Size" type="System.Drawing.Size, System.Drawing">
<value>209, 17</value>
</data>
<data name="cBDeleteOther.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lbPickWhere.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<data name="label3.Text" xml:space="preserve">
<value>For those who prefer a portable program Note: this option does not work if in an admin folder w/o UAC</value>
</data>
<data name="label3.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="bnAppdataFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 63</value>
</data>
<data name="bnAppdataFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 23</value>
</data>
<data name="bnAppdataFolder.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="bnAppdataFolder.Text" xml:space="preserve">
<value>Appdata</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.Name" xml:space="preserve">
<value>bnAppdataFolder</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="bnPrgmFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>32, 63</value>
</data>
<data name="bnPrgmFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 23</value>
</data>
<data name="bnPrgmFolder.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="bnPrgmFolder.Text" xml:space="preserve">
<value>Program Folder</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Name" xml:space="preserve">
<value>bnPrgmFolder</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lbPickWhere.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="lbPickWhere.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 33</value>
</data>
<data name="lbPickWhere.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 27</value>
</data>
<data name="lbPickWhere.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="lbPickWhere.Text" xml:space="preserve">
<value>Pick where you want settings and profiles to be saved</value>
</data>
<data name="lbPickWhere.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;lbPickWhere.Name" xml:space="preserve">
<value>lbPickWhere</value>
</data>
<data name="&gt;&gt;lbPickWhere.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbPickWhere.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lbPickWhere.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;label4.Name" xml:space="preserve">
<value>label4</value>
<data name="lbMultiSaves.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>For those who prefer a regular install Settings saved at %appdata%/ds4tool</value>
<data name="lbMultiSaves.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 8</value>
</data>
<data name="&gt;&gt;bnPrgmFolder.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="lbPickWhere.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="lbMultiSaves.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="lbPickWhere.Text" xml:space="preserve">
<value>Pick where you want settings and profiles to be saved</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>For those who prefer a portable program Note: this option does not work if in an admin folder w/o UAC</value>
</data>
<data name="label3.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="&gt;&gt;label4.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="label4.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;label4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnPrgmFolder.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="cBDeleteOther.Location" type="System.Drawing.Point, System.Drawing">
<value>375, 0</value>
</data>
<data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lbPickWhere.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="bnPrgmFolder.Text" xml:space="preserve">
<value>Program Folder</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.Name" xml:space="preserve">
<value>bnAppdataFolder</value>
</data>
<data name="cBDeleteOther.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="lbPickWhere.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="&gt;&gt;label3.Name" xml:space="preserve">
<value>label3</value>
</data>
<data name="bnAppdataFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>296, 78</value>
<data name="lbMultiSaves.Size" type="System.Drawing.Size, System.Drawing">
<value>159, 13</value>
</data>
<data name="lbMultiSaves.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SaveWhere</value>
<data name="lbMultiSaves.Text" xml:space="preserve">
<value>Multiple save locations detected</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>DS4Windows</value>
<comment>@Invariant</comment></data>
<data name="bnAppdataFolder.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="&gt;&gt;lbPickWhere.Name" xml:space="preserve">
<value>lbPickWhere</value>
</data>
<data name="label3.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>275, 110</value>
</data>
<data name="&gt;&gt;lbPickWhere.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>236, 85</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnAppdataFolder.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="lbMultiSaves.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;lbPickWhere.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="bnPrgmFolder.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;lbMultiSaves.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnAppdataFolder.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lbMultiSaves.Name" xml:space="preserve">
<value>lbMultiSaves</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>519, 167</value>
<data name="lbMultiSaves.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="lbMultiSaves.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;lbMultiSaves.Name" xml:space="preserve">
<value>lbMultiSaves</value>
</data>
<data name="lbPickWhere.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 41</value>
</data>
<data name="bnPrgmFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>187, 28</value>
</data>
<data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="cBDeleteOther.Size" type="System.Drawing.Size, System.Drawing">
<value>139, 38</value>
</data>
<data name="&gt;&gt;label3.Type" xml:space="preserve">
<data name="&gt;&gt;lbMultiSaves.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="bnAppdataFolder.Text" xml:space="preserve">
<value>Appdata</value>
<data name="&gt;&gt;lbMultiSaves.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lbMultiSaves.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cBDeleteOther.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cBDeleteOther.Location" type="System.Drawing.Point, System.Drawing">
<value>281, 0</value>
</data>
<data name="cBDeleteOther.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 30</value>
</data>
<data name="cBDeleteOther.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="cBDeleteOther.Text" xml:space="preserve">
<value>Don't Delete the
other settings yet</value>
</data>
<data name="cBDeleteOther.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Name" xml:space="preserve">
<value>cBDeleteOther</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cBDeleteOther.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;cBDeleteOther.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>zh-Hans</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>389, 136</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>DS4Windows</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>SaveWhere</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
</root>

View File

@ -117,35 +117,78 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="label4.Location" type="System.Drawing.Point, System.Drawing">
<value>206, 89</value>
</data>
<data name="label4.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 69</value>
</data>
<data name="label4.Text" xml:space="preserve">
<value>如果使用安装包安装,配置文件将保存至 %appdata%/ds4tool</value>
</data>
<data name="label3.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 89</value>
</data>
<data name="label3.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 69</value>
</data>
<data name="label3.Text" xml:space="preserve">
<value>请注意如果在UAC保护的文件夹内运行本程序这个选项不会生效。</value>
</data>
<data name="bnAppdataFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>222, 63</value>
</data>
<data name="bnAppdataFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 23</value>
</data>
<data name="bnAppdataFolder.Text" xml:space="preserve">
<value>系统文件夹</value>
</data>
<data name="bnPrgmFolder.Location" type="System.Drawing.Point, System.Drawing">
<value>32, 63</value>
</data>
<data name="bnPrgmFolder.Size" type="System.Drawing.Size, System.Drawing">
<value>140, 23</value>
</data>
<data name="bnPrgmFolder.Text" xml:space="preserve">
<value>程序所在文件夹</value>
</data>
<data name="lbPickWhere.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 33</value>
</data>
<data name="lbPickWhere.Size" type="System.Drawing.Size, System.Drawing">
<value>386, 27</value>
</data>
<data name="lbPickWhere.Text" xml:space="preserve">
<value>选择将要保存配置文件的位置。</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbMultiSaves.Location" type="System.Drawing.Point, System.Drawing">
<value>9, 8</value>
</data>
<data name="lbMultiSaves.Size" type="System.Drawing.Size, System.Drawing">
<value>145, 17</value>
<value>147, 13</value>
</data>
<data name="lbMultiSaves.Text" xml:space="preserve">
<value>检测到多个配置文件目录。</value>
</data>
<data name="cBDeleteOther.Location" type="System.Drawing.Point, System.Drawing">
<value>349, 6</value>
<value>262, 5</value>
</data>
<data name="cBDeleteOther.Size" type="System.Drawing.Size, System.Drawing">
<value>167, 21</value>
<value>166, 17</value>
</data>
<data name="cBDeleteOther.Text" xml:space="preserve">
<value>目前请不要删除其它设置。</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>389, 136</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
</root>

View File

@ -139,7 +139,7 @@
<value>Grabar una macro</value>
</data>
<data name="cBActions.Items2" xml:space="preserve">
<value>Lanzar un programa</value>
<value>Abrir un programa</value>
</data>
<data name="cBActions.Items3" xml:space="preserve">
<value>Cargar un perfil</value>
@ -151,37 +151,37 @@
<value>Comprobar batería</value>
</data>
<data name="cbLightbarBatt.Text" xml:space="preserve">
<value>a través del barra de luz</value>
<value>Por medio de la barra de luz</value>
</data>
<data name="cBMacroScanCode.Text" xml:space="preserve">
<value>Escanear del código</value>
</data>
<data name="cBNotificationBatt.Text" xml:space="preserve">
<value>via notificación</value>
<value>Por medio de notificación</value>
</data>
<data name="cBPressRelease.Items" xml:space="preserve">
<value>Oprimiendo trigger unload</value>
<value>Presionar gatillo de descarga</value>
</data>
<data name="cBPressRelease.Items1" xml:space="preserve">
<value>Soltando el trigger unload</value>
<value>Soltar gatillo de descarga</value>
</data>
<data name="cHTrigger.Text" xml:space="preserve">
<value>Gatillo</value>
</data>
<data name="cHUnloadTrigger.Text" xml:space="preserve">
<value>Liberar Gatillo</value>
<value>Soltar Gatillo</value>
</data>
<data name="lbArg.Text" xml:space="preserve">
<value>Argumentos</value>
</data>
<data name="lbDTapDVR.Text" xml:space="preserve">
<value>Oprimir el gatillo doblemente</value>
<value>Presionar el gatillo doblemente</value>
</data>
<data name="lbHoldDVR.Text" xml:space="preserve">
<value>Dejar oprimido el gatillo</value>
<value>Dejar presionado el gatillo</value>
</data>
<data name="lbHoldFor.Text" xml:space="preserve">
<value>Dejar oprimido por</value>
<value>Dejar presionado por</value>
</data>
<data name="lbName.Text" xml:space="preserve">
<value>Nombre</value>
@ -190,9 +190,9 @@
<value>segundos</value>
</data>
<data name="lbTapDVR.Text" xml:space="preserve">
<value>Oprimir el gatillo</value>
<value>Presionar el gatillo</value>
</data>
<data name="lbUnloadTipKey.Text" xml:space="preserve">
<value>Desligar tecla por</value>
<value>Desactivar tecla por</value>
</data>
</root>

View File

@ -1,30 +1,31 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.IO.Compression;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;
using System.Reflection;
//using NonFormTimer = System.Threading.Timer;
using NonFormTimer = System.Timers.Timer;
using System.Threading.Tasks;
using static DS4Windows.Global;
namespace DS4Windows
{
public partial class WelcomeDialog : Form
{
public WelcomeDialog()
public WelcomeDialog(bool loadConfig=false)
{
if (loadConfig)
{
Global.FindConfigLocation();
Global.Load();
Global.SetCulture(Global.UseLang);
}
InitializeComponent();
Icon = Properties.Resources.DS4;
}
private void bnFinish_Click(object sender, EventArgs e)
@ -42,7 +43,7 @@ namespace DS4Windows
WebClient wb = new WebClient();
if (!driverinstalling)
{
wb.DownloadFileAsync(new Uri("http://ds4windows.com/Files/Virtual Bus Driver.zip"), exepath + "\\VBus.zip");
wb.DownloadFileAsync(new Uri("http://23.239.26.40/ds4windows/files/Virtual Bus Driver.zip"), exepath + "\\VBus.zip");
wb.DownloadProgressChanged += wb_DownloadProgressChanged;
wb.DownloadFileCompleted += wb_DownloadFileCompleted;
driverinstalling = true;
@ -54,7 +55,6 @@ namespace DS4Windows
bnStep1.Text = Properties.Resources.Downloading.Replace("*number*", e.ProgressPercentage.ToString());
}
string exepath = Directory.GetParent(Assembly.GetExecutingAssembly().Location).FullName;
private void wb_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
bnStep1.Text = Properties.Resources.OpeningInstaller;
@ -80,10 +80,15 @@ namespace DS4Windows
}
catch { Process.Start(exepath + "\\Virtual Bus Driver"); }
Timer timer = new Timer();
/*Timer timer = new Timer();
timer.Start();
timer.Tick += timer_Tick;
*/
NonFormTimer timer = new NonFormTimer();
timer.Elapsed += timer_Tick;
timer.Start();
}
bool waitForFile;
DateTime waitFileCheck;
private void timer_Tick(object sender, EventArgs e)
@ -97,24 +102,27 @@ namespace DS4Windows
waitFileCheck = DateTime.UtcNow;
return;
}
if (waitForFile && waitFileCheck + TimeSpan.FromMinutes(2) < DateTime.UtcNow)
{
bnStep1.Text = Properties.Resources.InstallFailed;
Process.Start(exepath + "\\Virtual Bus Driver");
File.Delete(exepath + "\\VBus.zip");
((Timer)sender).Stop();
((NonFormTimer)sender).Stop();
this.BeginInvoke((Action)(() => { bnStep1.Text = Properties.Resources.InstallFailed; }), null);
return;
}
else if (waitForFile)
return;
string log = File.ReadAllText(exepath + "\\ScpDriver.log");
if (log.Contains("Install Succeeded"))
bnStep1.Text = Properties.Resources.InstallComplete;
this.BeginInvoke((Action)(() => { bnStep1.Text = Properties.Resources.InstallComplete; }));
else
{
bnStep1.Text = Properties.Resources.InstallFailed;
this.BeginInvoke((Action)(() => { bnStep1.Text = Properties.Resources.InstallFailed; }));
Process.Start(exepath + "\\Virtual Bus Driver");
}
try
{
File.Delete(exepath + "\\ScpDriver.exe");
@ -123,15 +131,15 @@ namespace DS4Windows
Directory.Delete(exepath + "\\DIFxAPI", true);
}
catch { }
File.Delete(exepath + "\\VBus.zip");
((Timer)sender).Stop();
((NonFormTimer)sender).Stop();
}
}
private void button2_Click(object sender, EventArgs e)
{
Process.Start("http://www.microsoft.com/hardware/en-us/d/xbox-360-controller-for-windows");
Process.Start("http://www.microsoft.com/accessories/en-gb/d/xbox-360-controller-for-windows");
}
}
}

View File

@ -121,20 +121,20 @@
<value>Paso 1: Instalar el Driver DS4</value>
</data>
<data name="button2.Text" xml:space="preserve">
<value>Paso 2: Si usas Windows 7 o inferior, instala el Driver 360</value>
<value>Paso 2: Si usas Windows 7 o inferior, instala el Driver de Xbox 360</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="linkBluetoothSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>135, 13</value>
</data>
<data name="linkBluetoothSettings.Text" xml:space="preserve">
<value>Configuracion de Bluetooth</value>
<value>Configuración del Bluetooth</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Si esta ventana reaparece despues de instalar, necesitas reiniciar tu PC o esperar 10-15 minutos a que Windows reconozca el driver</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Si usas un Controlador X360 en esta PC, puedes omitir esto</value>
<value>Si usas un Controlador de Xbox 360 en esta PC, puedes omitir esto</value>
</data>
<data name="bnFinish.Text" xml:space="preserve">
<value>Finalizado</value>
@ -143,12 +143,12 @@
<value>Bienvenido a DS4Windows</value>
</data>
<data name="labelBluetooth.Text" xml:space="preserve">
<value>Para configurar el bluetooth (opcional): Mantenga presionado el botón PS y Share durante 3 segundos. La luz del controlador comenzará a parpadear.</value>
<value>Para configurar el bluetooth (opcional): Mantenga presionado el botón PS y Share durante 3 segundos. La luz del control comenzará a parpadear.</value>
</data>
<data name="labelUSB.Text" xml:space="preserve">
<value>Paso 3: Para conectar el control DS4 por medio de cable usb sólo debe conectar el cable microusb en el DS4 y el usb común en la PC.</value>
<value>Paso 3: Para conectar el control DS4 por medio de un cable USB sólo debe conectar el cable micro USB en el DS4 y el USB común en la PC.</value>
</data>
<data name="labelBluetooth2.Text" xml:space="preserve">
<value>Una vez que esté parpadeando, vaya a Configuración de Bluetooth y conéctese al "Wireless Controller". Si le pide un código de emparejamiento, utilice el "0000". Una vez emparejado, el controlador estará listo. ¡A divertirse!</value>
<value>Una vez que esté parpadeando, vaya a Configuración del Bluetooth y conéctese al "Wireless Controller". Si le pide un código de emparejamiento, utilice el "0000". Una vez emparejado, el control estará listo. ¡A divertirse!</value>
</data>
</root>

View File

@ -127,56 +127,59 @@
<data name="&gt;&gt;linkBluetoothSettings.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelBluetooth.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="&gt;&gt;labelBluetooth2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="bnFinish.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 544</value>
</data>
<data name="labelUSB.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="labelBluetooth2.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 80</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="linkBluetoothSettings.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;button2.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="bnFinish.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>394, 579</value>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
</data>
<data name="&gt;&gt;labelUSB.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;labelBluetooth.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>5, 5, 5, 5</value>
</data>
<data name="&gt;&gt;label1.Name" xml:space="preserve">
<value>label1</value>
<data name="labelBluetooth2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
</data>
<data name="bnFinish.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="pictureBox1.InitialImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="button2.Text" xml:space="preserve">
<value>Step 2: If on Windows 7 or below, Install 360 Driver</value>
</data>
<data name="&gt;&gt;bnFinish.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="bnStep1.Size" type="System.Drawing.Size, System.Drawing">
<value>324, 29</value>
<data name="&gt;&gt;linkBluetoothSettings.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="bnStep1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelBluetooth2.Name" xml:space="preserve">
<value>labelBluetooth2</value>
</data>
@ -186,13 +189,8 @@
<data name="&gt;&gt;button2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="labelBluetooth.Text" xml:space="preserve">
<value>To set up bluetooth (optional):
Hold the PS Button and Share for 3 seconds
The lightbar will begin to double flash</value>
</data>
<data name="labelBluetooth.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>120, 120</value>
</data>
<data name="&gt;&gt;pictureBox1.Name" xml:space="preserve">
<value>pictureBox1</value>
@ -200,23 +198,23 @@ The lightbar will begin to double flash</value>
<data name="labelUSB.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="&gt;&gt;labelBluetooth2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;bnStep1.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="labelUSB.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="labelUSB.Size" type="System.Drawing.Size, System.Drawing">
<value>391, 49</value>
</data>
<data name="labelBluetooth.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 49</value>
<data name="&gt;&gt;label1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
<data name="&gt;&gt;bnFinish.Name" xml:space="preserve">
<value>bnFinish</value>
</data>
<data name="labelBluetooth.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 223</value>
<data name="linkBluetoothSettings.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;pictureBox1.ZOrder" xml:space="preserve">
<value>2</value>
@ -224,8 +222,8 @@ The lightbar will begin to double flash</value>
<data name="&gt;&gt;bnFinish.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnFinish.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
<data name="&gt;&gt;linkBluetoothSettings.Name" xml:space="preserve">
<value>linkBluetoothSettings</value>
</data>
<data name="label1.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -239,8 +237,8 @@ The lightbar will begin to double flash</value>
<data name="pictureBox1.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>StretchImage</value>
</data>
<data name="&gt;&gt;bnFinish.Name" xml:space="preserve">
<value>bnFinish</value>
<data name="&gt;&gt;bnStep1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="bnFinish.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
@ -248,18 +246,15 @@ The lightbar will begin to double flash</value>
<data name="button2.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="labelBluetooth.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 40</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>120, 120</value>
<data name="&gt;&gt;labelUSB.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;label2.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="pictureBox1.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>45, 298</value>
</data>
@ -275,36 +270,33 @@ The lightbar will begin to double flash</value>
<data name="&gt;&gt;pictureBox1.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;linkBluetoothSettings.Type" xml:space="preserve">
<value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="pictureBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
<data name="&gt;&gt;bnFinish.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;bnFinish.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="bnStep1.Text" xml:space="preserve">
<value>Step 1: Install the DS4 Driver</value>
</data>
<data name="bnFinish.Size" type="System.Drawing.Size, System.Drawing">
<value>94, 29</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 132</value>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="labelUSB.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
<data name="&gt;&gt;bnStep1.Name" xml:space="preserve">
<value>bnStep1</value>
</data>
<data name="label1.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="pictureBox1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="linkBluetoothSettings.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 466</value>
</data>
<data name="labelBluetooth2.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 466</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;bnStep1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
@ -314,17 +306,14 @@ The lightbar will begin to double flash</value>
<data name="linkBluetoothSettings.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WelcomeDialog</value>
</data>
<data name="&gt;&gt;labelBluetooth.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="labelBluetooth.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>306, 165</value>
</data>
<data name="&gt;&gt;labelUSB.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="pictureBox1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="&gt;&gt;button2.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
@ -338,35 +327,32 @@ The lightbar will begin to double flash</value>
<data name="&gt;&gt;label2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="label1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<data name="bnStep1.Size" type="System.Drawing.Size, System.Drawing">
<value>324, 29</value>
</data>
<data name="label2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="&gt;&gt;labelUSB.Name" xml:space="preserve">
<value>labelUSB</value>
</data>
<data name="button2.Location" type="System.Drawing.Point, System.Drawing">
<value>36, 101</value>
</data>
<data name="&gt;&gt;linkBluetoothSettings.Name" xml:space="preserve">
<value>linkBluetoothSettings</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="labelBluetooth2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="linkBluetoothSettings.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;labelBluetooth.ZOrder" xml:space="preserve">
<value>1</value>
<data name="label2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;label2.Name" xml:space="preserve">
<value>label2</value>
</data>
<data name="&gt;&gt;bnStep1.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="labelBluetooth.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 49</value>
</data>
<data name="labelBluetooth2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>392, 57</value>
@ -374,15 +360,15 @@ The lightbar will begin to double flash</value>
<data name="linkBluetoothSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>123, 17</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WelcomeDialog</value>
</data>
<data name="labelBluetooth.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 223</value>
</data>
<data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="bnStep1.Text" xml:space="preserve">
<value>Step 1: Install the DS4 Driver</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 40</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Welcome to DS4Windows</value>
</data>
@ -398,31 +384,33 @@ Once paired, you're ready. Have fun!</value>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>394, 28</value>
</data>
<data name="&gt;&gt;bnStep1.Parent" xml:space="preserve">
<value>$this</value>
<data name="labelBluetooth.Text" xml:space="preserve">
<value>To set up bluetooth (optional):
Hold the PS Button and Share for 3 seconds
The lightbar will begin to double flash</value>
</data>
<data name="linkBluetoothSettings.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 132</value>
</data>
<data name="&gt;&gt;button2.Name" xml:space="preserve">
<value>button2</value>
</data>
<data name="labelBluetooth2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
<data name="labelBluetooth.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;bnStep1.Name" xml:space="preserve">
<value>bnStep1</value>
<data name="linkBluetoothSettings.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 466</value>
</data>
<data name="labelUSB.Text" xml:space="preserve">
<value>Step 3: Connecting the DualShock 4 controller
To set up wired/usb:
Simply plug a micro usb into your PC and DualShock 4</value>
</data>
<data name="labelUSB.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="button2.Text" xml:space="preserve">
<value>Step 2: If on Windows 7 or below, Install 360 Driver</value>
</data>
<data name="&gt;&gt;linkBluetoothSettings.Parent" xml:space="preserve">
<value>$this</value>
@ -436,26 +424,38 @@ Simply plug a micro usb into your PC and DualShock 4</value>
<data name="labelUSB.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 162</value>
</data>
<data name="labelUSB.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="button2.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="&gt;&gt;labelUSB.Name" xml:space="preserve">
<value>labelUSB</value>
<data name="&gt;&gt;labelBluetooth.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>394, 579</value>
</data>
<data name="button2.Size" type="System.Drawing.Size, System.Drawing">
<value>324, 29</value>
</data>
<data name="label1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="labelBluetooth.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="labelBluetooth.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
</data>
<data name="&gt;&gt;label1.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="labelBluetooth2.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>TopCenter</value>
<data name="label2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="labelUSB.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 0, 4, 0</value>
</data>
<data name="linkBluetoothSettings.Text" xml:space="preserve">
<value>Bluetooth Settings</value>
@ -466,7 +466,4 @@ Simply plug a micro usb into your PC and DualShock 4</value>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>uk</value>
</metadata>
</root>

View File

@ -117,18 +117,36 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="bnStep1.Location" type="System.Drawing.Point, System.Drawing">
<value>29, 8</value>
</data>
<data name="bnStep1.Size" type="System.Drawing.Size, System.Drawing">
<value>259, 23</value>
</data>
<data name="bnStep1.Text" xml:space="preserve">
<value>Крок 1: Встановити драйвер DS4</value>
</data>
<data name="button2.Location" type="System.Drawing.Point, System.Drawing">
<value>29, 81</value>
</data>
<data name="button2.Size" type="System.Drawing.Size, System.Drawing">
<value>259, 23</value>
</data>
<data name="button2.Text" xml:space="preserve">
<value>Крок 2: Для Windows 7 та попередніх - встановіть драйвер 360</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.Location" type="System.Drawing.Point, System.Drawing">
<value>45, 307</value>
<value>36, 246</value>
</data>
<data name="pictureBox1.Size" type="System.Drawing.Size, System.Drawing">
<value>245, 132</value>
</data>
<data name="labelBluetooth.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 242</value>
<value>1, 194</value>
</data>
<data name="labelBluetooth.Size" type="System.Drawing.Size, System.Drawing">
<value>312, 39</value>
</data>
<data name="labelBluetooth.Text" xml:space="preserve">
<value>Для налаштування Bluetooth (за бажанням):
@ -136,7 +154,10 @@
Світлопанель мерехтітиме подвійним спалахом</value>
</data>
<data name="labelUSB.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 181</value>
<value>0, 145</value>
</data>
<data name="labelUSB.Size" type="System.Drawing.Size, System.Drawing">
<value>313, 39</value>
</data>
<data name="labelUSB.Text" xml:space="preserve">
<value>Крок 3: Підключення контролеру DualShock 4
@ -144,10 +165,10 @@
Просто підключіть micro usb до вашого ПК та DualShock 4</value>
</data>
<data name="labelBluetooth2.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 479</value>
<value>1, 383</value>
</data>
<data name="labelBluetooth2.Size" type="System.Drawing.Size, System.Drawing">
<value>390, 89</value>
<value>312, 71</value>
</data>
<data name="labelBluetooth2.Text" xml:space="preserve">
<value>Як тільки замерехтить, йдіть до налаштувань вашого Bluetooth
@ -155,32 +176,51 @@
Якщо спитає, введіть код пари "0000"
При створенні пари, ви готові. Розважайтеся!</value>
</data>
<data name="label1.Location" type="System.Drawing.Point, System.Drawing">
<value>1, 32</value>
</data>
<data name="label1.Size" type="System.Drawing.Size, System.Drawing">
<value>314, 46</value>
</data>
<data name="label1.Text" xml:space="preserve">
<value>Якщо це вікно з'явилося знову після встановлення, тоді вам потрібно перезавантажити ПК, або почекати 10-15 хв поки Windows помітить драйвер</value>
</data>
<data name="label2.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 106</value>
</data>
<data name="label2.Size" type="System.Drawing.Size, System.Drawing">
<value>394, 38</value>
<value>315, 30</value>
</data>
<data name="label2.Text" xml:space="preserve">
<value>Якщи ви користуєтесь 360 контролером на цьому ПК, можете пропустити</value>
</data>
<data name="bnFinish.Location" type="System.Drawing.Point, System.Drawing">
<value>146, 573</value>
<value>117, 458</value>
</data>
<data name="bnFinish.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="bnFinish.Text" xml:space="preserve">
<value>Завершити</value>
</data>
<data name="linkBluetoothSettings.Location" type="System.Drawing.Point, System.Drawing">
<value>211, 495</value>
<value>169, 396</value>
</data>
<data name="linkBluetoothSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>170, 17</value>
<value>129, 13</value>
</data>
<data name="linkBluetoothSettings.Text" xml:space="preserve">
<value>Налаштування Bluetooth</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>96, 96</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>394, 608</value>
<value>315, 486</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Ласкаво просимо до DS4Windows</value>

View File

@ -191,7 +191,6 @@
//
// cMSPrograms
//
resources.ApplyResources(this.cMSPrograms, "cMSPrograms");
this.cMSPrograms.ImageScalingSize = new System.Drawing.Size(20, 20);
this.cMSPrograms.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.addProgramsFromStartMenuToolStripMenuItem,
@ -201,35 +200,36 @@
this.browseForOtherProgramsToolStripMenuItem});
this.cMSPrograms.Name = "contextMenuStrip1";
this.cMSPrograms.ShowImageMargin = false;
resources.ApplyResources(this.cMSPrograms, "cMSPrograms");
//
// addProgramsFromStartMenuToolStripMenuItem
//
resources.ApplyResources(this.addProgramsFromStartMenuToolStripMenuItem, "addProgramsFromStartMenuToolStripMenuItem");
this.addProgramsFromStartMenuToolStripMenuItem.Name = "addProgramsFromStartMenuToolStripMenuItem";
resources.ApplyResources(this.addProgramsFromStartMenuToolStripMenuItem, "addProgramsFromStartMenuToolStripMenuItem");
this.addProgramsFromStartMenuToolStripMenuItem.Click += new System.EventHandler(this.addProgramsFromStartMenuToolStripMenuItem_Click);
//
// addSteamGamesToolStripMenuItem
//
resources.ApplyResources(this.addSteamGamesToolStripMenuItem, "addSteamGamesToolStripMenuItem");
this.addSteamGamesToolStripMenuItem.Name = "addSteamGamesToolStripMenuItem";
resources.ApplyResources(this.addSteamGamesToolStripMenuItem, "addSteamGamesToolStripMenuItem");
this.addSteamGamesToolStripMenuItem.Click += new System.EventHandler(this.addSteamGamesToolStripMenuItem_Click);
//
// addOriginGamesToolStripMenuItem
//
resources.ApplyResources(this.addOriginGamesToolStripMenuItem, "addOriginGamesToolStripMenuItem");
this.addOriginGamesToolStripMenuItem.Name = "addOriginGamesToolStripMenuItem";
resources.ApplyResources(this.addOriginGamesToolStripMenuItem, "addOriginGamesToolStripMenuItem");
this.addOriginGamesToolStripMenuItem.Click += new System.EventHandler(this.addOriginGamesToolStripMenuItem_Click);
//
// addDirectoryToolStripMenuItem
//
resources.ApplyResources(this.addDirectoryToolStripMenuItem, "addDirectoryToolStripMenuItem");
this.addDirectoryToolStripMenuItem.Name = "addDirectoryToolStripMenuItem";
resources.ApplyResources(this.addDirectoryToolStripMenuItem, "addDirectoryToolStripMenuItem");
this.addDirectoryToolStripMenuItem.Click += new System.EventHandler(this.addDirectoryToolStripMenuItem_Click);
//
// browseForOtherProgramsToolStripMenuItem
//
resources.ApplyResources(this.browseForOtherProgramsToolStripMenuItem, "browseForOtherProgramsToolStripMenuItem");
this.browseForOtherProgramsToolStripMenuItem.Name = "browseForOtherProgramsToolStripMenuItem";
resources.ApplyResources(this.browseForOtherProgramsToolStripMenuItem, "browseForOtherProgramsToolStripMenuItem");
this.browseForOtherProgramsToolStripMenuItem.Click += new System.EventHandler(this.browseForOtherProgramsToolStripMenuItem_Click);
//
// cBTurnOffDS4W
@ -243,7 +243,7 @@
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.BackColor = System.Drawing.SystemColors.Control;
this.Controls.Add(this.cBTurnOffDS4W);
this.Controls.Add(this.pBProfilesTip);
this.Controls.Add(this.bnHideUnchecked);

View File

@ -1,20 +1,15 @@
using Microsoft.Win32;
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Xml;
using System.Runtime.InteropServices;
//using Ookii.Dialogs;
using System.Threading;
using System.Diagnostics;
using System.Threading.Tasks;
namespace DS4Windows
{
@ -30,6 +25,10 @@ namespace DS4Windows
List<string> programpaths = new List<string>();
List<string> lodsf = new List<string>();
bool appsloaded = false;
const string steamCommx86Loc = @"C:\Program Files (x86)\Steam\steamapps\common";
const string steamCommLoc = @"C:\Program Files\Steam\steamapps\common";
const string originx86Loc = @"C:\Program Files (x86)\Origin Games";
const string originLoc = @"C:\Program Files\Origin Games";
public WinProgs(string[] oc, DS4Form main)
{
@ -43,28 +42,30 @@ namespace DS4Windows
cbs[i].Items.Add(Properties.Resources.noneProfile);
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
}
if (!File.Exists(Global.appdatapath + @"\Auto Profiles.xml"))
Create();
LoadP();
if (Directory.Exists(@"C:\Program Files (x86)\Steam\steamapps\common"))
steamgamesdir = @"C:\Program Files (x86)\Steam\steamapps\common";
else if (Directory.Exists(@"C:\Program Files\Steam\steamapps\common"))
steamgamesdir = @"C:\Program Files\Steam\steamapps\common";
if (Directory.Exists(steamCommx86Loc))
steamgamesdir = steamCommx86Loc;
else if (Directory.Exists(steamCommLoc))
steamgamesdir = steamCommLoc;
else
cMSPrograms.Items.Remove(addSteamGamesToolStripMenuItem);
if (Directory.Exists(@"C:\Program Files (x86)\Origin Games"))
origingamesdir = @"C:\Program Files (x86)\Origin Games";
else if (Directory.Exists(@"C:\Program Files\Origin Games"))
origingamesdir = @"C:\Program Files\Origin Games";
if (Directory.Exists(originx86Loc))
origingamesdir = originx86Loc;
else if (Directory.Exists(originLoc))
origingamesdir = originLoc;
else
cMSPrograms.Items.Remove(addOriginGamesToolStripMenuItem);
}
public bool Create()
{
Boolean Saved = true;
bool Saved = true;
try
{
@ -101,39 +102,36 @@ namespace DS4Windows
programpaths.Clear();
if (!File.Exists(Global.appdatapath + "\\Auto Profiles.xml"))
return;
doc.Load(Global.appdatapath + "\\Auto Profiles.xml");
XmlNodeList programslist = doc.SelectNodes("Programs/Program");
foreach (XmlNode x in programslist)
programpaths.Add(x.Attributes["path"].Value);
lVPrograms.BeginUpdate();
int index = 0;
foreach (string st in programpaths)
{
if (File.Exists(st))
if (!string.IsNullOrEmpty(st))
{
int index = programpaths.IndexOf(st);
if (string.Empty != st)
if (File.Exists(st))
{
iLIcons.Images.Add(Icon.ExtractAssociatedIcon(st));
ListViewItem lvi = new ListViewItem(Path.GetFileNameWithoutExtension(st), index);
lvi.SubItems.Add(st);
lvi.Checked = true;
lvi.ToolTipText = st;
lVPrograms.Items.Add(lvi);
}
ListViewItem lvi = new ListViewItem(Path.GetFileNameWithoutExtension(st), index);
lvi.Checked = true;
lvi.ToolTipText = st;
lvi.SubItems.Add(st);
lVPrograms.Items.Add(lvi);
}
else
{
RemoveP(st, false, false);
}
index++;
}
lVPrograms.EndUpdate();
}
private void bnLoadSteam_Click(object sender, EventArgs e)
{
}
private void GetApps(string path)
{
lodsf.Clear();
@ -147,6 +145,7 @@ namespace DS4Windows
}
catch { }
}
appsloaded = true;
}
@ -162,31 +161,43 @@ namespace DS4Windows
}
catch { }
}
return lods;
}
private void GetShortcuts(string path)
{
lodsf.Clear();
lodsf.AddRange(Directory.GetFiles(path, "*.lnk", SearchOption.AllDirectories));
lodsf.AddRange(Directory.GetFiles(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs", "*.lnk", SearchOption.AllDirectories));
lodsf.AddRange(Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu) + "\\Programs", "*.lnk", SearchOption.AllDirectories));
for (int i = 0; i < lodsf.Count; i++)
lodsf[i] = GetTargetPath(lodsf[i]);
appsloaded = true;
}
void appstimer_Tick(object sender, EventArgs e)
void AddLoadedApps()
{
if (appsloaded)
{
bnAddPrograms.Text = Properties.Resources.AddingToList;
for (int i = lodsf.Count - 1; i >= 0; i--)
{
if (lodsf[i].Contains("etup") || lodsf[i].Contains("dotnet") || lodsf[i].Contains("SETUP")
|| lodsf[i].Contains("edist") || lodsf[i].Contains("nstall") || String.IsNullOrEmpty(lodsf[i]))
lodsf.RemoveAt(i);
}
for (int i = lodsf.Count - 1; i >= 0; i--)
{
for (int j = programpaths.Count - 1; j >= 0; j--)
{
if (lodsf[i].ToLower().Replace('/', '\\') == programpaths[j].ToLower().Replace('/', '\\'))
lodsf.RemoveAt(i);
}
}
lVPrograms.BeginUpdate();
foreach (string st in lodsf)
{
if (File.Exists(st))
@ -199,14 +210,14 @@ namespace DS4Windows
lVPrograms.Items.Add(lvi);
}
}
lVPrograms.EndUpdate();
bnAddPrograms.Text = Properties.Resources.AddPrograms;
bnAddPrograms.Enabled = true;
appsloaded = false;
((Timer)sender).Stop();
}
}
public void Save(string name)
{
m_Xdoc.Load(m_Profile);
@ -226,16 +237,20 @@ namespace DS4Windows
el.AppendChild(m_Xdoc.CreateElement("Controller3")).InnerText = cBProfile3.Text;
el.AppendChild(m_Xdoc.CreateElement("Controller4")).InnerText = cBProfile4.Text;
el.AppendChild(m_Xdoc.CreateElement("TurnOff")).InnerText = cBTurnOffDS4W.Checked.ToString();
try
{
XmlNode oldxmlprocess = m_Xdoc.SelectSingleNode("/Programs/Program[@path=\"" + lBProgramPath.Text + "\"]");
Node.ReplaceChild(el, oldxmlprocess);
}
catch { Node.AppendChild(el); }
m_Xdoc.AppendChild(Node);
m_Xdoc.Save(m_Profile);
if (lVPrograms.SelectedItems.Count > 0)
lVPrograms.SelectedItems[0].Checked = true;
form.LoadP();
}
@ -251,7 +266,9 @@ namespace DS4Windows
{
Item = doc.SelectSingleNode("/Programs/Program[@path=\"" + name + "\"]" + "/Controller" + (i + 1));
if (Item != null)
{
for (int j = 0; j < cbs[i].Items.Count; j++)
{
if (cbs[i].Items[j].ToString() == Item.InnerText)
{
cbs[i].SelectedIndex = j;
@ -260,9 +277,12 @@ namespace DS4Windows
}
else
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
}
}
else
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
}
Item = doc.SelectSingleNode("/Programs/Program[@path=\"" + name + "\"]" + "/TurnOff");
bool turnOff;
if (Item != null && bool.TryParse(Item.InnerText, out turnOff))
@ -276,29 +296,30 @@ namespace DS4Windows
{
for (int i = 0; i < 4; i++)
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
cBTurnOffDS4W.Checked = false;
bnSave.Enabled = false;
}
}
public void RemoveP(string name, bool uncheck, bool reload = true)
public void RemoveP(string name, bool uncheck)
{
XmlDocument doc = new XmlDocument();
doc.Load(m_Profile);
XmlNode Node = doc.SelectSingleNode("Programs");
XmlNode Item = doc.SelectSingleNode("/Programs/Program[@path=\"" + name + "\"]");
if (Item != null)
Node.RemoveChild(Item);
doc.AppendChild(Node);
doc.Save(m_Profile);
if (lVPrograms.SelectedItems.Count > 0 && uncheck)
lVPrograms.SelectedItems[0].Checked = false;
for (int i = 0; i < 4; i++)
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
bnSave.Enabled = false;
if (reload)
form.LoadP();
}
private void CBProfile_IndexChanged(object sender, EventArgs e)
@ -306,6 +327,7 @@ namespace DS4Windows
int last = cbs[0].Items.Count - 1;
if (lBProgramPath.Text != string.Empty)
bnSave.Enabled = true;
if (cbs[0].SelectedIndex == last && cbs[1].SelectedIndex == last &&
cbs[2].SelectedIndex == last && cbs[3].SelectedIndex == last && !cBTurnOffDS4W.Checked)
bnSave.Enabled = false;
@ -315,6 +337,7 @@ namespace DS4Windows
{
if (lBProgramPath.Text != "")
Save(lBProgramPath.Text);
bnSave.Enabled = false;
}
@ -328,8 +351,10 @@ namespace DS4Windows
if (lBProgramPath.Text != "")
LoadP(lBProgramPath.Text);
else
{
for (int i = 0; i < 4; i++)
cbs[i].SelectedIndex = cbs[i].Items.Count - 1;
}
}
private void bnDelete_Click(object sender, EventArgs e)
@ -359,41 +384,24 @@ namespace DS4Windows
form.RefreshAutoProfilesPage();
}
private void addSteamGamesToolStripMenuItem_Click(object sender, EventArgs e)
private async void addSteamGamesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
var AppCollectionThread = new System.Threading.Thread(() => GetApps(steamgamesdir));
AppCollectionThread.IsBackground = true;
AppCollectionThread.Start();
}
catch { }
bnAddPrograms.Text = Properties.Resources.Loading;
bnAddPrograms.Enabled = false;
cMSPrograms.Items.Remove(addSteamGamesToolStripMenuItem);
Timer appstimer = new Timer();
appstimer.Start();
appstimer.Tick += appstimer_Tick;
await Task.Run(() => GetApps(steamgamesdir));
AddLoadedApps();
}
private void addDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
private async void addDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
try
{
var AppCollectionThread = new System.Threading.Thread(() => GetApps(fbd.SelectedPath));
AppCollectionThread.IsBackground = true;
AppCollectionThread.Start();
}
catch { }
bnAddPrograms.Text = Properties.Resources.Loading;
bnAddPrograms.Enabled = false;
Timer appstimer = new Timer();
appstimer.Start();
appstimer.Tick += appstimer_Tick;
await Task.Run(() => GetApps(fbd.SelectedPath));
AddLoadedApps();
}
}
@ -406,6 +414,7 @@ namespace DS4Windows
{
file = GetTargetPath(file);
}
lBProgramPath.Text = file;
iLIcons.Images.Add(Icon.ExtractAssociatedIcon(file));
ListViewItem lvi = new ListViewItem(Path.GetFileNameWithoutExtension(file), lVPrograms.Items.Count);
@ -414,39 +423,22 @@ namespace DS4Windows
}
}
private void addOriginGamesToolStripMenuItem_Click(object sender, EventArgs e)
private async void addOriginGamesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
var AppCollectionThread = new System.Threading.Thread(() => GetApps(origingamesdir));
AppCollectionThread.IsBackground = true;
AppCollectionThread.Start();
}
catch { }
bnAddPrograms.Text = Properties.Resources.Loading;
bnAddPrograms.Enabled = false;
cMSPrograms.Items.Remove(addOriginGamesToolStripMenuItem);
Timer appstimer = new Timer();
appstimer.Start();
appstimer.Tick += appstimer_Tick;
await Task.Run(() => GetApps(origingamesdir));
AddLoadedApps();
}
private void addProgramsFromStartMenuToolStripMenuItem_Click(object sender, EventArgs e)
private async void addProgramsFromStartMenuToolStripMenuItem_Click(object sender, EventArgs e)
{
//MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs");
try
{
var AppCollectionThread = new System.Threading.Thread(() => GetShortcuts(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs"));
AppCollectionThread.IsBackground = true;
AppCollectionThread.Start();
}
catch { }
bnAddPrograms.Text = Properties.Resources.Loading;
bnAddPrograms.Enabled = false;
cMSPrograms.Items.Remove(addProgramsFromStartMenuToolStripMenuItem);
Timer appstimer = new Timer();
appstimer.Start();
appstimer.Tick += appstimer_Tick;
await Task.Run(() => GetShortcuts(Environment.GetFolderPath(Environment.SpecialFolder.StartMenu) + "\\Programs"));
AddLoadedApps();
}
public static string GetTargetPath(string filePath)
@ -486,36 +478,52 @@ namespace DS4Windows
public static string ResolveShortcut(string filePath)
{
// IWshRuntimeLibrary is in the COM library "Windows Script Host Object Model"
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); // Windows Script Host Shell Object
dynamic shell = Activator.CreateInstance(t);
string result;
try
{
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(filePath);
return shortcut.TargetPath;
var shortcut = shell.CreateShortcut(filePath);
result = shortcut.TargetPath;
Marshal.FinalReleaseComObject(shortcut);
}
catch (COMException)
{
// A COMException is thrown if the file is not a valid shortcut (.lnk) file
return null;
result = null;
}
finally
{
Marshal.FinalReleaseComObject(shell);
}
return result;
}
public static string ResolveShortcutAndArgument(string filePath)
{
// IWshRuntimeLibrary is in the COM library "Windows Script Host Object Model"
IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
Type t = Type.GetTypeFromCLSID(new Guid("72C24DD5-D70A-438B-8A42-98424B88AFB8")); // Windows Script Host Shell Object
dynamic shell = Activator.CreateInstance(t);
string result;
try
{
IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(filePath);
return shortcut.TargetPath + " " + shortcut.Arguments;
var shortcut = shell.CreateShortcut(filePath);
result = shortcut.TargetPath + " " + shortcut.Arguments;
Marshal.FinalReleaseComObject(shortcut);
}
catch (COMException)
{
// A COMException is thrown if the file is not a valid shortcut (.lnk) file
return null;
result = null;
}
finally
{
Marshal.FinalReleaseComObject(shell);
}
return result;
}
private void cBTurnOffDS4W_CheckedChanged(object sender, EventArgs e)
@ -545,6 +553,7 @@ namespace DS4Windows
}
}
}
class NativeMethods2
{
[DllImport("msi.dll", CharSet = CharSet.Auto)]

View File

@ -118,26 +118,101 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="bnAddPrograms.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 2</value>
</data>
<data name="bnAddPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>130, 23</value>
<value>98, 19</value>
</data>
<data name="bnAddPrograms.Text" xml:space="preserve">
<value>Programme hinzufügen</value>
</data>
<data name="lBProgramPath.Location" type="System.Drawing.Point, System.Drawing">
<value>519, 195</value>
</data>
<data name="lBProgramPath.Size" type="System.Drawing.Size, System.Drawing">
<value>205, 18</value>
</data>
<data name="cBProfile1.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 28</value>
</data>
<data name="cBProfile1.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile2.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 55</value>
</data>
<data name="cBProfile2.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile3.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 82</value>
</data>
<data name="cBProfile3.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="cBProfile4.Location" type="System.Drawing.Point, System.Drawing">
<value>609, 109</value>
</data>
<data name="cBProfile4.Size" type="System.Drawing.Size, System.Drawing">
<value>121, 21</value>
</data>
<data name="bnSave.Location" type="System.Drawing.Point, System.Drawing">
<value>663, 2</value>
</data>
<data name="bnSave.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 23</value>
</data>
<data name="bnSave.Text" xml:space="preserve">
<value>Speichern</value>
</data>
<data name="lBController1.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 31</value>
</data>
<data name="lBController1.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController2.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 58</value>
</data>
<data name="lBController2.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController3.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 85</value>
</data>
<data name="lBController3.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="lBController4.Location" type="System.Drawing.Point, System.Drawing">
<value>516, 112</value>
</data>
<data name="lBController4.Size" type="System.Drawing.Size, System.Drawing">
<value>60, 13</value>
</data>
<data name="bnDelete.Location" type="System.Drawing.Point, System.Drawing">
<value>590, 2</value>
</data>
<data name="bnDelete.Size" type="System.Drawing.Size, System.Drawing">
<value>67, 23</value>
</data>
<data name="bnDelete.Text" xml:space="preserve">
<value>Entfernen</value>
</data>
<data name="PathHeader.Text" xml:space="preserve">
<value>Verzeichnis</value>
</data>
<data name="lVPrograms.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 28</value>
</data>
<data name="lVPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>505, 190</value>
</data>
<data name="pBProfilesTip.Location" type="System.Drawing.Point, System.Drawing">
<value>818, 167</value>
<value>614, 136</value>
</data>
<data name="pBProfilesTip.Size" type="System.Drawing.Size, System.Drawing">
<value>147, 17</value>
<value>110, 13</value>
</data>
<data name="pBProfilesTip.Text" xml:space="preserve">
<value>Profile hier auswählen</value>
@ -147,63 +222,66 @@
<value>NoControl</value>
</data>
<data name="bnHideUnchecked.Location" type="System.Drawing.Point, System.Drawing">
<value>141, 2</value>
<value>106, 2</value>
</data>
<data name="bnHideUnchecked.Size" type="System.Drawing.Size, System.Drawing">
<value>172, 23</value>
<value>129, 19</value>
</data>
<data name="bnHideUnchecked.Text" xml:space="preserve">
<value>Abgewählte verstecken</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>275, 26</value>
<value>229, 22</value>
</data>
<data name="addProgramsFromStartMenuToolStripMenuItem.Text" xml:space="preserve">
<value>Startmenü Programm hinzufügen</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>275, 26</value>
<value>229, 22</value>
</data>
<data name="addSteamGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Steam Spiel hinzufügen</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>275, 26</value>
<value>229, 22</value>
</data>
<data name="addOriginGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Origin Spiel hinzufügen</value>
</data>
<data name="addDirectoryToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>275, 26</value>
<value>229, 22</value>
</data>
<data name="addDirectoryToolStripMenuItem.Text" xml:space="preserve">
<value>Verzeichnis Hinzufügen</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>275, 26</value>
<value>229, 22</value>
</data>
<data name="browseForOtherProgramsToolStripMenuItem.Text" xml:space="preserve">
<value>Suche nach anderen Programmen</value>
</data>
<data name="cMSPrograms.Size" type="System.Drawing.Size, System.Drawing">
<value>276, 134</value>
<value>230, 114</value>
</data>
<data name="cBTurnOffDS4W.Location" type="System.Drawing.Point, System.Drawing">
<value>514, 152</value>
</data>
<data name="cBTurnOffDS4W.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>2, 2, 2, 2</value>
</data>
<data name="cBTurnOffDS4W.Size" type="System.Drawing.Size, System.Drawing">
<value>215, 41</value>
</data>
<data name="cBTurnOffDS4W.Text" xml:space="preserve">
<value>DS4Windows temporär ausschalten</value>
</data>
<data name="lBController1.Text" xml:space="preserve">
<value>Controller 1</value>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="lBController2.Text" xml:space="preserve">
<value>Controller 2</value>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>736, 222</value>
</data>
<data name="lBController3.Text" xml:space="preserve">
<value>Controller 3</value>
</data>
<data name="lBController4.Text" xml:space="preserve">
<value>Controller 4</value>
</data>
<data name="nameHeader.Text" xml:space="preserve">
<value>Name</value>
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>4, 4, 4, 4</value>
</data>
</root>

View File

@ -128,25 +128,25 @@
<value>70, 13</value>
</data>
<data name="lBController1.Text" xml:space="preserve">
<value>Controlador 1</value>
<value>Control 1</value>
</data>
<data name="lBController2.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 13</value>
</data>
<data name="lBController2.Text" xml:space="preserve">
<value>Controlador 2</value>
<value>Control 2</value>
</data>
<data name="lBController3.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 13</value>
</data>
<data name="lBController3.Text" xml:space="preserve">
<value>Controlador 3</value>
<value>Control 3</value>
</data>
<data name="lBController4.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 13</value>
</data>
<data name="lBController4.Text" xml:space="preserve">
<value>Controlador 4</value>
<value>Control 4</value>
</data>
<data name="bnDelete.Text" xml:space="preserve">
<value>Quitar</value>

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +0,0 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

View File

@ -0,0 +1,391 @@
/*
Modified version of http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net
Using a default table improves drastically the performance of the algorithm.
Credit for the implementation should be awarded to Damien Guard.
Modified under the intention of creating a Nuget package
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Originally published at http://damieng.com/blog/2006/08/08/calculating_crc32_in_c_and_net
*/
using System;
using System.Security.Cryptography;
namespace DS4Windows
{
/// <summary>
/// Implements a 32-bit CRC hash algorithm compatible with Zip etc.
/// </summary>
/// <remarks>
/// Crc32 should only be used for backward compatibility with older file formats
/// and algorithms. It is not secure enough for new applications.
/// If you need to call multiple times for the same data either use the HashAlgorithm
/// interface or remember that the result of one Compute call needs to be ~ (XOR) before
/// being passed in as the seed for the next Compute call.
/// </remarks>
public sealed class Crc32Algorithm : HashAlgorithm
{
public const uint DefaultPolynomial = 0xedb88320u;
public const uint DefaultSeed = 0xffffffffu;
private static readonly uint[] defaultTable =
{
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};
private static uint[] testLook = new uint[16 * 256];
private static bool secondTablePop = false;
private readonly uint _seed;
private readonly uint[] _table;
private uint _hash;
public Crc32Algorithm()
: this(DefaultPolynomial, DefaultSeed)
{
}
public Crc32Algorithm(uint polynomial, uint seed)
{
_table = InitializeTable(polynomial);
_seed = _hash = seed;
}
public override void Initialize()
{
_hash = _seed;
}
protected override void HashCore(byte[] buffer, int start, int length)
{
_hash = CalculateHash(_table, _hash, buffer, start, length);
}
protected override byte[] HashFinal()
{
var hashBuffer = UintToBigEndianBytes(~_hash);
HashValue = hashBuffer;
return hashBuffer;
}
public override int HashSize { get { return 32; } }
public static uint Compute(byte[] buffer)
{
return ~CalculateHash(defaultTable, DefaultSeed, buffer, 0, buffer.Length);
}
public static uint Compute(uint seed, byte[] buffer)
{
return ~CalculateHash(defaultTable, seed, buffer, 0, buffer.Length);
}
public static uint Compute(uint polynomial, uint seed, byte[] buffer)
{
return ~CalculateHash(InitializeTable(polynomial), seed, buffer, 0, buffer.Length);
}
public static uint[] InitializeTable(uint polynomial)
{
if (polynomial == DefaultPolynomial)
{
if (!secondTablePop)
{
for (int i = 0; i <= 0xFF; i++)
{
testLook[0 + i] = defaultTable[i];
testLook[256+i] = (defaultTable[i] >> 8) ^ defaultTable[defaultTable[i] & 0xFF];
testLook[512 + i] = (testLook[256 + i] >> 8) ^ defaultTable[testLook[256 + i] & 0xFF];
testLook[768 + i] = (testLook[512 + i] >> 8) ^ defaultTable[testLook[512 + i] & 0xFF];
testLook[1024 + i] = (testLook[768 + i] >> 8) ^ defaultTable[testLook[768 + i] & 0xFF];
testLook[1280 + i] = (testLook[1024 + i] >> 8) ^ defaultTable[testLook[1024 + i] & 0xFF];
testLook[1536 + i] = (testLook[1280 + i] >> 8) ^ defaultTable[testLook[1280 + i] & 0xFF];
testLook[1792 + i] = (testLook[1536 + i] >> 8) ^ defaultTable[testLook[1536 + i] & 0xFF];
testLook[2048 + i] = (testLook[1792 + i] >> 8) ^ defaultTable[testLook[1792 + i] & 0xFF];
testLook[2304 + i] = (testLook[2048 + i] >> 8) ^ defaultTable[testLook[2048 + i] & 0xFF];
testLook[2560 + i] = (testLook[2304 + i] >> 8) ^ defaultTable[testLook[2304 + i] & 0xFF];
testLook[2816 + i] = (testLook[2560 + i] >> 8) ^ defaultTable[testLook[2560 + i] & 0xFF];
testLook[3072 + i] = (testLook[2816 + i] >> 8) ^ defaultTable[testLook[2816 + i] & 0xFF];
testLook[3328 + i] = (testLook[3072 + i] >> 8) ^ defaultTable[testLook[3072 + i] & 0xFF];
testLook[3584 + i] = (testLook[3328 + i] >> 8) ^ defaultTable[testLook[3328 + i] & 0xFF];
testLook[3840 + i] = (testLook[3584 + i] >> 8) ^ defaultTable[testLook[3584 + i] & 0xFF];
}
secondTablePop = true;
}
return defaultTable;
}
var createTable = new uint[256];
for (uint i = 0; i < 256; i++)
{
var entry = i;
for (var j = 0; j < 8; j++)
entry = ((entry & 1) == 1) ? (entry >> 1) ^ polynomial : (entry >> 1);
createTable[i] = entry;
}
return createTable;
}
private static uint CalculateHash(uint[] table, uint seed, byte[] buffer, int start, int size)
{
var crc = seed;
for (var i = start; i < size - start; i++)
crc = (crc >> 8) ^ table[buffer[i] ^ crc & 0xff];
return crc;
}
public static unsafe uint CalculateBasicHash(ref uint seed, ref byte[] buffer, int offset, int size)
{
uint crc = seed;
int i = offset;
fixed (byte* byteP = buffer)
fixed (uint* byteT = testLook)
{
while (size >= 16)
{
uint one = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24)) ^ crc;
uint two = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
uint three = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24));
uint four = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
crc = byteT[3840 + (one & 0xFF)] ^
byteT[3584 + ((one >> 8) & 0xFF)] ^
byteT[3328 + ((one >> 16) & 0xFF)] ^
byteT[3072 + ((one >> 24) & 0xFF)] ^
byteT[2816 + (two & 0xFF)] ^
byteT[2560 + ((two >> 8) & 0xFF)] ^
byteT[2304 + ((two >> 16) & 0xFF)] ^
byteT[2048 + ((two >> 24) & 0xFF)] ^
byteT[1792 + (three & 0xFF)] ^
byteT[1536 + ((three >> 8) & 0xFF)] ^
byteT[1280 + ((three >> 16) & 0xFF)] ^
byteT[1024 + ((three >> 24) & 0xFF)] ^
byteT[768 + (four & 0xFF)] ^
byteT[512 + ((four >> 8) & 0xFF)] ^
byteT[256 + ((four >> 16) & 0xFF)] ^
byteT[(four >> 24) & 0xFF];
size -= 16;
}
while (size >= 8)
{
uint one8 = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24)) ^ crc;
uint two8 = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
crc = byteT[1792 + (one8 & 0xFF)] ^
byteT[1536 + ((one8 >> 8) & 0xFF)] ^
byteT[1280 + ((one8 >> 16) & 0xFF)] ^
byteT[1024 + (one8 >> 24)] ^
byteT[768 + (two8 & 0xFF)] ^
byteT[512 + ((two8 >> 8) & 0xFF)] ^
byteT[256 + ((two8 >> 16) & 0xFF)] ^
byteT[two8 >> 24];
size -= 8;
}
while (--size >= 0)
{
crc = (crc >> 8) ^ byteT[(crc & 0xFF) ^ byteP[i++]];// i++;
}
}
return crc;
}
public static unsafe uint CalculateFasterBTHash(ref uint seed, ref byte[] buffer, ref int start, ref int size)
{
/*uint crc = seed;
for (int i = start; i < size + start; i++)
crc = (crc >> 8) ^ defaultTable[buffer[i] ^ crc & 0xff];
return crc;
*/
uint crc = seed;
int i = start;
int bufsize = size;
//while (bufsize >= 16)
fixed (byte* byteP = buffer)
fixed (uint* byteT = testLook)
{
for (int j = 0; j < 4; j++)
{
uint one = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24)) ^ crc;
uint two = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
uint three = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24));
uint four = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
crc = byteT[3840+(one & 0xFF)] ^
byteT[3584+((one >> 8) & 0xFF)] ^
byteT[3328+((one >> 16) & 0xFF)] ^
byteT[3072+((one >> 24) & 0xFF)] ^
byteT[2816+(two & 0xFF)] ^
byteT[2560+((two >> 8) & 0xFF)] ^
byteT[2304+((two >> 16) & 0xFF)] ^
byteT[2048+((two >> 24) & 0xFF)] ^
byteT[1792+(three & 0xFF)] ^
byteT[1536+((three >> 8) & 0xFF)] ^
byteT[1280+((three >> 16) & 0xFF)] ^
byteT[1024+((three >> 24) & 0xFF)] ^
byteT[768+(four & 0xFF)] ^
byteT[512+((four >> 8) & 0xFF)] ^
byteT[256+((four >> 16) & 0xFF)] ^
byteT[(four >> 24) & 0xFF];
bufsize -= 16;
}
//while (bufsize >= 8)
//if (bufsize >= 8)
uint one8 = (byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24)) ^ crc;
uint two8 = byteP[i++] |
(uint)(byteP[i++] << 8) |
(uint)(byteP[i++] << 16) |
(uint)(byteP[i++] << 24);
crc = byteT[1792+(one8 & 0xFF)] ^
byteT[1536+((one8 >> 8) & 0xFF)] ^
byteT[1280+((one8 >> 16) & 0xFF)] ^
byteT[1024+(one8 >> 24)] ^
byteT[768+(two8 & 0xFF)] ^
byteT[512+((two8 >> 8) & 0xFF)] ^
byteT[256+((two8 >> 16) & 0xFF)] ^
byteT[two8 >> 24];
bufsize -= 8;
/*crc ^= buffer[i++] |
(uint)(buffer[i++] << 8) |
(uint)(buffer[i++] << 16) |
(uint)(buffer[i++] << 24);// i = i + 4;
//crc ^= buffer[i];
crc = secondLook[3, (crc & 0xFF)] ^
secondLook[2, ((crc >> 8) & 0xFF)] ^
secondLook[1, ((crc >> 16) & 0xFF)] ^
defaultTable[crc >> 24];
bufsize -= 4;
*/
//while (--bufsize >= 0)
//{
crc = (crc >> 8) ^ byteT[(crc & 0xFF) ^ byteP[i++]];// i++;
crc = (crc >> 8) ^ byteT[(crc & 0xFF) ^ byteP[i++]];// i++;
//}
}
return crc;
}
private static byte[] UintToBigEndianBytes(uint uint32)
{
var result = BitConverter.GetBytes(uint32);
if (BitConverter.IsLittleEndian)
Array.Reverse(result);
return result;
}
}
}

View File

@ -0,0 +1,266 @@
using System;
using System.Runtime.InteropServices;
using DS4Windows.DS4Library.CoreAudio;
namespace DS4Windows.DS4Library
{
public class DS4Audio : IAudioEndpointVolumeCallback
{
private IAudioEndpointVolume endpointVolume;
private static Guid IID_IAudioEndpointVolume = new Guid("5CDF2C82-841E-4546-9722-0CF74078229A");
private static readonly PropertyKey PKEY_Device_FriendlyName =
new PropertyKey(new Guid(unchecked((int)0xa45c254e), unchecked((short)0xdf1c), 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0), 14);
public uint vol;
public uint Volume
{
get
{
return vol;
}
}
public uint getVolume()
{
return vol;
}
public void RefreshVolume()
{
float pfLevel = 0;
if (endpointVolume != null)
endpointVolume.GetMasterVolumeLevelScalar(out pfLevel);
vol = Convert.ToUInt32((75 - 20) * (--pfLevel * pfLevel * pfLevel + 1) + 20);
}
public void OnNotify(IntPtr pNotify)
{
RefreshVolume();
}
public DS4Audio(DataFlow audioFlags = DataFlow.Render)
{
var audioEnumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
IMMDeviceCollection audioDevices;
audioEnumerator.EnumAudioEndpoints(audioFlags, DeviceState.Active, out audioDevices);
int numAudioDevices;
Marshal.ThrowExceptionForHR(audioDevices.GetCount(out numAudioDevices));
for (int deviceNumber = 0; deviceNumber < numAudioDevices; ++deviceNumber)
{
IMMDevice audioDevice;
Marshal.ThrowExceptionForHR(audioDevices.Item(deviceNumber, out audioDevice));
string deviceName = GetAudioDeviceName(ref audioDevice);
if (deviceName.Contains("DUALSHOCK®4 USB Wireless Adaptor"))
{
object interfacePointer;
Marshal.ThrowExceptionForHR(audioDevice.Activate(ref IID_IAudioEndpointVolume, ClsCtx.ALL, IntPtr.Zero, out interfacePointer));
endpointVolume = interfacePointer as IAudioEndpointVolume;
endpointVolume.RegisterControlChangeNotify(this);
}
else if (deviceName.Contains("Wireless Controller"))
{
object interfacePointer;
Marshal.ThrowExceptionForHR(audioDevice.Activate(ref IID_IAudioEndpointVolume, ClsCtx.ALL, IntPtr.Zero, out interfacePointer));
endpointVolume = interfacePointer as IAudioEndpointVolume;
endpointVolume.RegisterControlChangeNotify(this);
}
RefreshVolume();
Marshal.ReleaseComObject(audioDevice);
}
Marshal.ReleaseComObject(audioDevices);
Marshal.ReleaseComObject(audioEnumerator);
}
~DS4Audio()
{
if (endpointVolume != null)
{
endpointVolume.UnregisterControlChangeNotify(this);
Marshal.ReleaseComObject(endpointVolume);
endpointVolume = null;
}
}
private string GetAudioDeviceName(ref IMMDevice audioDevice)
{
IPropertyStore propertyStore;
Marshal.ThrowExceptionForHR(audioDevice.OpenPropertyStore(StorageAccessMode.Read, out propertyStore));
int numProperties;
Marshal.ThrowExceptionForHR(propertyStore.GetCount(out numProperties));
string deviceName = String.Empty;
for (int propertyNum = 0; propertyNum < numProperties; ++propertyNum)
{
PropertyKey propertyKey;
Marshal.ThrowExceptionForHR(propertyStore.GetAt(propertyNum, out propertyKey));
if ((propertyKey.formatId == PKEY_Device_FriendlyName.formatId) && (propertyKey.propertyId == PKEY_Device_FriendlyName.propertyId))
{
PropVariant propertyValue;
Marshal.ThrowExceptionForHR(propertyStore.GetValue(ref propertyKey, out propertyValue));
deviceName = Marshal.PtrToStringUni(propertyValue.pointerValue);
break;
}
}
Marshal.ReleaseComObject(propertyStore);
return deviceName;
}
}
}
namespace DS4Windows.DS4Library.CoreAudio
{
public enum DataFlow
{
Render,
Capture,
All
};
[Flags]
public enum DeviceState
{
Active = 0x00000001,
Disabled = 0x00000002,
NotPresent = 0x00000004,
Unplugged = 0x00000008,
All = 0x0000000F
}
enum StorageAccessMode
{
Read,
Write,
ReadWrite
}
[Flags]
public enum ClsCtx
{
INPROC_SERVER = 0x1,
INPROC_HANDLER = 0x2,
LOCAL_SERVER = 0x4,
INPROC_SERVER16 = 0x8,
REMOTE_SERVER = 0x10,
INPROC_HANDLER16 = 0x20,
NO_CODE_DOWNLOAD = 0x400,
NO_CUSTOM_MARSHAL = 0x1000,
ENABLE_CODE_DOWNLOAD = 0x2000,
NO_FAILURE_LOG = 0x4000,
DISABLE_AAA = 0x8000,
ENABLE_AAA = 0x10000,
FROM_DEFAULT_CONTEXT = 0x20000,
ACTIVATE_32_BIT_SERVER = 0x40000,
ACTIVATE_64_BIT_SERVER = 0x80000,
ENABLE_CLOAKING = 0x100000,
PS_DLL = unchecked((int)0x80000000),
INPROC = INPROC_SERVER | INPROC_HANDLER,
SERVER = INPROC_SERVER | LOCAL_SERVER | REMOTE_SERVER,
ALL = SERVER | INPROC_HANDLER
}
public struct PropertyKey
{
public Guid formatId;
public int propertyId;
public PropertyKey(Guid formatId, int propertyId)
{
this.formatId = formatId;
this.propertyId = propertyId;
}
}
[StructLayout(LayoutKind.Explicit)]
public struct PropVariant
{
[FieldOffset(0)] private short vt;
[FieldOffset(2)] private short wReserved1;
[FieldOffset(4)] private short wReserved2;
[FieldOffset(6)] private short wReserved3;
[FieldOffset(8)] public IntPtr pointerValue;
}
[Guid("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IPropertyStore
{
int GetCount(out int propCount);
int GetAt(int property, out PropertyKey key);
int GetValue(ref PropertyKey key, out PropVariant value);
int SetValue(ref PropertyKey key, ref PropVariant value);
int Commit();
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice
{
int Activate(ref Guid id, ClsCtx clsCtx, IntPtr activationParams,
[MarshalAs(UnmanagedType.IUnknown)] out object interfacePointer);
int OpenPropertyStore(StorageAccessMode stgmAccess, out IPropertyStore properties);
int GetId([MarshalAs(UnmanagedType.LPWStr)] out string id);
}
[Guid("0BD7A1BE-7A1A-44DB-8397-CC5392387B5E"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceCollection
{
int GetCount(out int numDevices);
int Item(int deviceNumber, out IMMDevice device);
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator
{
int EnumAudioEndpoints(DataFlow dataFlow, DeviceState stateMask, out IMMDeviceCollection devices);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]
class MMDeviceEnumeratorComObject
{
}
[Guid("657804FA-D6AD-4496-8A60-352752AF4F89"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IAudioEndpointVolumeCallback
{
void OnNotify(IntPtr notifyData);
};
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IAudioEndpointVolume
{
int RegisterControlChangeNotify(IAudioEndpointVolumeCallback pNotify);
int UnregisterControlChangeNotify(IAudioEndpointVolumeCallback pNotify);
int GetChannelCount(out int pnChannelCount);
int SetMasterVolumeLevel(float fLevelDB, ref Guid pguidEventContext);
int SetMasterVolumeLevelScalar(float fLevel, ref Guid pguidEventContext);
int GetMasterVolumeLevel(out float pfLevelDB);
int GetMasterVolumeLevelScalar(out float pfLevel);
int SetChannelVolumeLevel(uint nChannel, float fLevelDB, ref Guid pguidEventContext);
int SetChannelVolumeLevelScalar(uint nChannel, float fLevel, ref Guid pguidEventContext);
int GetChannelVolumeLevel(uint nChannel, out float pfLevelDB);
int GetChannelVolumeLevelScalar(uint nChannel, out float pfLevel);
int SetMute([MarshalAs(UnmanagedType.Bool)] Boolean bMute, ref Guid pguidEventContext);
int GetMute(out bool pbMute);
int GetVolumeStepInfo(out uint pnStep, out uint pnStepCount);
int VolumeStepUp(ref Guid pguidEventContext);
int VolumeStepDown(ref Guid pguidEventContext);
int QueryHardwareSupport(out uint pdwHardwareSupportMask);
int GetVolumeRange(out float pflVolumeMindB, out float pflVolumeMaxdB, out float pflVolumeIncrementdB);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -7,11 +7,42 @@ using System.Security.Principal;
namespace DS4Windows
{
public class VidPidInfo
{
public readonly int vid;
public readonly int pid;
internal VidPidInfo(int vid, int pid)
{
this.vid = vid;
this.pid = pid;
}
}
public class DS4Devices
{
// (HID device path, DS4Device)
private static Dictionary<string, DS4Device> Devices = new Dictionary<string, DS4Device>();
private static HashSet<String> DevicePaths = new HashSet<String>();
private static HashSet<string> deviceSerials = new HashSet<string>();
private static HashSet<string> DevicePaths = new HashSet<string>();
// Keep instance of opened exclusive mode devices not in use (Charging while using BT connection)
private static List<HidDevice> DisabledDevices = new List<HidDevice>();
private static Stopwatch sw = new Stopwatch();
public static bool isExclusiveMode = false;
internal const int SONY_VID = 0x054C;
internal const int RAZER_VID = 0x1532;
internal const int NACON_VID = 0x146B;
internal const int HORI_VID = 0x0F0D;
private static VidPidInfo[] knownDevices =
{
new VidPidInfo(SONY_VID, 0xBA0),
new VidPidInfo(SONY_VID, 0x5C4),
new VidPidInfo(SONY_VID, 0x09CC),
new VidPidInfo(RAZER_VID, 0x1000),
new VidPidInfo(NACON_VID, 0x0D01),
new VidPidInfo(HORI_VID, 0x00EE), // Hori PS4 Mini Wired Gamepad
new VidPidInfo(0x7545, 0x0104)
};
private static string devicePathToInstanceId(string devicePath)
{
@ -23,23 +54,35 @@ namespace DS4Windows
{
deviceInstanceId = deviceInstanceId.Remove(deviceInstanceId.Length - 1);
}
return deviceInstanceId;
}
//enumerates ds4 controllers in the system
// Enumerates ds4 controllers in the system
public static void findControllers()
{
lock (Devices)
{
int[] pid = { 0xBA0, 0x5C4, 0x09CC };
IEnumerable<HidDevice> hDevices = HidDevices.Enumerate(0x054C, pid);
IEnumerable<HidDevice> hDevices = HidDevices.EnumerateDS4(knownDevices);
// Sort Bluetooth first in case USB is also connected on the same controller.
hDevices = hDevices.OrderBy<HidDevice, ConnectionType>((HidDevice d) => { return DS4Device.HidConnectionType(d); });
foreach (HidDevice hDevice in hDevices)
List<HidDevice> tempList = hDevices.ToList();
purgeHiddenExclusiveDevices();
tempList.AddRange(DisabledDevices);
int devCount = tempList.Count();
string devicePlural = "device" + (devCount == 0 || devCount > 1 ? "s" : "");
//Log.LogToGui("Found " + devCount + " possible " + devicePlural + ". Examining " + devicePlural + ".", false);
for (int i = 0; i < devCount; i++)
//foreach (HidDevice hDevice in hDevices)
{
if (DevicePaths.Contains(hDevice.DevicePath))
HidDevice hDevice = tempList[i];
if (hDevice.Description == "HID-compliant vendor-defined device")
continue; // ignore the Nacon Revolution Pro programming interface
else if (DevicePaths.Contains(hDevice.DevicePath))
continue; // BT/USB endpoint already open once
if (!hDevice.IsOpen)
{
hDevice.OpenDevice(isExclusiveMode);
@ -59,6 +102,7 @@ namespace DS4Windows
startInfo.Verb = "runas";
startInfo.Arguments = "re-enabledevice " + devicePathToInstanceId(hDevice.DevicePath);
Process child = Process.Start(startInfo);
if (!child.WaitForExit(5000))
{
child.Kill();
@ -81,41 +125,42 @@ namespace DS4Windows
if (isExclusiveMode && !hDevice.IsOpen)
hDevice.OpenDevice(false);
}
if (hDevice.IsOpen)
{
if (Devices.ContainsKey(hDevice.readSerial()))
continue; // happens when the BT endpoint already is open and the USB is plugged into the same host
string serial = hDevice.readSerial();
bool validSerial = !serial.Equals(DS4Device.blankSerial);
if (validSerial && deviceSerials.Contains(serial))
{
// happens when the BT endpoint already is open and the USB is plugged into the same host
if (isExclusiveMode && hDevice.IsExclusive &&
!DisabledDevices.Contains(hDevice))
{
// Grab reference to exclusively opened HidDevice so device
// stays hidden to other processes
DisabledDevices.Add(hDevice);
//DevicePaths.Add(hDevice.DevicePath);
}
continue;
}
else
{
DS4Device ds4Device = new DS4Device(hDevice);
ds4Device.Removal += On_Removal;
Devices.Add(ds4Device.MacAddress, ds4Device);
DevicePaths.Add(hDevice.DevicePath);
ds4Device.StartUpdate();
//ds4Device.Removal += On_Removal;
if (!ds4Device.ExitOutputThread)
{
Devices.Add(hDevice.DevicePath, ds4Device);
DevicePaths.Add(hDevice.DevicePath);
deviceSerials.Add(serial);
}
}
}
}
}
}
//allows to get DS4Device by specifying unique MAC address
//format for MAC address is XX:XX:XX:XX:XX:XX
public static DS4Device getDS4Controller(string mac)
{
lock (Devices)
{
DS4Device device = null;
try
{
Devices.TryGetValue(mac, out device);
}
catch (ArgumentNullException) { }
return device;
}
}
//returns DS4 controllers that were found and are running
// Returns DS4 controllers that were found and are running
public static IEnumerable<DS4Device> getDS4Controllers()
{
lock (Devices)
@ -131,25 +176,105 @@ namespace DS4Windows
lock (Devices)
{
IEnumerable<DS4Device> devices = getDS4Controllers();
foreach (DS4Device device in devices)
//foreach (DS4Device device in devices)
for (int i = 0, devCount = devices.Count(); i < devCount; i++)
{
DS4Device device = devices.ElementAt(i);
device.StopUpdate();
//device.runRemoval();
device.HidDevice.CloseDevice();
}
Devices.Clear();
DevicePaths.Clear();
deviceSerials.Clear();
DisabledDevices.Clear();
}
}
//called when devices is diconnected, timed out or has input reading failure
// Called when devices is diconnected, timed out or has input reading failure
public static void On_Removal(object sender, EventArgs e)
{
DS4Device device = (DS4Device)sender;
RemoveDevice(device);
}
public static void RemoveDevice(DS4Device device)
{
lock (Devices)
{
if (device != null)
{
device.HidDevice.CloseDevice();
Devices.Remove(device.HidDevice.DevicePath);
DevicePaths.Remove(device.HidDevice.DevicePath);
deviceSerials.Remove(device.MacAddress);
//purgeHiddenExclusiveDevices();
}
}
}
public static void UpdateSerial(object sender, EventArgs e)
{
lock (Devices)
{
DS4Device device = (DS4Device)sender;
device.HidDevice.CloseDevice();
Devices.Remove(device.MacAddress);
DevicePaths.Remove(device.HidDevice.DevicePath);
if (device != null)
{
string devPath = device.HidDevice.DevicePath;
string serial = device.getMacAddress();
if (Devices.ContainsKey(devPath))
{
deviceSerials.Remove(serial);
device.updateSerial();
serial = device.getMacAddress();
if (DS4Device.isValidSerial(serial))
{
deviceSerials.Add(serial);
}
device.refreshCalibration();
}
}
}
}
private static void purgeHiddenExclusiveDevices()
{
int disabledDevCount = DisabledDevices.Count;
if (disabledDevCount > 0)
{
List<HidDevice> disabledDevList = new List<HidDevice>();
for (int i = 0, arlen = disabledDevCount; i < arlen; i++)
{
HidDevice tempDev = DisabledDevices.ElementAt(i);
if (tempDev != null)
{
if (tempDev.IsOpen && tempDev.IsConnected)
{
disabledDevList.Add(tempDev);
}
else if (tempDev.IsOpen)
{
if (!tempDev.IsConnected)
{
try
{
tempDev.CloseDevice();
}
catch { }
}
if (DevicePaths.Contains(tempDev.DevicePath))
{
DevicePaths.Remove(tempDev.DevicePath);
}
}
}
}
DisabledDevices.Clear();
DisabledDevices.AddRange(disabledDevList);
}
}
@ -184,10 +309,24 @@ namespace DS4Windows
throw new Exception("Error setting class install params, error code = " + Marshal.GetLastWin32Error());
}
success = NativeMethods.SetupDiCallClassInstaller(NativeMethods.DIF_PROPERTYCHANGE, deviceInfoSet, ref deviceInfoData);
if (!success)
// TEST: If previous SetupDiCallClassInstaller fails, just continue
// otherwise device will likely get permanently disabled.
/*if (!success)
{
throw new Exception("Error disabling device, error code = " + Marshal.GetLastWin32Error());
}
*/
//System.Threading.Thread.Sleep(50);
sw.Restart();
while (sw.ElapsedMilliseconds < 50)
{
// Use SpinWait to keep control of current thread. Using Sleep could potentially
// cause other events to get run out of order
System.Threading.Thread.SpinWait(100);
}
sw.Stop();
propChangeParams.stateChange = NativeMethods.DICS_ENABLE;
success = NativeMethods.SetupDiSetClassInstallParams(deviceInfoSet, ref deviceInfoData, ref propChangeParams, Marshal.SizeOf(propChangeParams));
if (!success)
@ -200,6 +339,16 @@ namespace DS4Windows
throw new Exception("Error enabling device, error code = " + Marshal.GetLastWin32Error());
}
//System.Threading.Thread.Sleep(50);
sw.Restart();
while (sw.ElapsedMilliseconds < 50)
{
// Use SpinWait to keep control of current thread. Using Sleep could potentially
// cause other events to get run out of order
System.Threading.Thread.SpinWait(100);
}
sw.Stop();
NativeMethods.SetupDiDestroyDeviceInfoList(deviceInfoSet);
}
}

View File

@ -1,107 +1,247 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DS4Windows
{
public class SixAxisEventArgs : EventArgs
{
public readonly SixAxis sixAxis;
public readonly System.DateTime timeStamp;
public SixAxisEventArgs(System.DateTime utcTimestamp, SixAxis sa)
public readonly DateTime timeStamp;
public SixAxisEventArgs(DateTime utcTimestamp, SixAxis sa)
{
sixAxis = sa;
this.timeStamp = utcTimestamp;
timeStamp = utcTimestamp;
}
}
public class SixAxis
{
public readonly int gyroX, gyroY, gyroZ, deltaX, deltaY, deltaZ, accelX, accelY, accelZ;
public readonly byte touchID;
public readonly SixAxis previousAxis;
public SixAxis(int X, int Y, int Z, int aX, int aY, int aZ, SixAxis prevAxis = null)
public const int ACC_RES_PER_G = 8192;
private const float F_ACC_RES_PER_G = ACC_RES_PER_G;
public const int GYRO_RES_IN_DEG_SEC = 16;
private const float F_GYRO_RES_IN_DEG_SEC = GYRO_RES_IN_DEG_SEC;
public int gyroYaw, gyroPitch, gyroRoll, accelX, accelY, accelZ;
public int outputAccelX, outputAccelY, outputAccelZ;
public double accelXG, accelYG, accelZG;
public double angVelYaw, angVelPitch, angVelRoll;
public int gyroYawFull, gyroPitchFull, gyroRollFull;
public int accelXFull, accelYFull, accelZFull;
public double elapsed;
public SixAxis previousAxis = null;
private double tempDouble = 0d;
public SixAxis(int X, int Y, int Z,
int aX, int aY, int aZ,
double elapsedDelta, SixAxis prevAxis = null)
{
gyroX = X;
gyroY = Y;
gyroZ = Z;
accelX = aX;
accelY = aY;
accelZ = aZ;
previousAxis = prevAxis;
if (previousAxis != null)
{
deltaX = X - previousAxis.gyroX;
deltaY = Y - previousAxis.gyroY;
deltaZ = Z - previousAxis.gyroZ;
}
populate(X, Y, Z, aX, aY, aZ, elapsedDelta, prevAxis);
}
public void copy(SixAxis src)
{
gyroYaw = src.gyroYaw;
gyroPitch = src.gyroPitch;
gyroRoll = src.gyroRoll;
gyroYawFull = src.gyroYawFull;
accelXFull = src.accelXFull; accelYFull = src.accelYFull; accelZFull = src.accelZFull;
angVelYaw = src.angVelYaw;
angVelPitch = src.angVelPitch;
angVelRoll = src.angVelRoll;
accelXG = src.accelXG;
accelYG = src.accelYG;
accelZG = src.accelZG;
// Put accel ranges between 0 - 128 abs
accelX = src.accelX;
accelY = src.accelY;
accelZ = src.accelZ;
outputAccelX = accelX;
outputAccelY = accelY;
outputAccelZ = accelZ;
elapsed = src.elapsed;
previousAxis = src.previousAxis;
}
public void populate(int X, int Y, int Z,
int aX, int aY, int aZ,
double elapsedDelta, SixAxis prevAxis = null)
{
gyroYaw = -X / 256;
gyroPitch = Y / 256;
gyroRoll = -Z / 256;
gyroYawFull = -X; gyroPitchFull = Y; gyroRollFull = -Z;
accelXFull = -aX; accelYFull = -aY; accelZFull = aZ;
angVelYaw = gyroYawFull / F_GYRO_RES_IN_DEG_SEC;
angVelPitch = gyroPitchFull / F_GYRO_RES_IN_DEG_SEC;
angVelRoll = gyroRollFull / F_GYRO_RES_IN_DEG_SEC;
accelXG = tempDouble = accelXFull / F_ACC_RES_PER_G;
accelYG = tempDouble = accelYFull / F_ACC_RES_PER_G;
accelZG = tempDouble = accelZFull / F_ACC_RES_PER_G;
// Put accel ranges between 0 - 128 abs
accelX = -aX / 64;
accelY = -aY / 64;
accelZ = aZ / 64;
outputAccelX = accelX;
outputAccelY = accelY;
outputAccelZ = accelZ;
elapsed = elapsedDelta;
previousAxis = prevAxis;
}
}
internal class CalibData
{
public int bias;
public int sensNumer;
public int sensDenom;
public const int GyroPitchIdx = 0, GyroYawIdx = 1, GyroRollIdx = 2,
AccelXIdx = 3, AccelYIdx = 4, AccelZIdx = 5;
}
public class DS4SixAxis
{
public event EventHandler<SixAxisEventArgs> SixAxisMoved = null; // deltaX/deltaY are set because one or both fingers were already down on a prior sensor reading
public event EventHandler<SixAxisEventArgs> SixAccelMoved = null; // no status change for the touchpad itself... but other sensors may have changed, or you may just want to do some processing
public event EventHandler<SixAxisEventArgs> SixAccelMoved = null;
private SixAxis sPrev = null, now = null;
private CalibData[] calibrationData = new CalibData[6] { new CalibData(), new CalibData(),
new CalibData(), new CalibData(), new CalibData(), new CalibData()
};
internal int lastGyroX, lastGyroY, lastGyroZ, lastAX, lastAY, lastAZ; // tracks 0, 1 or 2 touches; we maintain touch 1 and 2 separately
internal byte[] previousPacket = new byte[8];
public void handleSixaxis(byte[] gyro, byte[] accel, DS4State state)
public DS4SixAxis()
{
//bool touchPadIsDown = sensors.TouchButton;
/*if (!PacketChanged(data, touchPacketOffset) && touchPadIsDown == lastTouchPadIsDown)
{
if (SixAxisUnchanged != null)
SixAxisUnchanged(this, EventArgs.Empty);
return;
}*/
/* byte touchID1 = (byte)(data[0 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);
byte touchID2 = (byte)(data[4 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);*/
int currentX = (short)((ushort)(gyro[0] << 8) | gyro[1]) / 64;
int currentY = (short)((ushort)(gyro[2] << 8) | gyro[3]) / 64;
int currentZ = (short)((ushort)(gyro[4] << 8) | gyro[5]) / 64;
int AccelX = (short)((ushort)(accel[2] << 8) | accel[3]) / 256;
int AccelY = (short)((ushort)(accel[0] << 8) | accel[1]) / 256;
int AccelZ = (short)((ushort)(accel[4] << 8) | accel[5]) / 256;
SixAxisEventArgs args;
//if (sensors.Touch1 || sensors.Touch2)
{
/* if (SixAxisMoved != null)
{
SixAxis sPrev, now;
sPrev = new SixAxis(lastGyroX, lastGyroY, lastGyroZ, lastAX,lastAY,lastAZ);
now = new SixAxis(currentX, currentY, currentZ, AccelX, AccelY, AccelZ, sPrev);
args = new SixAxisEventArgs(state.ReportTimeStamp, now);
SixAxisMoved(this, args);
}
sPrev = new SixAxis(0, 0, 0, 0, 0, 0, 0.0);
now = new SixAxis(0, 0, 0, 0, 0, 0, 0.0);
}
lastGyroX = currentX;
lastGyroY = currentY;
lastGyroZ = currentZ;
lastAX = AccelX;
lastAY = AccelY;
lastAZ = AccelZ;*/
int temInt = 0;
public void setCalibrationData(ref byte[] calibData, bool fromUSB)
{
int pitchPlus, pitchMinus, yawPlus, yawMinus, rollPlus, rollMinus,
accelXPlus, accelXMinus, accelYPlus, accelYMinus, accelZPlus, accelZMinus,
gyroSpeedPlus, gyroSpeedMinus;
calibrationData[0].bias = (short)((ushort)(calibData[2] << 8) | calibData[1]);
calibrationData[1].bias = (short)((ushort)(calibData[4] << 8) | calibData[3]);
calibrationData[2].bias = (short)((ushort)(calibData[6] << 8) | calibData[5]);
if (!fromUSB)
{
pitchPlus = temInt = (short)((ushort)(calibData[8] << 8) | calibData[7]);
yawPlus = temInt = (short)((ushort)(calibData[10] << 8) | calibData[9]);
rollPlus = temInt = (short)((ushort)(calibData[12] << 8) | calibData[11]);
pitchMinus = temInt = (short)((ushort)(calibData[14] << 8) | calibData[13]);
yawMinus = temInt = (short)((ushort)(calibData[16] << 8) | calibData[15]);
rollMinus = temInt = (short)((ushort)(calibData[18] << 8) | calibData[17]);
}
else
{
pitchPlus = temInt = (short)((ushort)(calibData[8] << 8) | calibData[7]);
pitchMinus = temInt = (short)((ushort)(calibData[10] << 8) | calibData[9]);
yawPlus = temInt = (short)((ushort)(calibData[12] << 8) | calibData[11]);
yawMinus = temInt = (short)((ushort)(calibData[14] << 8) | calibData[13]);
rollPlus = temInt = (short)((ushort)(calibData[16] << 8) | calibData[15]);
rollMinus = temInt = (short)((ushort)(calibData[18] << 8) | calibData[17]);
}
gyroSpeedPlus = temInt = (short)((ushort)(calibData[20] << 8) | calibData[19]);
gyroSpeedMinus = temInt = (short)((ushort)(calibData[22] << 8) | calibData[21]);
accelXPlus = temInt = (short)((ushort)(calibData[24] << 8) | calibData[23]);
accelXMinus = temInt = (short)((ushort)(calibData[26] << 8) | calibData[25]);
accelYPlus = temInt = (short)((ushort)(calibData[28] << 8) | calibData[27]);
accelYMinus = temInt = (short)((ushort)(calibData[30] << 8) | calibData[29]);
accelZPlus = temInt = (short)((ushort)(calibData[32] << 8) | calibData[31]);
accelZMinus = temInt = (short)((ushort)(calibData[34] << 8) | calibData[33]);
int gyroSpeed2x = temInt = (gyroSpeedPlus + gyroSpeedMinus);
calibrationData[0].sensNumer = gyroSpeed2x* SixAxis.GYRO_RES_IN_DEG_SEC;
calibrationData[0].sensDenom = pitchPlus - pitchMinus;
calibrationData[1].sensNumer = gyroSpeed2x* SixAxis.GYRO_RES_IN_DEG_SEC;
calibrationData[1].sensDenom = yawPlus - yawMinus;
calibrationData[2].sensNumer = gyroSpeed2x* SixAxis.GYRO_RES_IN_DEG_SEC;
calibrationData[2].sensDenom = rollPlus - rollMinus;
int accelRange = temInt = accelXPlus - accelXMinus;
calibrationData[3].bias = accelXPlus - accelRange / 2;
calibrationData[3].sensNumer = 2 * SixAxis.ACC_RES_PER_G;
calibrationData[3].sensDenom = accelRange;
accelRange = temInt = accelYPlus - accelYMinus;
calibrationData[4].bias = accelYPlus - accelRange / 2;
calibrationData[4].sensNumer = 2 * SixAxis.ACC_RES_PER_G;
calibrationData[4].sensDenom = accelRange;
accelRange = temInt = accelZPlus - accelZMinus;
calibrationData[5].bias = accelZPlus - accelRange / 2;
calibrationData[5].sensNumer = 2 * SixAxis.ACC_RES_PER_G;
calibrationData[5].sensDenom = accelRange;
}
private void applyCalibs(ref int yaw, ref int pitch, ref int roll,
ref int accelX, ref int accelY, ref int accelZ)
{
CalibData current = calibrationData[0];
temInt = pitch - current.bias;
pitch = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
current = calibrationData[1];
temInt = yaw - current.bias;
yaw = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
current = calibrationData[2];
temInt = roll - current.bias;
roll = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
current = calibrationData[3];
temInt = accelX - current.bias;
accelX = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
current = calibrationData[4];
temInt = accelY - current.bias;
accelY = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
current = calibrationData[5];
temInt = accelZ - current.bias;
accelZ = temInt = (int)(temInt * (current.sensNumer / (float)current.sensDenom));
}
public void handleSixaxis(byte[] gyro, byte[] accel, DS4State state,
double elapsedDelta)
{
int currentYaw = (short)((ushort)(gyro[3] << 8) | gyro[2]);
int currentPitch = (short)((ushort)(gyro[1] << 8) | gyro[0]);
int currentRoll = (short)((ushort)(gyro[5] << 8) | gyro[4]);
int AccelX = (short)((ushort)(accel[1] << 8) | accel[0]);
int AccelY = (short)((ushort)(accel[3] << 8) | accel[2]);
int AccelZ = (short)((ushort)(accel[5] << 8) | accel[4]);
applyCalibs(ref currentYaw, ref currentPitch, ref currentRoll, ref AccelX, ref AccelY, ref AccelZ);
SixAxisEventArgs args = null;
if (AccelX != 0 || AccelY != 0 || AccelZ != 0)
{
if (SixAccelMoved != null)
{
SixAxis sPrev, now;
sPrev = new SixAxis(lastGyroX, lastGyroY, lastGyroZ, lastAX, lastAY, lastAZ);
now = new SixAxis(currentX, currentY, currentZ, AccelX, AccelY, AccelZ, sPrev);
sPrev.copy(now);
now.populate(currentYaw, currentPitch, currentRoll,
AccelX, AccelY, AccelZ, elapsedDelta, sPrev);
args = new SixAxisEventArgs(state.ReportTimeStamp, now);
state.Motion = now;
SixAccelMoved(this, args);
}
lastGyroX = currentX;
lastGyroY = currentY;
lastGyroZ = currentZ;
lastAX = AccelX;
lastAY = AccelY;
lastAZ = AccelZ;
}
}
}

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DS4Windows
{
@ -11,24 +8,47 @@ namespace DS4Windows
public bool Square, Triangle, Circle, Cross;
public bool DpadUp, DpadDown, DpadLeft, DpadRight;
public bool L1, L3, R1, R3;
public bool Share, Options, PS, Touch1, Touch2, TouchButton, TouchRight, TouchLeft;
public bool Share, Options, PS, Touch1, Touch2, TouchButton, TouchRight,
TouchLeft, Touch1Finger, Touch2Fingers;
public byte Touch1Identifier, Touch2Identifier;
public byte LX, RX, LY, RY, L2, R2;
public byte FrameCounter; // 0, 1, 2...62, 63, 0....
public byte TouchPacketCounter; // we break these out automatically
public byte Battery; // 0 for charging, 10/20/30/40/50/60/70/80/90/100 for percentage of full
public double LSAngle; // Calculated bearing of the LS X,Y coordinates
public double RSAngle; // Calculated bearing of the RS X,Y coordinates
public double LSAngleRad; // Calculated bearing of the LS X,Y coordinates (in radians)
public double RSAngleRad; // Calculated bearing of the RS X,Y coordinates (in radians)
public double LXUnit;
public double LYUnit;
public double RXUnit;
public double RYUnit;
public double elapsedTime = 0.0;
public SixAxis Motion = null;
public static readonly int DEFAULT_AXISDIR_VALUE = 127;
public DS4State()
{
Square = Triangle = Circle = Cross = false;
DpadUp = DpadDown = DpadLeft = DpadRight = false;
L1 = L3 = R1 = R3 = false;
Share = Options = PS = Touch1 = Touch2 = TouchButton = TouchRight = TouchLeft = false;
Share = Options = PS = Touch1 = Touch2 = TouchButton = TouchRight = TouchLeft = false;
Touch1Finger = Touch2Fingers = false;
LX = RX = LY = RY = 127;
L2 = R2 = 0;
FrameCounter = 255; // only actually has 6 bits, so this is a null indicator
TouchPacketCounter = 255; // 8 bits, no great junk value
Battery = 0;
LSAngle = 0.0;
LSAngleRad = 0.0;
RSAngle = 0.0;
RSAngleRad = 0.0;
LXUnit = 0.0;
LYUnit = 0.0;
RXUnit = 0.0;
RYUnit = 0.0;
elapsedTime = 0.0;
Motion = new SixAxis(0, 0, 0, 0, 0, 0, 0.0);
}
public DS4State(DS4State state)
@ -59,12 +79,24 @@ namespace DS4Windows
Touch2Identifier = state.Touch2Identifier;
TouchButton = state.TouchButton;
TouchPacketCounter = state.TouchPacketCounter;
Touch1Finger = state.Touch1Finger;
Touch2Fingers = state.Touch2Fingers;
LX = state.LX;
RX = state.RX;
LY = state.LY;
RY = state.RY;
FrameCounter = state.FrameCounter;
Battery = state.Battery;
LSAngle = state.LSAngle;
LSAngleRad = state.LSAngleRad;
RSAngle = state.RSAngle;
RSAngleRad = state.RSAngleRad;
LXUnit = state.LXUnit;
LYUnit = state.LYUnit;
RXUnit = state.RXUnit;
RYUnit = state.RYUnit;
elapsedTime = state.elapsedTime;
Motion = state.Motion;
}
public DS4State Clone()
@ -100,13 +132,57 @@ namespace DS4Windows
state.TouchRight = TouchRight;
state.TouchButton = TouchButton;
state.TouchPacketCounter = TouchPacketCounter;
state.Touch1Finger = Touch1Finger;
state.Touch2Fingers = Touch2Fingers;
state.LX = LX;
state.RX = RX;
state.LY = LY;
state.RY = RY;
state.FrameCounter = FrameCounter;
state.Battery = Battery;
state.LSAngle = LSAngle;
state.LSAngleRad = LSAngleRad;
state.RSAngle = RSAngle;
state.RSAngleRad = RSAngleRad;
state.LXUnit = LXUnit;
state.LYUnit = LYUnit;
state.RXUnit = RXUnit;
state.RYUnit = RYUnit;
state.elapsedTime = elapsedTime;
state.Motion = Motion;
}
public void calculateStickAngles()
{
double lsangle = Math.Atan2(-(LY - 127), (LX - 127));
LSAngleRad = lsangle;
lsangle = (lsangle >= 0 ? lsangle : (2 * Math.PI + lsangle)) * 180 / Math.PI;
LSAngle = lsangle;
LXUnit = Math.Abs(Math.Cos(LSAngleRad));
LYUnit = Math.Abs(Math.Sin(LSAngleRad));
double rsangle = Math.Atan2(-(RY - 127), (RX - 127));
RSAngleRad = rsangle;
rsangle = (rsangle >= 0 ? rsangle : (2 * Math.PI + rsangle)) * 180 / Math.PI;
RSAngle = rsangle;
RXUnit = Math.Abs(Math.Cos(RSAngleRad));
RYUnit = Math.Abs(Math.Sin(RSAngleRad));
}
public void rotateLSCoordinates(double rotation)
{
double sinAngle = Math.Sin(rotation), cosAngle = Math.Cos(rotation);
double tempLX = LX - 127.5, tempLY = LY - 127.5;
LX = (Byte)(Global.Clamp(-127.5, (tempLX * cosAngle - tempLY * sinAngle), 127.5) + 127.5);
LY = (Byte)(Global.Clamp(-127.5, (tempLX * sinAngle + tempLY * cosAngle), 127.5) + 127.5);
}
public void rotateRSCoordinates(double rotation)
{
double sinAngle = Math.Sin(rotation), cosAngle = Math.Cos(rotation);
double tempRX = RX - 127.5, tempRY = RY - 127.5;
RX = (Byte)(Global.Clamp(-127.5, (tempRX * cosAngle - tempRY * sinAngle), 127.5) + 127.5);
RY = (Byte)(Global.Clamp(-127.5, (tempRX * sinAngle + tempRY * cosAngle), 127.5) + 127.5);
}
}
}

View File

@ -1,20 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DS4Windows
{
public class DS4StateExposed
{
private DS4State _state;
private byte[] accel = new byte[] { 0, 0, 0, 0, 0, 0 },
gyro = new byte[] { 0, 0, 0, 0, 0, 0 };
public DS4StateExposed()
{
_state = new DS4State();
}
public DS4StateExposed(DS4State state)
{
_state = state;
@ -38,6 +33,8 @@ namespace DS4Windows
bool Touch1 { get { return _state.Touch1; } }
bool Touch2 { get { return _state.Touch2; } }
bool TouchButton { get { return _state.TouchButton; } }
bool Touch1Finger { get { return _state.Touch1Finger; } }
bool Touch2Fingers { get { return _state.Touch2Fingers; } }
byte LX { get { return _state.LX; } }
byte RX { get { return _state.RX; } }
byte LY { get { return _state.LY; } }
@ -46,28 +43,58 @@ namespace DS4Windows
byte R2 { get { return _state.R2; } }
int Battery { get { return _state.Battery; } }
/// <summary> Holds raw DS4 input data from 14 to 19 </summary>
public byte[] Accel { set { accel = value; } }
/// <summary> Holds raw DS4 input data from 20 to 25 </summary>
public byte[] Gyro { set { gyro = value; } }
public int GyroYaw { get { return _state.Motion.gyroYaw; } }
public int getGyroYaw()
{
return _state.Motion.gyroYaw;
}
/// <summary> Yaw leftward/counter-clockwise/turn to port or larboard side </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int AccelX { get { return (short)((ushort)(accel[2] << 8) | accel[3]) / 256; } }
/// <summary> Pitch upward/backward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int AccelY { get { return (short)((ushort)(accel[0] << 8) | accel[1] ) / 256; } }
/// <summary> roll left/L side of controller down/starboard raising up </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int AccelZ { get { return (short)((ushort)(accel[4] << 8) | accel[5]) / 256; } }
/// <summary> R side of controller upward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int GyroX { get { return (short)((ushort)(gyro[0] << 8) | gyro[1]) / 64; } }
/// <summary> touchpad and button face side of controller upward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int GyroY { get { return (short)((ushort)(gyro[2] << 8) | gyro[3]) / 64; } }
/// <summary> Audio/expansion ports upward and light bar/shoulders/bumpers/USB port downward </summary>
/// <remarks> Add double the previous result to this delta and divide by three.</remarks>
public int GyroZ { get { return (short)((ushort)(gyro[4] << 8) | gyro[5]) / 64; } }
public int GyroPitch { get { return _state.Motion.gyroPitch; } }
public int getGyroPitch()
{
return _state.Motion.gyroPitch;
}
public int GyroRoll { get { return _state.Motion.gyroRoll; } }
public int getGyroRoll()
{
return _state.Motion.gyroRoll;
}
public int AccelX { get { return _state.Motion.accelX; } }
public int getAccelX()
{
return _state.Motion.accelX;
}
public int AccelY { get { return _state.Motion.accelY; } }
public int getAccelY()
{
return _state.Motion.accelY;
}
public int AccelZ { get { return _state.Motion.accelZ; } }
public int getAccelZ()
{
return _state.Motion.accelZ;
}
public int OutputAccelX { get { return _state.Motion.outputAccelX; } }
public int getOutputAccelX()
{
return _state.Motion.outputAccelX;
}
public int OutputAccelY { get { return _state.Motion.outputAccelY; } }
public int getOutputAccelY()
{
return _state.Motion.outputAccelY;
}
public int OutputAccelZ { get { return _state.Motion.outputAccelZ; } }
public int getOutputAccelZ()
{
return _state.Motion.outputAccelZ;
}
}
}

View File

@ -1,16 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace DS4Windows
{
public class TouchpadEventArgs : EventArgs
{
public readonly Touch[] touches = null;
public readonly System.DateTime timeStamp;
public readonly DateTime timeStamp;
public readonly bool touchButtonPressed;
public TouchpadEventArgs(System.DateTime utcTimestamp, bool tButtonDown, Touch t0, Touch t1 = null)
public TouchpadEventArgs(DateTime utcTimestamp, bool tButtonDown, Touch t0, Touch t1 = null)
{
if (t1 != null)
{
@ -23,17 +20,23 @@ namespace DS4Windows
touches = new Touch[1];
touches[0] = t0;
}
touchButtonPressed = tButtonDown;
this.timeStamp = utcTimestamp;
timeStamp = utcTimestamp;
}
}
public class Touch
{
public readonly int hwX, hwY, deltaX, deltaY;
public readonly byte touchID;
public readonly Touch previousTouch;
public Touch(int X, int Y, byte tID, Touch prevTouch = null)
public int hwX, hwY, deltaX, deltaY;
public byte touchID;
public Touch previousTouch;
internal Touch(int X, int Y, byte tID, Touch prevTouch = null)
{
populate(X, Y, tID, prevTouch);
}
internal void populate(int X, int Y, byte tID, Touch prevTouch = null)
{
hwX = X;
hwY = Y;
@ -55,6 +58,7 @@ namespace DS4Windows
public event EventHandler<TouchpadEventArgs> TouchButtonDown = null; // touchpad pushed down until the button clicks
public event EventHandler<TouchpadEventArgs> TouchButtonUp = null; // touchpad button released
public event EventHandler<EventArgs> TouchUnchanged = null; // no status change for the touchpad itself... but other sensors may have changed, or you may just want to do some processing
public event EventHandler<EventArgs> PreTouchProcess = null; // used to publish that a touch packet is about to be processed
public readonly static int TOUCHPAD_DATA_OFFSET = 35;
internal int lastTouchPadX1, lastTouchPadY1,
@ -63,23 +67,35 @@ namespace DS4Windows
internal bool lastIsActive1, lastIsActive2;
internal byte lastTouchID1, lastTouchID2;
internal byte[] previousPacket = new byte[8];
private Touch tPrev0, tPrev1, t0, t1;
public DS4Touchpad()
{
tPrev0 = new Touch(0, 0, 0);
tPrev1 = new Touch(0, 0, 0);
t0 = new Touch(0, 0, 0);
t1 = new Touch(0, 0, 0);
}
// We check everything other than the not bothering with not-very-useful TouchPacketCounter.
private bool PacketChanged(byte[] data, int touchPacketOffset)
{
bool changed = false;
for (int i = 0; i < previousPacket.Length; i++)
for (int i = 0, arLen = previousPacket.Length; !changed && i < arLen; i++)
{
byte oldValue = previousPacket[i];
previousPacket[i] = data[i + TOUCHPAD_DATA_OFFSET + touchPacketOffset];
if (previousPacket[i] != oldValue)
//byte oldValue = previousPacket[i];
//previousPacket[i] = data[i + TOUCHPAD_DATA_OFFSET + touchPacketOffset];
if (previousPacket[i] != data[i + TOUCHPAD_DATA_OFFSET + touchPacketOffset])
changed = true;
}
return changed;
}
public void handleTouchpad(byte[] data, DS4State sensors, int touchPacketOffset = 0)
{
PreTouchProcess?.Invoke(this, EventArgs.Empty);
bool touchPadIsDown = sensors.TouchButton;
if (!PacketChanged(data, touchPacketOffset) && touchPadIsDown == lastTouchPadIsDown)
{
@ -87,12 +103,14 @@ namespace DS4Windows
TouchUnchanged(this, EventArgs.Empty);
return;
}
Array.Copy(data, TOUCHPAD_DATA_OFFSET + touchPacketOffset, previousPacket, 0, 8);
byte touchID1 = (byte)(data[0 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);
byte touchID2 = (byte)(data[4 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x7F);
int currentX1 = data[1 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] + ((data[2 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF) * 255);
int currentY1 = ((data[2 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF0) >> 4) + (data[3 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] * 16);
int currentX2 = data[5 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] + ((data[6 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF) * 255);
int currentY2 = ((data[6 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF0) >> 4) + (data[7 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] * 16);
int currentX1 = ((data[2 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x0F) << 8) | data[1 + TOUCHPAD_DATA_OFFSET + touchPacketOffset];
int currentY1 = (data[3 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] << 4) | ((data[2 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF0) >> 4);
int currentX2 = ((data[6 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0x0F) << 8) | data[5 + TOUCHPAD_DATA_OFFSET + touchPacketOffset];
int currentY2 = (data[7 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] << 4) | ((data[6 + TOUCHPAD_DATA_OFFSET + touchPacketOffset] & 0xF0) >> 4);
TouchpadEventArgs args;
if (sensors.Touch1 || sensors.Touch2)
@ -102,39 +120,54 @@ namespace DS4Windows
if (TouchesBegan != null)
{
if (sensors.Touch1 && sensors.Touch2)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1), new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX1, currentY1, touchID1); t1.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0, t1);
}
else if (sensors.Touch1)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1));
{
t0.populate(currentX1, currentY1, touchID1);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
else
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
TouchesBegan(this, args);
}
}
else if (sensors.Touch1 == lastIsActive1 && sensors.Touch2 == lastIsActive2 && TouchesMoved != null)
{
Touch tPrev, t0, t1;
Touch currentT0, currentT1;
if (sensors.Touch1 && sensors.Touch2)
{
tPrev = new Touch(lastTouchPadX1, lastTouchPadY1, lastTouchID1);
t0 = new Touch(currentX1, currentY1, touchID1, tPrev);
tPrev = new Touch(lastTouchPadX2, lastTouchPadY2, lastTouchID2);
t1 = new Touch(currentX2, currentY2, touchID2, tPrev);
tPrev0.populate(lastTouchPadX1, lastTouchPadY1, lastTouchID1);
t0.populate(currentX1, currentY1, touchID1, tPrev0);
currentT0 = t0;
tPrev1.populate(lastTouchPadX2, lastTouchPadY2, lastTouchID2);
t1.populate(currentX2, currentY2, touchID2, tPrev1);
currentT1 = t1;
}
else if (sensors.Touch1)
{
tPrev = new Touch(lastTouchPadX1, lastTouchPadY1, lastTouchID1);
t0 = new Touch(currentX1, currentY1, touchID1, tPrev);
t1 = null;
tPrev0.populate(lastTouchPadX1, lastTouchPadY1, lastTouchID1);
t0.populate(currentX1, currentY1, touchID1, tPrev0);
currentT0 = t0;
currentT1 = null;
}
else
{
tPrev = new Touch(lastTouchPadX2, lastTouchPadY2, lastTouchID2);
t0 = new Touch(currentX2, currentY2, touchID2, tPrev);
t1 = null;
tPrev0.populate(lastTouchPadX2, lastTouchPadY2, lastTouchID2);
t0.populate(currentX2, currentY2, touchID2, tPrev0);
currentT0 = t0;
currentT1 = null;
}
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0, t1);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, currentT0, currentT1);
TouchesMoved(this, args);
}
@ -142,22 +175,42 @@ namespace DS4Windows
if (!lastTouchPadIsDown && touchPadIsDown && TouchButtonDown != null)
{
if (sensors.Touch1 && sensors.Touch2)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1), new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX1, currentY1, touchID1);
t1.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0, t1);
}
else if (sensors.Touch1)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1));
{
t0.populate(currentX1, currentY1, touchID1);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
else
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
TouchButtonDown(this, args);
}
else if (lastTouchPadIsDown && !touchPadIsDown && TouchButtonUp != null)
{
if (sensors.Touch1 && sensors.Touch2)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1), new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX1, currentY1, touchID1);
t1.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0, t1);
}
else if (sensors.Touch1)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX1, currentY1, touchID1));
{
t0.populate(currentX1, currentY1, touchID1);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
else
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(currentX2, currentY2, touchID2));
{
t0.populate(currentX2, currentY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
TouchButtonUp(this, args);
}
@ -172,6 +225,7 @@ namespace DS4Windows
lastTouchPadX2 = currentX2;
lastTouchPadY2 = currentY2;
}
lastTouchPadIsDown = touchPadIsDown;
}
else
@ -190,11 +244,21 @@ namespace DS4Windows
if ((lastIsActive1 || lastIsActive2) && TouchesEnded != null)
{
if (lastIsActive1 && lastIsActive2)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(lastTouchPadX1, lastTouchPadY1, touchID1), new Touch(lastTouchPadX2, lastTouchPadY2, touchID2));
{
t0.populate(lastTouchPadX1, lastTouchPadY1, touchID1);
t1.populate(lastTouchPadX2, lastTouchPadY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0, t1);
}
else if (lastIsActive1)
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(lastTouchPadX1, lastTouchPadY1, touchID1));
{
t0.populate(lastTouchPadX1, lastTouchPadY1, touchID1);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
else
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, new Touch(lastTouchPadX2, lastTouchPadY2, touchID2));
{
t0.populate(lastTouchPadX2, lastTouchPadY2, touchID2);
args = new TouchpadEventArgs(sensors.ReportTimeStamp, sensors.TouchButton, t0);
}
TouchesEnded(this, args);
}

View File

@ -0,0 +1,176 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS

View File

@ -9,10 +9,25 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DS4Windows</RootNamespace>
<AssemblyName>DS4Windows</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -27,12 +42,16 @@
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>
</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<UseVSHostingProcess>false</UseVSHostingProcess>
<LangVersion>6</LangVersion>
</PropertyGroup>
<PropertyGroup>
<StartupObject>DS4Windows.Program</StartupObject>
@ -52,26 +71,73 @@
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<Optimize>true</Optimize>
<DebugType>none</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<DefineConstants>WIN64</DefineConstants>
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<LangVersion>6</LangVersion>
<DebugSymbols>false</DebugSymbols>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<Optimize>true</Optimize>
<DebugType>none</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
<LangVersion>6</LangVersion>
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Win32.TaskScheduler, Version=2.8.0.0, Culture=neutral, PublicKeyToken=c416bc1b32d97233, processorArchitecture=MSIL">
<HintPath>..\packages\TaskScheduler.2.8.0\lib\net452\Microsoft.Win32.TaskScheduler.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Management" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DS4Control\ControlSerivce.cs" />
<Compile Include="DS4Control\ControlService.cs" />
<Compile Include="DS4Control\DS4LightBar.cs" />
<Compile Include="DS4Control\DS4StateFieldMapping.cs" />
<Compile Include="DS4Control\InputMethods.cs" />
<Compile Include="DS4Control\ITouchpadBehaviour.cs" />
<Compile Include="DS4Control\Log.cs" />
@ -98,6 +164,14 @@
<Compile Include="DS4Control\X360Device.designer.cs">
<DependentUpon>X360Device.cs</DependentUpon>
</Compile>
<Compile Include="DS4Forms\LanguagePackComboBox.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="DS4Forms\LanguagePackComboBox.Designer.cs">
<DependentUpon>LanguagePackComboBox.cs</DependentUpon>
</Compile>
<Compile Include="DS4Library\Crc32.cs" />
<Compile Include="DS4Library\DS4Audio.cs" />
<Compile Include="DS4Library\DS4Device.cs" />
<Compile Include="DS4Library\DS4Devices.cs" />
<Compile Include="DS4Library\DS4Sixaxis.cs" />
@ -106,12 +180,6 @@
<Compile Include="DS4Library\DS4Touchpad.cs" />
<Compile Include="DS4Forms\AdvancedColorDialog.cs" />
<Compile Include="DS4Forms\AdvancedComboBox.cs" />
<Compile Include="DS4Forms\Alreadyrunning.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DS4Forms\Alreadyrunning.Designer.cs">
<DependentUpon>Alreadyrunning.cs</DependentUpon>
</Compile>
<Compile Include="DS4Forms\DS4Form.cs">
<SubType>Form</SubType>
</Compile>
@ -187,56 +255,68 @@
<Compile Include="HidLibrary\HidDevices.cs" />
<Compile Include="HidLibrary\NativeMethods.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="DS4Forms\Alreadyrunning.resx">
<DependentUpon>Alreadyrunning.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.ar.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.cs.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.de-DE.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.el.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.es.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.fi.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.fr-FR.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.he.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.hu.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.id.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.it-IT.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.ja.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.ko.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.nl.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.pl.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.pt-BR.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
@ -246,27 +326,34 @@
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.ru-RU.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.sl.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.sv.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.tr.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.uk.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.vi.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.zh-Hans.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Form.zh-Hant.resx">
<DependentUpon>DS4Form.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\DS4Keyboard.resx">
<DependentUpon>DS4Keyboard.cs</DependentUpon>
@ -505,6 +592,9 @@
<EmbeddedResource Include="DS4Forms\KBM360.zh-Hant.resx">
<DependentUpon>KBM360.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\LanguagePackComboBox.resx">
<DependentUpon>LanguagePackComboBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DS4Forms\Options.ar.resx">
<DependentUpon>Options.cs</DependentUpon>
</EmbeddedResource>
@ -1004,6 +1094,7 @@
<EmbeddedResource Include="Properties\Resources.zh-hans.resx" />
<EmbeddedResource Include="Properties\Resources.zh-Hant.resx" />
<None Include="app.manifest" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -1023,18 +1114,7 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<COMReference Include="IWshRuntimeLibrary">
<Guid>{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}</Guid>
<VersionMajor>1</VersionMajor>
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
</ItemGroup>
<ItemGroup>
<Content Include="HidLibrary\LICENSE.htm" />
<Content Include="HidLibrary\LICENSE" />
<Content Include="Resources\360 fades.png" />
<None Include="Resources\360 map.png" />
<None Include="Resources\360 highlight.png" />
@ -1117,7 +1197,28 @@
<Content Include="Resources\xbox_360_controller.png" />
<Content Include="Resources\Y.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>rem Copy compiled l18n assemblies to alt folder
GOTO END
if not exist $(TargetDir)Lang mkdir $(TargetDir)Lang
set langs=ar cs de de-DE el es fi fr fr-FR he hu id it it-IT ja ko nl pl ^
pt-BR ro-RO ru-RU sl sv tr uk vi zh-CN zh-Hans zh-Hant
for %25%25l in (%25langs%25) do (
xcopy $(TargetDir)%25%25l $(TargetDir)Lang\%25%25l\ /s /y
)
:END</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

View File

@ -83,6 +83,25 @@ namespace DS4Windows
IsExclusive = isExclusive;
}
public void OpenFileStream(int reportSize)
{
if (fileStream == null && !safeReadHandle.IsInvalid)
{
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, reportSize, true);
}
}
public bool IsFileStreamOpen()
{
bool result = false;
if (fileStream != null)
{
result = !fileStream.SafeFileHandle.IsInvalid && !fileStream.SafeFileHandle.IsClosed;
}
return result;
}
public void CloseDevice()
{
if (!IsOpen) return;
@ -110,6 +129,17 @@ namespace DS4Windows
return NativeMethods.HidD_GetInputReport(safeReadHandle, data, data.Length);
}
public bool WriteFeatureReport(byte[] data)
{
bool result = false;
if (IsOpen && safeReadHandle != null)
{
result = NativeMethods.HidD_SetFeature(safeReadHandle, data, data.Length);
}
return result;
}
private static HidDeviceAttributes GetDeviceAttributes(SafeFileHandle hidHandle)
{
@ -129,21 +159,37 @@ namespace DS4Windows
NativeMethods.HidP_GetCaps(preparsedDataPointer, ref capabilities);
NativeMethods.HidD_FreePreparsedData(preparsedDataPointer);
}
return new HidDeviceCapabilities(capabilities);
}
private void closeFileStreamIO()
{
if (fileStream != null)
fileStream.Close();
{
try
{
fileStream.Close();
}
catch (IOException) { }
catch (OperationCanceledException) { }
}
fileStream = null;
Console.WriteLine("Close fs");
if (safeReadHandle != null && !safeReadHandle.IsInvalid)
{
safeReadHandle.Close();
Console.WriteLine("Close sh");
try
{
if (!safeReadHandle.IsClosed)
{
safeReadHandle.Close();
Console.WriteLine("Close sh");
}
}
catch (IOException) { }
}
safeReadHandle = null;
}
@ -173,6 +219,7 @@ namespace DS4Windows
return ReadStatus.ReadError;
}
}
public ReadStatus ReadFile(byte[] inputBuffer)
{
if (safeReadHandle == null)
@ -195,6 +242,25 @@ namespace DS4Windows
}
}
public ReadStatus ReadWithFileStream(byte[] inputBuffer)
{
try
{
if (fileStream.Read(inputBuffer, 0, inputBuffer.Length) > 0)
{
return ReadStatus.Success;
}
else
{
return ReadStatus.NoDataRead;
}
}
catch (Exception)
{
return ReadStatus.ReadError;
}
}
public ReadStatus ReadWithFileStream(byte[] inputBuffer, int timeout)
{
try
@ -202,10 +268,10 @@ namespace DS4Windows
if (safeReadHandle == null)
safeReadHandle = OpenHandle(_devicePath, true);
if (fileStream == null && !safeReadHandle.IsInvalid)
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, inputBuffer.Length, false);
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, inputBuffer.Length, true);
if (!safeReadHandle.IsInvalid && fileStream.CanRead)
{
Task<ReadStatus> readFileTask = new Task<ReadStatus>(() => ReadWithFileStreamTask(inputBuffer));
readFileTask.Start();
bool success = readFileTask.Wait(timeout);
@ -242,8 +308,52 @@ namespace DS4Windows
}
}
return ReadStatus.ReadError;
}
public ReadStatus ReadAsyncWithFileStream(byte[] inputBuffer, int timeout)
{
try
{
if (safeReadHandle == null)
safeReadHandle = OpenHandle(_devicePath, true);
if (fileStream == null && !safeReadHandle.IsInvalid)
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, inputBuffer.Length, true);
if (!safeReadHandle.IsInvalid && fileStream.CanRead)
{
Task<int> readTask = fileStream.ReadAsync(inputBuffer, 0, inputBuffer.Length);
bool success = readTask.Wait(timeout);
if (success)
{
if (readTask.Result > 0)
{
return ReadStatus.Success;
}
else
{
return ReadStatus.NoDataRead;
}
}
else
{
return ReadStatus.WaitTimedOut;
}
}
}
catch (Exception e)
{
if (e is AggregateException)
{
Console.WriteLine(e.Message);
return ReadStatus.WaitFail;
}
else
{
return ReadStatus.ReadError;
}
}
return ReadStatus.ReadError;
}
@ -285,7 +395,7 @@ namespace DS4Windows
}
if (fileStream == null && !safeReadHandle.IsInvalid)
{
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, outputBuffer.Length, false);
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, outputBuffer.Length, true);
}
if (fileStream != null && fileStream.CanWrite && !safeReadHandle.IsInvalid)
{
@ -304,25 +414,49 @@ namespace DS4Windows
}
private SafeFileHandle OpenHandle(String devicePathName, Boolean isExclusive)
public bool WriteAsyncOutputReportViaInterrupt(byte[] outputBuffer)
{
SafeFileHandle hidHandle;
try
{
if (isExclusive)
if (safeReadHandle == null)
{
hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, 0, IntPtr.Zero, NativeMethods.OpenExisting, 0, 0);
safeReadHandle = OpenHandle(_devicePath, true);
}
if (fileStream == null && !safeReadHandle.IsInvalid)
{
fileStream = new FileStream(safeReadHandle, FileAccess.ReadWrite, outputBuffer.Length, true);
}
if (fileStream != null && fileStream.CanWrite && !safeReadHandle.IsInvalid)
{
Task writeTask = fileStream.WriteAsync(outputBuffer, 0, outputBuffer.Length);
//fileStream.Write(outputBuffer, 0, outputBuffer.Length);
return true;
}
else
{
hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, NativeMethods.FILE_SHARE_READ | NativeMethods.FILE_SHARE_WRITE, IntPtr.Zero, NativeMethods.OpenExisting, 0, 0);
return false;
}
}
catch (Exception)
{
throw;
return false;
}
}
private SafeFileHandle OpenHandle(String devicePathName, Boolean isExclusive)
{
SafeFileHandle hidHandle;
if (isExclusive)
{
hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, 0, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | NativeMethods.FILE_FLAG_OVERLAPPED, 0);
}
else
{
hidHandle = NativeMethods.CreateFile(devicePathName, NativeMethods.GENERIC_READ | NativeMethods.GENERIC_WRITE, NativeMethods.FILE_SHARE_READ | NativeMethods.FILE_SHARE_WRITE, IntPtr.Zero, NativeMethods.OpenExisting, 0x20000000 | 0x80000000 | NativeMethods.FILE_FLAG_OVERLAPPED, 0);
}
return hidHandle;
}
@ -331,6 +465,11 @@ namespace DS4Windows
return NativeMethods.HidD_GetFeature(safeReadHandle.DangerousGetHandle(), inputBuffer, inputBuffer.Length);
}
public void resetSerial()
{
serial = null;
}
public string readSerial()
{
if (serial != null)
@ -347,7 +486,12 @@ namespace DS4Windows
else
{
byte[] buffer = new byte[126];
NativeMethods.HidD_GetSerialNumberString(safeReadHandle.DangerousGetHandle(), buffer, (ulong)buffer.Length);
#if WIN64
ulong bufferLen = 126;
#else
uint bufferLen = 126;
#endif
NativeMethods.HidD_GetSerialNumberString(safeReadHandle.DangerousGetHandle(), buffer, bufferLen);
string MACAddr = System.Text.Encoding.Unicode.GetString(buffer).Replace("\0", string.Empty).ToUpper();
MACAddr = $"{MACAddr[0]}{MACAddr[1]}:{MACAddr[2]}{MACAddr[3]}:{MACAddr[4]}{MACAddr[5]}:{MACAddr[6]}{MACAddr[7]}:{MACAddr[8]}{MACAddr[9]}:{MACAddr[10]}{MACAddr[11]}";
serial = MACAddr;

View File

@ -36,6 +36,37 @@ namespace DS4Windows
productIds.Contains(x.Attributes.ProductId));
}
public static IEnumerable<HidDevice> Enumerate(int[] vendorIds, params int[] productIds)
{
return EnumerateDevices().Select(x => new HidDevice(x.Path, x.Description)).Where(x => vendorIds.Contains(x.Attributes.VendorId) &&
productIds.Contains(x.Attributes.ProductId));
}
public static IEnumerable<HidDevice> EnumerateDS4(VidPidInfo[] devInfo)
{
List<HidDevice> foundDevs = new List<HidDevice>();
int devInfoLen = devInfo.Length;
IEnumerable<DeviceInfo> temp = EnumerateDevices();
for (int i = 0, len = temp.Count(); i < len; i++)
{
DeviceInfo x = temp.ElementAt(i);
HidDevice tempDev = new HidDevice(x.Path, x.Description);
bool found = false;
for (int j = 0; !found && j < devInfoLen; j++)
{
VidPidInfo tempInfo = devInfo[j];
if (tempDev.Attributes.VendorId == tempInfo.vid &&
tempDev.Attributes.ProductId == tempInfo.pid)
{
found = true;
foundDevs.Add(tempDev);
}
}
}
return foundDevs;
}
public static IEnumerable<HidDevice> Enumerate(int vendorId)
{
return EnumerateDevices().Select(x => new HidDevice(x.Path, x.Description)).Where(x => x.Attributes.VendorId == vendorId);

View File

@ -0,0 +1,18 @@
Copyright (c) 2010 Ultraviolet Catastrophe
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Some files were not shown because too many files have changed in this diff Show More