Example #1
0
        private static void FullScreen(IntPtr targeHandler, Rectangle bounds, IntPtr workerw)
        {
            RECT rect = new RECT(bounds);

            User32Wrapper.MapWindowPoints(IntPtr.Zero, workerw, ref rect, 2);
            _ = User32WrapperEx.SetWindowPosEx(targeHandler, rect);
        }
Example #2
0
        private void FullScreen(IntPtr targeHandler, int displayIndex = 0)
        {
            //var tmp = User32Wrapper.MonitorFromWindow(targeHandler, User32Wrapper.MONITOR_DEFAULTTONEAREST);
            //MONITORINFO info = new MONITORINFO();

            //bool ok = User32Wrapper.GetMonitorInfo(tmp, info);
            //if (!ok)
            //    return null;

            //ok = User32Wrapper.GetWindowRect(_targeHandler, out RECT react);

            //ok = User32Wrapper.SetWindowPos(targeHandler, info.rcMonitor);
            //return react;

            var displays = User32Wrapper.GetDisplays();

            if (displays == null)
            {
                return;
            }
            var display = displays[displayIndex];

            User32Wrapper.MapWindowPoints(IntPtr.Zero, _workerw, ref display.rcMonitor, 2);
            var ok = User32Wrapper.SetWindowPos(targeHandler, display.rcMonitor);

            return;
        }
        internal static IntPtr GetWorkerW()
        {
            _progman = User32Wrapper.FindWindow("Progman", null);
            User32Wrapper.SendMessageTimeout(_progman,
                                             0x052C,
                                             new IntPtr(0),
                                             IntPtr.Zero,
                                             SendMessageTimeoutFlags.SMTO_NORMAL,
                                             1000,
                                             out IntPtr unusefulResult);
            var enumWindowResult = User32Wrapper.EnumWindows(new EnumWindowsProc((tophandle, topparamhandle) =>
            {
                IntPtr shelldll_defview = User32Wrapper.FindWindowEx(tophandle,
                                                                     IntPtr.Zero,
                                                                     "SHELLDLL_DefView",
                                                                     IntPtr.Zero);
                if (shelldll_defview != IntPtr.Zero)
                {
                    _workerw = User32Wrapper.FindWindowEx(IntPtr.Zero,
                                                          tophandle,
                                                          "WorkerW",
                                                          IntPtr.Zero);

                    _desktopWorkerw = tophandle;
                    return(false);
                }

                return(true);
            }), IntPtr.Zero);

            return(_workerw);
        }
