internal static extern IntPtr CreateWindowEx( WindowStylesEx dwExStyle, string lpClassName, string lpWindowName, WindowStyles dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
public static extern int SetWindowLong(IntPtr hWnd, GWL nIndex, WindowStylesEx dwNewLong);
public static extern IntPtr CreateWindowEx( WindowStylesEx dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, WindowStyles dwStyle, Int32 x, Int32 y, Int32 nWidth, Int32 nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
//取消标志位 public static IntPtr UnsetWindowStylesEx(IntPtr hWnd, WindowStylesEx wse) { var style = GetWindowLongPtr(hWnd, WindowLongFlags.GWL_EXSTYLE); return SetWindowLongPtr(hWnd, WindowLongFlags.GWL_EXSTYLE, IntPtrEnumHelper.UnsetFlag(style, wse)); }
public static extern bool AdjustWindowRectEx(ref Rect lpRect, WindowStyles dwStyle, bool bMenu, WindowStylesEx dwExStyle);
private static IntPtr CreateWindow(ushort regResult, int x, int y, int width, int height, WindowStyles ws, WindowStylesEx wsEx) { var hWnd = User32.CreateWindowEx(wsEx, regResult, string.Empty, ws, x, y, width, height, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); hWnd.Validate(true); return(hWnd); }
public static extern IntPtr CreateWindowEx(WindowStylesEx dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, WindowStyles dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
public static extern WindowStylesEx SetWindowLong(IntPtr hWnd, int nIndex, WindowStylesEx styles);
public static void SetWindow(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, WindowStyles styles, WindowStylesEx stylesEx, SetWindowPositionOptions windowPositionOptions) { SetWindowStyles(hWnd, styles); SetWindowStylesEx(hWnd, stylesEx); SetWindowPos(hWnd, hWndInsertAfter, x, y, cx, cy, windowPositionOptions); }
public static extern IntPtr CreateWindowEx(WindowStylesEx dwExStyle, string lpClassName, string lpWindowName, WindowStyles dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);
public static extern bool AdjustWindowRectEx(ref Rect lpRect, [In] WindowStyles dwStyle, [In] bool bMenu, [In] WindowStylesEx dwExStyle);
public static extern IntPtr CreateWindowExW(WindowStylesEx dwExStyle, ushort lpszClassName, [MarshalAs(UnmanagedType.LPTStr)] string lpszWindowName, WindowStyles style, int x, int y, int width, int height, IntPtr hWndParent, IntPtr hMenu, IntPtr hInst, IntPtr lpParam);
//Check if process has multiple windows async Task <IntPtr> CheckProcessWindowsWin32AndWin32Store(DataBindApp dataBindApp, ProcessMulti processMulti) { try { //Get threads from process ProcessThreadCollection processThreads = GetProcessThreads(processMulti); //Check threads from process int processThreadCount = processThreads.Count; if (processThreadCount > 1) { Debug.WriteLine("Found window threads: " + processThreadCount); List <DataBindString> multiAnswers = new List <DataBindString>(); List <IntPtr> multiVariables = new List <IntPtr>(); foreach (ProcessThread threadProcess in processThreads) { foreach (IntPtr threadWindowHandle in EnumThreadWindows(threadProcess.Id)) { try { //Check if window handle is already added string windowHandleString = threadWindowHandle.ToString(); if (multiAnswers.Any(x => x.Data1.ToString() == windowHandleString)) { //Debug.WriteLine("Duplicate window handle detected, skipping."); continue; } //Validate the window handle if (threadWindowHandle == processMulti.WindowHandle || ValidateWindowHandle(threadWindowHandle)) { //Get the window state WindowPlacement processWindowState = new WindowPlacement(); GetWindowPlacement(threadWindowHandle, ref processWindowState); //Get the window title string windowTitleString = GetWindowTitleFromWindowHandle(threadWindowHandle); string windowSubString = windowHandleString; //Check window main if (threadWindowHandle == processMulti.WindowHandle) { windowSubString += " (Main)"; } //Check window style WindowStylesEx windowStyle = (WindowStylesEx)GetWindowLongAuto(threadWindowHandle, (int)WindowLongFlags.GWL_EXSTYLE).ToInt64(); if (windowStyle.HasFlag(WindowStylesEx.WS_EX_TOOLWINDOW) || windowStyle.HasFlag(WindowStylesEx.WS_EX_LAYERED)) { windowSubString += " (Tool)"; } else { windowSubString += " (Window)"; } //Check window state if (processWindowState.windowShowCommand == WindowShowCommand.Minimized) { windowSubString += " (Minimized)"; } //Check explorer window if (dataBindApp.NameExe.ToLower() == "explorer.exe") { if (windowTitleString == "Unknown" || windowStyle.HasFlag(WindowStylesEx.WS_EX_TOOLWINDOW) || windowStyle.HasFlag(WindowStylesEx.WS_EX_LAYERED)) { continue; } } DataBindString Answer1 = new DataBindString(); Answer1.ImageBitmap = FileToBitmapImage(new string[] { "Assets/Default/Icons/AppMiniMaxi.png" }, vImageSourceFolders, vImageBackupSource, IntPtr.Zero, -1, 0); Answer1.Name = windowTitleString; Answer1.NameSub = windowSubString; Answer1.Data1 = windowHandleString; //Add window to selection if (threadWindowHandle == processMulti.WindowHandle) { multiAnswers.Insert(0, Answer1); multiVariables.Insert(0, threadWindowHandle); } else { multiAnswers.Add(Answer1); multiVariables.Add(threadWindowHandle); } } } catch { Debug.WriteLine("Failed checking window handle: " + threadWindowHandle); } } } //Check if there are multiple answers if (multiVariables.Count == 1) { Debug.WriteLine("There is only one visible window, returning the default window."); return(multiVariables.FirstOrDefault()); } else if (multiVariables.Count == 0) { return(IntPtr.Zero); } DataBindString AnswerClose = new DataBindString(); AnswerClose.ImageBitmap = FileToBitmapImage(new string[] { "Assets/Default/Icons/AppClose.png" }, vImageSourceFolders, vImageBackupSource, IntPtr.Zero, -1, 0); AnswerClose.Name = "Close application"; multiAnswers.Add(AnswerClose); DataBindString AnswerLaunch = new DataBindString(); AnswerLaunch.ImageBitmap = FileToBitmapImage(new string[] { "Assets/Default/Icons/AppLaunch.png" }, vImageSourceFolders, vImageBackupSource, IntPtr.Zero, -1, 0); AnswerLaunch.Name = "Launch new instance"; multiAnswers.Add(AnswerLaunch); DataBindString AnswerRestartCurrent = new DataBindString(); if (!string.IsNullOrWhiteSpace(processMulti.Argument)) { AnswerRestartCurrent.ImageBitmap = FileToBitmapImage(new string[] { "Assets/Default/Icons/AppRestart.png" }, vImageSourceFolders, vImageBackupSource, IntPtr.Zero, -1, 0); AnswerRestartCurrent.Name = "Restart application"; AnswerRestartCurrent.NameSub = "(Current argument)"; multiAnswers.Add(AnswerRestartCurrent); } DataBindString AnswerRestartWithout = new DataBindString(); AnswerRestartWithout.ImageBitmap = FileToBitmapImage(new string[] { "Assets/Default/Icons/AppRestart.png" }, vImageSourceFolders, vImageBackupSource, IntPtr.Zero, -1, 0); AnswerRestartWithout.Name = "Restart application"; if (!string.IsNullOrWhiteSpace(dataBindApp.Argument) || dataBindApp.Category == AppCategory.Shortcut || dataBindApp.Category == AppCategory.Emulator || dataBindApp.LaunchFilePicker) { AnswerRestartWithout.NameSub = "(Default argument)"; } else { AnswerRestartWithout.NameSub = "(Without argument)"; } multiAnswers.Add(AnswerRestartWithout); //Ask which window needs to be shown DataBindString messageResult = await Popup_Show_MessageBox(dataBindApp.Name + " has multiple windows open", "", "Please select the window that you wish to be shown:", multiAnswers); if (messageResult != null) { if (messageResult == AnswerLaunch) { return(new IntPtr(-50)); } else if (messageResult == AnswerRestartCurrent) { return(new IntPtr(-75)); } else if (messageResult == AnswerRestartWithout) { return(new IntPtr(-80)); } else if (messageResult == AnswerClose) { return(new IntPtr(-100)); } else { return(multiVariables[multiAnswers.IndexOf(messageResult)]); } } else { //Cancel the selection return(new IntPtr(-200)); } } else { Debug.WriteLine("Single window thread process: " + processMulti.WindowHandle); return(processMulti.WindowHandle); } } catch { return(IntPtr.Zero); } }