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); }
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); }
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; }
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); }
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); }
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))); } }
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); }
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))); } }
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); }
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'))); }
/// <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); }
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; }
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); }
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); } }
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))); } }
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); } }
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))); } }
//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); }
public void RestoreParent() { if (_parentHandler != null) { User32Wrapper.SetParent(_currentHandler, _parentHandler.Value); } _parentHandler = null; ////恢复原始大小 //if (_originalRect != null) // User32WrapperEx.SetWindowPosEx(_currentHandler, _originalRect.Value); }
public void RestoreParent() { if (_workerw == IntPtr.Zero) { _workerw = GetWorkerW(); } User32Wrapper.SetParent(_currentHandler, _parentHandler); //恢复原始大小 if (_originalRect != null) { User32WrapperEx.SetWindowPosEx(_currentHandler, _originalRect.Value); } }
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)[]