Example #4
0
        protected override async Task <RenderProcess> StartProcess(ProcessStartInfo info, CancellationToken ct)
        {
            var result = await base.StartProcess(info, ct);

            return(await Task.Run(() =>
            {
                var p = Process.GetProcessById(result.PId);
                string title = p.MainWindowTitle;

                var index = title.IndexOf("cef=");

                while (index < 0)
                {
                    p?.Dispose();
                    p = Process.GetProcessById(result.PId);

                    title = p.MainWindowTitle;
                    index = title.IndexOf("cef=");
                    Thread.Sleep(10);
                }
                p?.Dispose();
                string handleStr = title[(index + 4)..];

                var cefHandle = new IntPtr(int.Parse(handleStr));
                var handle = User32Wrapper.FindWindowEx(cefHandle, IntPtr.Zero, "Chrome_WidgetWin_0", IntPtr.Zero);

                result.ReceiveMouseEventHandle = handle;
                return result;
            }));
        public void RestoreParent(bool refreshWallpaper = true)
        {
            if (!Shown)
            {
                return;
            }

            if (refreshWallpaper)
            {
                _desktopWallpaperAPI = RefreshWallpaper(_desktopWallpaperAPI);
            }

            if (_workerw == IntPtr.Zero)
            {
                _workerw = GetWorkerW();
            }

            User32Wrapper.SetParent(_currentHandler, _parentHandler);

            if (_originalRect != null)
            {
                User32WrapperEx.SetWindowPosEx(_currentHandler, _originalRect.Value);
            }
            Shown = false;
        }
Example #6
0
        internal void ShowWallpaper(IntPtr wallpaperHandle)
        {
            IntPtr hostForm = IntPtr.Zero;

            WallpaperApi.UIInvoke(() =>
            {
                try
                {
                    Controls.Clear();
                    Opacity  = 1;
                    hostForm = Handle;
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine($"ShowWallpaper ex:{ex}");
                }
            });

            //hostfrom下潜桌面
            WallpaperHelper.GetInstance(_screenName).SendToBackground(hostForm);
            //壁纸parent改为hostform
            User32Wrapper.SetParent(wallpaperHandle, hostForm);
            //把壁纸全屏铺满 hostform
            WallpaperHelper.FullScreen(wallpaperHandle, hostForm);
        }
Example #7
0
        public bool SendToBackground(IntPtr handler, int displayIndex = 0)
        {
            if (handler == IntPtr.Zero || Shown)
            {
                return(false);
            }

            var ok = User32Wrapper.GetWindowRect(handler, out RECT react);

            if (ok)
            {
                _originalRect = react;
            }

            Shown         = true;
            _targeHandler = handler;

            if (_workerw == IntPtr.Zero)
            {
                _workerw = GetWorkerW();
            }

            _parentHandler = User32Wrapper.GetParent(_targeHandler);
            if (_parentHandler == IntPtr.Zero)
            {
                _parentHandler = User32Wrapper.GetAncestor(_targeHandler, GetAncestorFlags.GetParent);
            }

            User32Wrapper.SetParent(_targeHandler, _workerw);

            FullScreen(_targeHandler, displayIndex);

            return(true);
        }
Example #8
0
        protected void SetMouseUp(ushort[] button, INPUT[] ip)
        {
            //release key
            for (int i = button.Length - 1; i >= 0; i--)
            {
                switch (button[i])
                {
                case 1:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_LEFTUP;
                    break;
                }

                case 2:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_RIGHTUP;
                    break;
                }

                case 4:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_MIDDLEUP;
                    break;
                }
                }
                User32Wrapper.SendInput(1, ip, Marshal.SizeOf(typeof(INPUT)));
            }
        }
Example #9
0
        public static IntPtr GetWorkerW()
        {
            IntPtr progman = User32Wrapper.FindWindow("Progman", null);

            User32Wrapper.SendMessageTimeout(progman,
                                             0x052C,
                                             new IntPtr(0),
                                             IntPtr.Zero,
                                             SendMessageTimeoutFlags.SMTO_NORMAL,
                                             1000,
                                             out IntPtr unusefulResult);
            IntPtr workerw          = IntPtr.Zero;
            var    enumWindowResult = User32Wrapper.EnumWindows(new EnumWindowsProc((tophandle, topparamhandle) =>
            {
                IntPtr p = User32Wrapper.FindWindowEx(tophandle,
                                                      IntPtr.Zero,
                                                      "SHELLDLL_DefView",
                                                      IntPtr.Zero);

                if (p != IntPtr.Zero)
                {
                    workerw = User32Wrapper.FindWindowEx(IntPtr.Zero,
                                                         tophandle,
                                                         "WorkerW",
                                                         IntPtr.Zero);
                    return(false);
                }

                return(true);
            }), IntPtr.Zero);

            return(workerw);
        }
Example #10
0
        protected void SetMouseDown(ushort[] button, INPUT[] ip)
        {
            //press key
            for (int i = 0; i < button.Length; i++)
            {
                switch (button[i])
                {
                case 1:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_LEFTDOWN;
                    break;
                }

                case 2:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_RIGHTDOWN;
                    break;
                }

                case 4:
                {
                    ip[0].u.mi.dwFlags = User32Wrapper.MOUSEEVENTF_MIDDLEDOWN;
                    break;
                }
                }
                User32Wrapper.SendInput(1, ip, Marshal.SizeOf(typeof(INPUT)));
            }
        }
