bool StartGame() { if (!File.Exists(GamePath)) { MessageBox.Show(EnglishText.HelpMessage_GameNotFoundHelpMessage); return(false); } try { GameRunTime = new Process(); GameRunTime.StartInfo = new ProcessStartInfo() { FileName = GamePath, WorkingDirectory = Path.GetDirectoryName(GamePath), Arguments = StartOptionsRunArgs }; GameRunTime.Start(); } catch (Exception ex) { MessageBox.Show($"{EnglishText.HelpMessage_GameLaunchErrorHelpMessage}\n{ex}"); return(false); } if (RuntimeProcess != null && RuntimeProcess != "") { Task FindGameTask = Task.Run(() => { GameRunTime = null; while (GameRunTime == null) { GameRunTime = Process.GetProcesses().FirstOrDefault(P => P.MainWindowHandle != IntPtr.Zero && P.ProcessName.ToLower() == RuntimeProcess); } while (!GameRunTime.Responding) { ; } }); TimeSpan TimeoutSpan = TimeSpan.FromMilliseconds(1000); FindGameTask.Wait(TimeoutSpan); } WindowHandleInfo Window = new WindowHandleInfo(GameRunTime.MainWindowHandle); Task InputTask = new Task(() => { if (StartOptionsInput != null && StartOptionsInput != "") { Thread.Sleep(50); Action[] Commands = TaPa_XYCyl.GetCommands(StartOptionsInput, Window); foreach (Action Command in Commands) { Command.Invoke(); } } }); Window.SetForegroundWindow(); InputTask.Start(); return(true); }
static string GetWindowModuleFileName(IntPtr hWnd) { uint processId = 0; const int nChars = 1024; StringBuilder filename = new StringBuilder(nChars); GetWindowThreadProcessId(hWnd, out processId); IntPtr hProcess = OpenProcess(1040, 0, processId); GetModuleFileNameEx(hProcess, IntPtr.Zero, filename, nChars); CloseHandle(hProcess); if (filename.ToString().ToLower().Contains("applicationframehost")) { var allChildWindows = new WindowHandleInfo(hWnd).GetAllChildHandles(); foreach (IntPtr hwnd_child in allChildWindows) { uint child_processId = 0; GetWindowThreadProcessId(hwnd_child, out child_processId); if (child_processId != processId) { return(GetWindowModuleFileName(hwnd_child)); } } } return(filename.ToString().ToLower()); }
public static async Task SendMessage(string ipcName, int ipcId, string command) { var wh = new WindowHandleInfo(IntPtr.Zero); var targetWindowHandles = wh.GetAllChildHandles() .Select( childWindow => { try { var prop = User32.GetProp(childWindow, ipcName).ToInt32(); if (prop == ipcId) { return(childWindow); } } catch (Exception) { // ignored } return(IntPtr.Zero); }) .Where(x => x != IntPtr.Zero) .Distinct() .ToList(); var cds = new User32.COPYDATASTRUCT { dwData = new IntPtr(ipcId), cbData = command.Length, lpData = command }; if (targetWindowHandles.Count > 0) { await Task.WhenAll( targetWindowHandles.Select( target => Task.Run( () => { User32.SendMessage(target, User32.WM_COPYDATA, IntPtr.Zero, ref cds); var lastError = Marshal.GetLastWin32Error(); if (lastError != 0) { using (var eventLog = new EventLog("Application")) { // TODO: "Application" / "Application Error" can be used without admin privileges, if we want our own source, it needs to be registered under Admin rights. eventLog.Source = "Application Error"; eventLog.WriteEntry("WIN32 error while sending message from Ridder.PhoneHelper.App.exe: " + lastError, EventLogEntryType.Error, lastError, 0); } } }))); } }
public void WindowEval() { WindowHandleInfo childWindows = new WindowHandleInfo(GetForegroundWindow()); foreach (Process i in Process.GetProcessesByName("T")) { StringBuilder className = new StringBuilder(255); //Form1.RichTextBox1.AppendText("Main Window: " & Form2.GetActiveWindowTitle(i.MainWindowHandle) & " Class: " & Form2.GetClassName(i.MainWindowHandle, className, className.Capacity).ToString & " " & vbCrLf) if (GetChildWindows(i.MainWindowHandle).Count() > 1) { StringBuilder wTitle = new StringBuilder(255); GetClassName(GetChildWindows(i.MainWindowHandle)[1], wTitle, wTitle.Capacity); // Form1.RichTextBox1.AppendText("Handle: " & GetChildWindows(i.MainWindowHandle)(1).ToString & " ") //Form1.RichTextBox1.AppendText("First Child Window: " & Form2.GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)(1)) & " Classname: " & wTitle.ToString & vbCrLf) if (i.MainWindowHandle != IntPtr.Zero) { WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); GetWindowPlacement(i.MainWindowHandle, ref placement); switch (placement.showCmd) { case 1: // TODO: might not be correct. Was : Exit Select break; case 2: break; case 3: //HideBar(ref Form1.showFlag); break; // TODO: might not be correct. Was : Exit Select } } if (GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)[1]).Contains("Review Patient's Orders")) { ShowBar(ref showFlag); } else if (GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)[1]).Contains("Rounding List")) { HideBar(ref showFlag); } } //For Each k As IntPtr In GetChildWindows(i.MainWindowHandle) // Dim wTitle As New StringBuilder(255) // Form2.GetClassName(k, wTitle, wTitle.Capacity) // Form1.RichTextBox1.AppendText("Handle: " & k.ToString & " ") // Form1.RichTextBox1.AppendText("Name: " & Form2.GetActiveWindowTitle(k) & " Classname: " & wTitle.ToString & vbCrLf) //Next } }
private void Win_Click(object sender, RoutedEventArgs e) { //Process[] p = Process.GetProcesses(); //Process fs = null; //foreach(var pr in p) //{ // Console.WriteLine(pr.ProcessName); // if(pr.ProcessName == "FlightSimulator") // { // Console.WriteLine(pr.Handle.ToString("X")); // IntPtr child2 = Helpers.FindWindowEx2(pr.Handle, IntPtr.Zero, "AceApp", "$AS1000_PFD_1"); // } //} // return; IntPtr parent = IntPtr.Zero; foreach (var p in Process.GetProcesses()) { if (p.ProcessName.Contains("Simu")) { Console.WriteLine(p.ProcessName); parent = p.Handle; } } //IntPtr parent = Helpers.FindWindowA("Microsoft Flight Simulator - 1.16.2.0"); //IntPtr parent = Helpers.FindWindowA("Microsoft Flight Simulator"); //Console.WriteLine(parent.ToString("X")); WindowHandleInfo hi = new WindowHandleInfo(parent); var list = hi.GetAllChildHandles(); foreach (var w in list) { Console.WriteLine($"{w.ToString()}, {w.ToString("X")}"); Rect size = hi.GetPos(w); //{ 319,479,1024,1024} //hi.SetPos(w, 0, 0, 600, 400); if (size.Left == 319 && size.Width == 1024) { //hi.SetPos((IntPtr)w, 400, 400, 800, 800); } } }
public void WindowEval(object state) { WindowHandleInfo childWindows = new WindowHandleInfo(GetForegroundWindow()); foreach (Process i in Process.GetProcessesByName("T")) { StringBuilder className = new StringBuilder(255); //Form1.RichTextBox1.AppendText("Main Window: " & Form2.GetActiveWindowTitle(i.MainWindowHandle) & " Class: " & Form2.GetClassName(i.MainWindowHandle, className, className.Capacity).ToString & " " & vbCrLf) if (GetChildWindows(i.MainWindowHandle).Count() > 1) { StringBuilder wTitle = new StringBuilder(255); GetClassName(GetChildWindows(i.MainWindowHandle)[1], wTitle, wTitle.Capacity); // Form1.RichTextBox1.AppendText("Handle: " & GetChildWindows(i.MainWindowHandle)(1).ToString & " ") //Form1.RichTextBox1.AppendText("First Child Window: " & Form2.GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)(1)) & " Classname: " & wTitle.ToString & vbCrLf) if (i.MainWindowHandle != IntPtr.Zero) { WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); GetWindowPlacement(i.MainWindowHandle, ref placement); switch (placement.showCmd) { case 1: //Normal break; case 2: //Minimized break; case 3: //Maximized HideBar(ref showFlag); break; } } if (GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)[1]).Contains("Review Patient's Orders")) { ShowBar(ref showFlag); } else if (GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)[1]).Contains("Rounding List") || GetActiveWindowTitle(GetChildWindows(i.MainWindowHandle)[1]).Contains("Physician Desktop")) { HideBar(ref showFlag); } } } }
public List <IntPtr> GetChildWindows(IntPtr handle) { var allChildWindows = new WindowHandleInfo(windowHandle).GetAllChildHandles(); return(allChildWindows); }
ProcessSummary[] GetTabs(Process proc) { var allChildWindows = new WindowHandleInfo(proc.MainWindowHandle).GetAllChildHandles(); return proc. }