diff --git a/app/Ally/AllyControl.cs b/app/Ally/AllyControl.cs
index 88e11b8f..170e4aff 100644
--- a/app/Ally/AllyControl.cs
+++ b/app/Ally/AllyControl.cs
@@ -81,6 +81,7 @@ namespace GHelper.Ally
public const string BindShift = "02-88";
public const string BindCtrl = "02-8C";
public const string BindAlt = "02-8A";
+ public const string BindWin = "02-82";
public const string BindTaskManager = "04-03-8C-88-76";
public const string BindCloseWindow = "04-02-8A-0C";
@@ -98,6 +99,10 @@ namespace GHelper.Ally
public const string BindPrintScrn = "02-C3";
+ public const string BindScreenshot = "04-03-82-88-1B";
+
+ public const string BindShowKeyboard = "05-19";
+
static byte[] CommandReady = new byte[] { AsusHid.INPUT_ID, 0xd1, 0x0a, 0x01 };
static byte[] CommandSave = new byte[] { AsusHid.INPUT_ID, 0xd1, 0x0f, 0x20 };
@@ -137,13 +142,15 @@ namespace GHelper.Ally
{ BindBrightnessUp, "Bright Up" },
{ BindBrightnessDown, "Bright Down" },
+ { BindShowKeyboard, "Show Keyboard" },
+ { BindScreenshot, "Screenshot" },
+
{ BindOverlay, "AMD Overlay" },
{ BindTaskManager, "Task Manager" },
{ BindCloseWindow, "Close Window" },
{ BindShiftTab, "Shift-Tab" },
{ BindAltTab, "Alt-Tab" },
- { BindPrintScrn, "PrntScn" },
{ BindEsc, "Esc" },
{ BindBack, "Backspace" },
{ BindTab, "Tab" },
@@ -151,6 +158,8 @@ namespace GHelper.Ally
{ BindShift, "LShift" },
{ BindAlt, "LAlt" },
{ BindCtrl, "LCtl" },
+ { BindWin, "WIN" },
+ { BindPrintScrn, "PrntScn" },
{ BindPgU, "PgUp" },
{ BindPgD, "PgDwn" },
@@ -218,7 +227,6 @@ namespace GHelper.Ally
{ "02-41", "," },
{ "02-49", "." },
{ "02-89", "RShift" },
- { "02-82", "Meta" },
{ "02-29", "Space" },
{ "02-8B", "RAlt" },
{ "02-84", "App menu" },
@@ -252,8 +260,8 @@ namespace GHelper.Ally
{ "03-04", "Mouse scroll up" },
{ "03-05", "Mouse scroll down" },
- { "05-16", "Screenshot" },
- { "05-19", "Show keyboard" },
+ //{ "05-16", "Screenshot" },
+
{ "05-1C", "Show desktop" },
{ "05-1E", "Begin recording" },
{ "05-01", "Mic off" },
@@ -393,14 +401,14 @@ namespace GHelper.Ally
case BindingZone.DPadUpDown:
KeyL1 = AppConfig.GetString("bind_du", desktop ? BindKBU : BindDU);
KeyR1 = AppConfig.GetString("bind_dd", desktop ? BindKBD : BindDD);
- KeyL2 = AppConfig.GetString("bind2_du", BindBrightnessUp);
- KeyR2 = AppConfig.GetString("bind2_dd", BindBrightnessDown);
+ KeyL2 = AppConfig.GetString("bind2_du", BindShowKeyboard);
+ KeyR2 = AppConfig.GetString("bind2_dd", BindAltTab);
break;
case BindingZone.DPadLeftRight:
KeyL1 = AppConfig.GetString("bind_dl", desktop ? BindKBL : BindDL);
KeyR1 = AppConfig.GetString("bind_dr", desktop ? BindKBR : BindDR);
- KeyL2 = AppConfig.GetString("bind2_dl");
- KeyR2 = AppConfig.GetString("bind2_dr");
+ KeyL2 = AppConfig.GetString("bind2_dl", BindBrightnessDown);
+ KeyR2 = AppConfig.GetString("bind2_dr", BindBrightnessUp);
break;
case BindingZone.StickClick:
KeyL1 = AppConfig.GetString("bind_ls", desktop ? BindShift : BindLS);
@@ -423,7 +431,7 @@ namespace GHelper.Ally
case BindingZone.XY:
KeyL1 = AppConfig.GetString("bind_x", desktop ? BindPgD : BindX);
KeyR1 = AppConfig.GetString("bind_y", desktop ? BindPgU : BindY);
- KeyL2 = AppConfig.GetString("bind2_x");
+ KeyL2 = AppConfig.GetString("bind2_x", BindScreenshot);
KeyR2 = AppConfig.GetString("bind2_y", BindOverlay);
break;
case BindingZone.ViewMenu:
diff --git a/app/GHelper.csproj b/app/GHelper.csproj
index 819bb1dc..ce70eea1 100644
--- a/app/GHelper.csproj
+++ b/app/GHelper.csproj
@@ -15,7 +15,7 @@
AnyCPU
False
True
- 0.149
+ 0.149.1
diff --git a/app/Helpers/OnScreenKeyboard.cs b/app/Helpers/OnScreenKeyboard.cs
new file mode 100644
index 00000000..ee586eb5
--- /dev/null
+++ b/app/Helpers/OnScreenKeyboard.cs
@@ -0,0 +1,176 @@
+using System.Diagnostics;
+using System.Runtime.InteropServices;
+
+namespace GHelper.Helpers
+{
+ public static class OnScreenKeyboard
+ {
+ static OnScreenKeyboard()
+ {
+ var version = Environment.OSVersion.Version;
+ switch (version.Major)
+ {
+ case 6:
+ switch (version.Minor)
+ {
+ case 2:
+ // Windows 10 (ok)
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ private static void StartTabTip()
+ {
+ var p = Process.Start(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe");
+ int handle = 0;
+ while ((handle = NativeMethods.FindWindow("IPTIP_Main_Window", "")) <= 0)
+ {
+ Thread.Sleep(100);
+ }
+ }
+
+ public static void ToggleVisibility()
+ {
+ var type = Type.GetTypeFromCLSID(Guid.Parse("4ce576fa-83dc-4F88-951c-9d0782b4e376"));
+ var instance = (ITipInvocation)Activator.CreateInstance(type);
+ instance.Toggle(NativeMethods.GetDesktopWindow());
+ Marshal.ReleaseComObject(instance);
+ }
+
+ public static void Show()
+ {
+ int handle = NativeMethods.FindWindow("IPTIP_Main_Window", "");
+ if (handle <= 0) // nothing found
+ {
+ StartTabTip();
+ Thread.Sleep(100);
+ }
+ // on some devices starting TabTip don't show keyboard, on some does ¯\_(ツ)_/¯
+ if (!IsOpen())
+ {
+ ToggleVisibility();
+ }
+ }
+
+ public static void Hide()
+ {
+ if (IsOpen())
+ {
+ ToggleVisibility();
+ }
+ }
+
+
+ public static bool Close()
+ {
+ // find it
+ int handle = NativeMethods.FindWindow("IPTIP_Main_Window", "");
+ bool active = handle > 0;
+ if (active)
+ {
+ // don't check style - just close
+ NativeMethods.SendMessage(handle, NativeMethods.WM_SYSCOMMAND, NativeMethods.SC_CLOSE, 0);
+ }
+ return active;
+ }
+
+ public static bool IsOpen()
+ {
+ return GetIsOpen1709() ?? GetIsOpenLegacy();
+ }
+
+
+ [DllImport("user32.dll", SetLastError = false)]
+ private static extern IntPtr FindWindowEx(IntPtr parent, IntPtr after, string className, string title = null);
+
+ [DllImport("user32.dll", SetLastError = false)]
+ private static extern uint GetWindowLong(IntPtr wnd, int index);
+
+ private static bool? GetIsOpen1709()
+ {
+ // if there is a top-level window - the keyboard is closed
+ var wnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, WindowClass1709, WindowCaption1709);
+ if (wnd != IntPtr.Zero)
+ return false;
+
+ var parent = IntPtr.Zero;
+ for (; ; )
+ {
+ parent = FindWindowEx(IntPtr.Zero, parent, WindowParentClass1709);
+ if (parent == IntPtr.Zero)
+ return null; // no more windows, keyboard state is unknown
+
+ // if it's a child of a WindowParentClass1709 window - the keyboard is open
+ wnd = FindWindowEx(parent, IntPtr.Zero, WindowClass1709, WindowCaption1709);
+ if (wnd != IntPtr.Zero)
+ return true;
+ }
+ }
+
+ private static bool GetIsOpenLegacy()
+ {
+ var wnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, WindowClass);
+ if (wnd == IntPtr.Zero)
+ return false;
+
+ var style = GetWindowStyle(wnd);
+ return style.HasFlag(WindowStyle.Visible)
+ && !style.HasFlag(WindowStyle.Disabled);
+ }
+
+ private const string WindowClass = "IPTip_Main_Window";
+ private const string WindowParentClass1709 = "ApplicationFrameWindow";
+ private const string WindowClass1709 = "Windows.UI.Core.CoreWindow";
+ private const string WindowCaption1709 = "Microsoft Text Input Application";
+
+ private enum WindowStyle : uint
+ {
+ Disabled = 0x08000000,
+ Visible = 0x10000000,
+ }
+
+ private static WindowStyle GetWindowStyle(IntPtr wnd)
+ {
+ return (WindowStyle)GetWindowLong(wnd, -16);
+ }
+
+ }
+
+
+ [ComImport]
+ [Guid("37c994e7-432b-4834-a2f7-dce1f13b834b")]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ interface ITipInvocation
+ {
+ void Toggle(IntPtr hwnd);
+ }
+
+ internal static class NativeMethods
+ {
+ [DllImport("user32.dll", EntryPoint = "FindWindow")]
+ internal static extern int FindWindow(string lpClassName, string lpWindowName);
+
+ [DllImport("user32.dll", EntryPoint = "SendMessage")]
+ internal static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam);
+
+ [DllImport("user32.dll", EntryPoint = "GetDesktopWindow", SetLastError = false)]
+ internal static extern IntPtr GetDesktopWindow();
+
+ [DllImport("user32.dll", EntryPoint = "GetWindowLong")]
+ internal static extern int GetWindowLong(int hWnd, int nIndex);
+
+ internal const int GWL_STYLE = -16;
+ internal const int GWL_EXSTYLE = -20;
+ internal const int WM_SYSCOMMAND = 0x0112;
+ internal const int SC_CLOSE = 0xF060;
+
+ internal const int WS_DISABLED = 0x08000000;
+
+ internal const int WS_VISIBLE = 0x10000000;
+
+ }
+}
\ No newline at end of file
diff --git a/app/Input/InputDispatcher.cs b/app/Input/InputDispatcher.cs
index f054a396..5792dca8 100644
--- a/app/Input/InputDispatcher.cs
+++ b/app/Input/InputDispatcher.cs
@@ -602,6 +602,9 @@ namespace GHelper.Input
case 56:
KeyProcess("m4");
return;
+ case 162:
+ OnScreenKeyboard.Show();
+ return;
}
}
diff --git a/app/Mode/ModeControl.cs b/app/Mode/ModeControl.cs
index a3fe3f6c..c7406ed9 100644
--- a/app/Mode/ModeControl.cs
+++ b/app/Mode/ModeControl.cs
@@ -318,7 +318,7 @@ namespace GHelper.Mode
int memory = AppConfig.GetMode("gpu_memory");
int clock_limit = AppConfig.GetMode("gpu_clock_limit");
- //if (core == -1 && memory == -1 && clock_limit == -1) return;
+ if (core == -1 && memory == -1 && clock_limit == -1) return;
//if ((gpu_core > -5 && gpu_core < 5) && (gpu_memory > -5 && gpu_memory < 5)) launchAsAdmin = false;
if (Program.acpi.DeviceGet(AsusACPI.GPUEco) == 1) { Logger.WriteLine("Clocks: Eco"); return; }
diff --git a/app/USB/Aura.cs b/app/USB/Aura.cs
index 2da6d60c..dc7c6af8 100644
--- a/app/USB/Aura.cs
+++ b/app/USB/Aura.cs
@@ -261,9 +261,23 @@ namespace GHelper.USB
public static void Init()
{
AsusHid.Write(new List {
- new byte[] { AsusHid.AURA_ID, 0xb9 },
+ new byte[] { AsusHid.AURA_ID, 0xB9 },
Encoding.ASCII.GetBytes("]ASUS Tech.Inc."),
- new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x1a },
+ new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x1A },
+
+ // Random data AC sends to keyboard on start
+ new byte[] { AsusHid.AURA_ID, 0x9F, 0x01 },
+ new byte[] { AsusHid.AURA_ID, 0xBF },
+
+ new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x10 },
+ new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x20 },
+
+ new byte[] { AsusHid.AURA_ID, 0xC0, 0x03, 0x01},
+ new byte[] { AsusHid.AURA_ID, 0x9E, 0x01, 0x20 },
+
+ Encoding.ASCII.GetBytes("]ASUS Tech.Inc."),
+ new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x1A },
+ new byte[] { AsusHid.AURA_ID, 0xC0, 0x00, 0x01},
}, "Init");
AsusHid.WriteInput(Encoding.ASCII.GetBytes("ZASUS Tech.Inc."));