Example #11
0
        private static bool Initlize()
        {
            _showed = false;
            IntPtr progman = User32Wrapper.FindWindow("Progman", null);
            IntPtr result  = IntPtr.Zero;

            User32Wrapper.SendMessageTimeout(progman,
                                             0x052C,
                                             new IntPtr(0),
                                             IntPtr.Zero,
                                             SendMessageTimeoutFlags.SMTO_NORMAL,
                                             1000,
                                             out result);
            _workerw = IntPtr.Zero;
            var result1 = User32Wrapper.EnumWindows(new EnumWindowsProc((tophandle, topparamhandle) =>
            {
                IntPtr p = User32Wrapper.FindWindowEx(tophandle,
                                                      IntPtr.Zero,
                                                      "SHELLDLL_DefView",
                                                      IntPtr.Zero);

                if (p != IntPtr.Zero)
                {
                    _workerw = User32Wrapper.FindWindowEx(IntPtr.Zero,
                                                          tophandle,
                                                          "WorkerW",
                                                          IntPtr.Zero);
                }

                return(true);
            }), IntPtr.Zero);

            _initlized = result1;
            return(result1);
        }
        public static bool Show(IRender render, Screen screen)
        {
            var handle = render.ShowRender();

            var core = GetCore(screen);

            if (core == null)
            {
                return(false);
            }

            Close(core.Render);//清理旧Render

            render.SetCore(core);
            core.Render = render;

            //处理alt+tab可以看见本程序
            //https://stackoverflow.com/questions/357076/best-way-to-hide-a-window-from-the-alt-tab-program-switcher
            int exStyle = User32Wrapper.GetWindowLong(handle, WindowLongFlags.GWL_EXSTYLE);

            exStyle |= (int)WindowStyles.WS_EX_TOOLWINDOW;
            User32Wrapper.SetWindowLong(handle, WindowLongFlags.GWL_EXSTYLE, exStyle);

            bool ok = core.SendToBackground(handle);

            return(ok);
        }
Example #13
0
        static string GetDesktopWallpaper()
        {
            string wallpaper = new string('\0', MAX_PATH);

            User32Wrapper.SystemParametersInfo(User32Wrapper.SPI_GETDESKWALLPAPER, (uint)wallpaper.Length, wallpaper, 0);
            return(wallpaper.Substring(0, wallpaper.IndexOf('\0')));
        }
