Esempio n. 1
0
        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);
                        }
                    }
                })));
            }
        }
Esempio n. 2
0
        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);
                }
            }
        }