private void runningAppsContextMenuStrip_Opening(object sender, CancelEventArgs e) { var runningWindows = User32Windows.GetDesktopWindows(); RefreshWindowsLists(runningWindows); var backupMenuItems = BackupMenuItems(); runningAppsContextMenuStrip.Items.Clear(); var count = 0; for (int i = 0; i < m_RunningWindows.Count; i++) { if (m_RunningWindows[i].IsVisible) { var title = m_RunningWindows[i].Title; if (title == "Пуск" || title == "Program Manager" || title == "Windows Shell Experience Host") { m_RunningWindows.RemoveAt(i); i--; continue; } runningAppsContextMenuStrip.Items.Add(title, m_RunningWindows[i].Icon != null ? m_RunningWindows[i].Icon.ToBitmap() : null); var countMenu = count; runningAppsContextMenuStrip.Items[count].Click += (senderMenu, eMenu) => { IntPtr h = m_RunningWindows[countMenu].Handle; User32Windows.SetForegroundWindow(h); if (User32Windows.IsIconic(h)) { User32Windows.ShowWindow(m_RunningWindows[countMenu].Handle, User32Windows.SW_RESTORE); } }; count++; } } RestoreMenuItems(backupMenuItems); }
private void ProcessClick() { if (!m_IsRunning) { return; } if (!User32Windows.IsWindow(m_HostWindowHwnd)) { MessageBox.Show("Hosting window not found. Close the tool or set its hosting window.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (this.m_SendCommandType == SendCommandType.ActivateWindow) { int handleTmp; if (int.TryParse(m_Commands, out handleTmp)) { var handle = (IntPtr)handleTmp; if (User32Windows.IsIconic(handle)) { User32Windows.ShowWindow(handle, User32Windows.SW_RESTORE); } User32Windows.SetForegroundWindow(handle); } else { MessageBox.Show(String.Format("Window {0} not found.", m_Commands), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } return; } else if (this.m_SendCommandType == SendCommandType.ActivateLastN) { int lastN; if (int.TryParse(m_Commands, out lastN)) { var handle = IntPtr.Zero; var windows = User32Windows.GetDesktopWindows(getIcons: false); int currentProcId; User32Windows.GetWindowThreadProcessId(this.Handle, out currentProcId); if (lastN < windows.Count) { var i = 0; for ( ; i < lastN; i++) { int procId; User32Windows.GetWindowThreadProcessId(windows[i].Handle, out procId); if (procId == currentProcId) { lastN++; if (lastN == windows.Count) { return; } } } handle = windows[i - 1].Handle; } else { return; } if (User32Windows.IsIconic(handle)) { User32Windows.ShowWindow(handle, User32Windows.SW_RESTORE); } User32Windows.SetForegroundWindow(handle); } else { MessageBox.Show(String.Format("Window {0} not found.", m_Commands), this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } return; } User32Windows.SetForegroundWindow(m_HostWindowHwnd); string backup = null; if (this.m_SendCommandType == SendCommandType.Clipboard) { backup = m_Commands; m_Commands = m_Commands == String.Empty ? Clipboard.GetText() : m_Commands.Replace("{clipboard}", Clipboard.GetText()); } if (m_Commands == String.Empty) { return; } if (this.m_Sleep) { Thread.Sleep(m_SleepTimeout); } // // Working code (using SendKeys class). // var commands = m_Commands.Split(new string[] { "\r\n" }, StringSplitOptions.None); for (int i = 0; i < commands.Length; i++) { if (this.m_Sleep) { Thread.Sleep(m_SleepTimeout); } SendKeys.SendWait(commands[i]); } if (this.m_SendCommandType == SendCommandType.Clipboard) { m_Commands = backup; } var lastWindow = User32Windows.GetLastActiveWindow(hwndExcept: this.Handle); User32Windows.SetForegroundWindow(lastWindow.Handle); // // Working code (using InputSimulator http://inputsimulator.codeplex.com/). // // var simulator = new InputSimulator(); // simulator.Keyboard.TextEntry(m_Commands); }