Example #14
0
        /// <summary>
        /// 窗口是否是最大化
        /// </summary>
        /// <param name="handle"></param>
        /// <returns></returns>
        public static bool IsMAXIMIZED(IntPtr handle, bool onlyFullScreen)
        {
            WINDOWPLACEMENT placment = new WINDOWPLACEMENT();

            User32Wrapper.GetWindowPlacement(handle, ref placment);
            //_ = User32WrapperEx.GetProcessId(handle);

            bool visible = User32Wrapper.IsWindowVisible(handle);

            if (visible)
            {
                if (!onlyFullScreen && placment.showCmd == WINDOWPLACEMENTFlags.SW_SHOWMAXIMIZED)
                {//窗口最大化
                 // Exclude suspended Windows apps
                    _ = DwmapiWrapper.DwmGetWindowAttribute(handle, DwmapiWrapper.DWMWINDOWATTRIBUTE.DWMWA_CLOAKED, out var cloaked, Marshal.SizeOf <bool>());
                    //隐藏的UWP窗口
                    if (cloaked)
                    {
                        return(false);
                    }
                    //System.Diagnostics.Debug.WriteLine($"pid:{pid} maximized");
                    return(true);
                }

                ////判断一些隐藏窗口
                ////http://forums.codeguru.com/showthread.php?445207-Getting-HWND-of-visible-windows
                //var wl = User32Wrapper.GetWindowLong(handle, WindowLongConstants.GWL_STYLE) & WindowStyles.WS_EX_APPWINDOW;
                //if (wl <= 0)
                //    return false;

                //判断是否是游戏全屏
                User32Wrapper.GetWindowRect(handle, out var r);

                //System.Diagnostics.Debug.WriteLine($"pid:{pid} r:{r.Left} {r.Top} {r.Right} {r.Bottom} {DateTime.Now}");
                if (r.Left == 0 && r.Top == 0)
                {
                    int with   = r.Right - r.Left;
                    int height = r.Bottom - r.Top;

                    if (height == Screen.PrimaryScreen.Bounds.Height &&
                        with == Screen.PrimaryScreen.Bounds.Width)
                    {
                        //当前窗口最大化,进入了游戏
                        var foregroundWIndow = User32Wrapper.GetForegroundWindow();
                        if (foregroundWIndow == handle)
                        {
                            _ = User32WrapperEx.GetWindowTextEx(handle);
                            //var desktop = User32Wrapper.GetDesktopWindow();
                            var className = User32Wrapper.GetClassName(handle);
                            if (className == "WorkerW")
                            {
                                return(false);
                            }
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Example #15
0
        public void CheckMaximized(out List <Screen> maximizedScreens)
        {
            _maximizedScreens = new List <Screen>();
            bool ok = User32Wrapper.EnumDesktopWindows(IntPtr.Zero, new User32Wrapper.EnumDelegate(EnumDesktopWindowsCallBack), IntPtr.Zero);

            maximizedScreens = _maximizedScreens;
            //return _maximized;
        }
        public void RestoreParent()
        {
            if (_parentHandler != null)
            {
                User32Wrapper.SetParent(_currentHandler, _parentHandler.Value);
            }

            _parentHandler = null;
        }
        private static void FullScreen(IntPtr targeHandler, Screen displayScreen)
        {
            RECT rect = new RECT(displayScreen.Bounds);

            User32Wrapper.MapWindowPoints(IntPtr.Zero, _workerw, ref rect, 2);
            var ok = User32WrapperEx.SetWindowPosEx(targeHandler, rect);

            return;
        }
Example #18
0
        public bool SendToBackground(IntPtr handler)
        {
            //处理alt+tab可以看见本程序
            //https://stackoverflow.com/questions/357076/best-way-to-hide-a-window-from-the-alt-tab-program-switcher
            int exStyle = User32Wrapper.GetWindowLong(handler, WindowLongFlags.GWL_EXSTYLE);

            exStyle |= (int)WindowStyles.WS_EX_TOOLWINDOW;
            User32Wrapper.SetWindowLong(handler, WindowLongFlags.GWL_EXSTYLE, exStyle);

            if (handler != _currentHandler)
            {
                //已经换了窗口,恢复上一个窗口
                RestoreParent();
            }

            if (handler == IntPtr.Zero)
            {
                return(false);
            }

            _ = User32Wrapper.GetWindowRect(handler, out _);
            //var ok = User32Wrapper.GetWindowRect(handler, out RECT react);
            //if (ok)
            //    _originalRect = react;

            _currentHandler = handler;

            var workerw = GetWorkerW();

            if (workerw == IntPtr.Zero)
            {
                //有时候突然又不行了,在来一次
                User32Wrapper.SystemParametersInfo(User32Wrapper.SPI_SETCLIENTAREAANIMATION, 0, true, User32Wrapper.SPIF_UPDATEINIFILE | User32Wrapper.SPIF_SENDWININICHANGE);
                workerw = GetWorkerW();
            }

            if (workerw == IntPtr.Zero)
            {
                return(false);
            }

            _parentHandler = User32Wrapper.GetParent(_currentHandler);

            //if (newParentHandler != _parentHandler)
            //{
            //    //parent没变时不重复调用,有时候会导致不可见
            User32Wrapper.SetParent(_currentHandler, workerw);
            FullScreen(_currentHandler, _targetBounds, workerw);
            //_parentHandler = newParentHandler;
            //}

            //if (_parentHandler == IntPtr.Zero)
            //    _parentHandler = User32Wrapper.GetAncestor(_currentHandler, GetAncestorFlags.GetParent);

            return(true);
        }
Example #19
0
        private static void WinEventProc(IntPtr hook, SetWinEventHookEventType eventType, IntPtr window, int objectId, int childId, uint threadId, uint time)
        {
            try
            {
                if (eventType == SetWinEventHookEventType.EVENT_SYSTEM_FOREGROUND ||
                    eventType == SetWinEventHookEventType.EVENT_SYSTEM_MOVESIZEEND)
                {//焦点变化,窗口大小变化
                    var m = new OtherProgramChecker(_currentProcess).CheckMaximized();
                    RaiseMaximizedEvent(m);
                }

                if (eventType == SetWinEventHookEventType.EVENT_OBJECT_LOCATIONCHANGE)
                {//处理最大化操作
                    WINDOWPLACEMENT placment = new WINDOWPLACEMENT();
                    User32Wrapper.GetWindowPlacement(window, ref placment);
                    //string title = User32Wrapper.GetWindowText(window);
                    int pid = User32Wrapper.GetProcessId(window);
                    if (placment.showCmd == WINDOWPLACEMENTFlags.SW_HIDE)
                    {
                        return;
                    }

                    if (pid == _currentProcess.Id)
                    {
                        return;
                    }

                    if (placment.showCmd == WINDOWPLACEMENTFlags.SW_SHOWMAXIMIZED)
                    {
                        if (!maximizedPid.Contains(pid))
                        {
                            maximizedPid.Add(pid);
                            var m = new OtherProgramChecker(_currentProcess).CheckMaximized();
                            RaiseMaximizedEvent(m);
                        }
                    }

                    if (placment.showCmd == WINDOWPLACEMENTFlags.SW_SHOWNORMAL ||
                        placment.showCmd == WINDOWPLACEMENTFlags.SW_RESTORE ||
                        placment.showCmd == WINDOWPLACEMENTFlags.SW_SHOW ||
                        placment.showCmd == WINDOWPLACEMENTFlags.SW_SHOWMINIMIZED)
                    {
                        if (maximizedPid.Contains(pid))
                        {
                            maximizedPid.Remove(pid);
                            var m = new OtherProgramChecker(_currentProcess).CheckMaximized();
                            RaiseMaximizedEvent(m);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex);
            }
        }
        internal static void Main()
        {
            while (true)
            {
                User32Wrapper.MoveMouse(1, 0);
                User32Wrapper.MoveMouse(-1, 0);

                Thread.Sleep(Interval);
            }
        }
Example #21
0
 protected void SetKeyUp(ushort[] keys, INPUT[] ip)
 {
     //release key
     for (int i = keys.Length - 1; i >= 0; i--)
     {
         ip[0].u.ki.wVk     = keys[i];
         ip[0].u.ki.dwFlags = User32Wrapper.KEYEVENTF_KEYUP;
         User32Wrapper.SendInput(1, ip, Marshal.SizeOf(typeof(INPUT)));
     }
 }
Example #22
0
 public static void DoSomeMagic()
 {
     _ = User32Wrapper.SystemParametersInfo(User32Wrapper.SPI_SETCLIENTAREAANIMATION, 0, true, User32Wrapper.SPIF_UPDATEINIFILE | User32Wrapper.SPIF_SENDWININICHANGE);
     _desktopWallpaperAPI = GetDesktopWallpaperAPI();
     _desktopWallpaperAPI?.GetSlideshowOptions(out _, out _slideshowTick);
     if (_slideshowTick < 86400000)
     {
         _desktopWallpaperAPI?.SetSlideshowOptions(DesktopSlideshowOptions.DSO_SHUFFLEIMAGES, 1000 * 60 * 60 * 24);
     }
 }
Example #23
0
 protected void SetKeyDown(ushort[] keys, INPUT[] ip)
 {
     //press key
     for (int i = 0; i < keys.Length; i++)
     {
         ip[0].u.ki.wVk     = keys[i];
         ip[0].u.ki.dwFlags = 0;
         User32Wrapper.SendInput(1, ip, Marshal.SizeOf(typeof(INPUT)));
     }
 }
Example #24
0
        //Video
        private void Video_TriggerEvent(object sender, EventArgs e)
        {
            var snapshot = (SnapShotEventArgs)e as SnapShotEventArgs;

            new TaskFactory().StartNew(() =>
            {
                AppDataContext.NotifyIconHandler.SetWorkingIcon();
                Thread.Sleep(AppDataContext.Configuration.WaitTimeSeconds * 1000);
                AppDataContext.NotifyIconHandler.SetStandardIcon();
            });


            App.Current.Dispatcher.Invoke((Action) delegate
            {
                AppDataContext.Controllers.SnapShotController.AddSnapShot(snapshot.SnapShot);
            });

            foreach (var action in AppDataContext.Actions)
            {
                switch (action.ActionType)
                {
                case Entities.Enums.ActionTypes.MinimizeProcess:
                    foreach (var process in Process.GetProcessesByName(action.ActionValue))
                    {
                        if (!string.IsNullOrEmpty(process.MainWindowTitle))
                        {
                            User32Wrapper.MinimizeWindow(process.MainWindowHandle);
                        }
                    }
                    break;

                case Entities.Enums.ActionTypes.MaximizeProcess:
                    foreach (var process in Process.GetProcessesByName(action.ActionValue))
                    {
                        if (!string.IsNullOrEmpty(process.MainWindowTitle))
                        {
                            User32Wrapper.MaximizeWindow(process.MainWindowHandle);
                        }
                    }
                    break;

                case Entities.Enums.ActionTypes.ExecuteFile:
                    User32Wrapper.ExecuteFile(action.ActionValue);
                    break;

                case Entities.Enums.ActionTypes.ExecuteCommand:
                    User32Wrapper.ExecuteCommand(action.ActionValue, false);
                    break;

                case Entities.Enums.ActionTypes.ExecuteHiddenCommand:
                    User32Wrapper.ExecuteCommand(action.ActionValue, true);
                    break;
                }
            }
        }
        public static void FullScreen(IntPtr targeHandler, RECT rect, IntPtr parent)
        {
            User32Wrapper.MapWindowPoints(IntPtr.Zero, parent, ref rect, 2);
            _ = User32WrapperEx.SetWindowPosEx(targeHandler, rect);

            var style = User32Wrapper.GetWindowLong(targeHandler, WindowLongFlags.GWL_STYLE);

            //https://stackoverflow.com/questions/2398746/removing-window-border
            //消除游戏边框
            style &= ~(int)(WindowStyles.WS_EX_TOOLWINDOW | WindowStyles.WS_CAPTION | WindowStyles.WS_THICKFRAME | WindowStyles.WS_MINIMIZEBOX | WindowStyles.WS_MAXIMIZEBOX | WindowStyles.WS_SYSMENU);
            User32Wrapper.SetWindowLong(targeHandler, WindowLongFlags.GWL_STYLE, style);
        }
        private static string GetActiveWindowTitle()
        {
            const int     nChars = 256;
            StringBuilder Buff   = new StringBuilder(nChars);
            IntPtr        handle = User32Wrapper.GetForegroundWindow();

            if (User32Wrapper.GetWindowText(handle, Buff, nChars) > 0)
            {
                return($"handle:{handle} buff:{Buff}");
            }
            return($"handle:{handle}");
        }
        private string GetActiveWindowTitle()
        {
            const int     nChars = 256;
            StringBuilder Buff   = new StringBuilder(nChars);
            IntPtr        handle = User32Wrapper.GetForegroundWindow();

            if (User32Wrapper.GetWindowText(handle, Buff, nChars) > 0)
            {
                return(Buff.ToString());
            }
            return(null);
        }
Example #28
0
        public void RestoreParent()
        {
            if (_parentHandler != null)
            {
                User32Wrapper.SetParent(_currentHandler, _parentHandler.Value);
            }

            _parentHandler = null;

            ////恢复原始大小
            //if (_originalRect != null)
            //    User32WrapperEx.SetWindowPosEx(_currentHandler, _originalRect.Value);
        }
Example #29
0
        public void RestoreParent()
        {
            if (_workerw == IntPtr.Zero)
            {
                _workerw = GetWorkerW();
            }

            User32Wrapper.SetParent(_currentHandler, _parentHandler);

            //恢复原始大小
            if (_originalRect != null)
            {
                User32WrapperEx.SetWindowPosEx(_currentHandler, _originalRect.Value);
            }
        }
Example #30
0
        private void mainButton_Click(object sender, RoutedEventArgs e)
        {
            var processes = Process.GetProcessesByName("VRChat");

            if (!processes.Any())
            {
                MessageBox.Show("先にVRChatを起動してください。", "エラー", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                return;
            }

            var vrcWindowHandle = processes[0].MainWindowHandle;

            User32Wrapper.SetForegroundWindow(vrcWindowHandle);

            var inputs = User32Util.CreateKeyboardInputs(
                new (DwFlags dwFlags, VirtualKeyCode virtualKeyCode)[]