public void ActivateApplication() { var mainFormHandle = IntPtr.Zero; foreach (var process in Process.GetProcesses().Where(x => x.ProcessName.Contains("SiteManager"))) { if (process.MainWindowHandle.ToInt32() == 0) { continue; } mainFormHandle = process.MainWindowHandle; break; } if (mainFormHandle.ToInt32() == 0) { return; } WinAPIHelper.ShowWindow(mainFormHandle, WindowShowStyle.ShowMaximized); WinAPIHelper.MakeTopMost(mainFormHandle); WinAPIHelper.MakeNormal(mainFormHandle); uint lpdwProcessId; WinAPIHelper.AttachThreadInput(WinAPIHelper.GetCurrentThreadId(), WinAPIHelper.GetWindowThreadProcessId(WinAPIHelper.GetForegroundWindow(), out lpdwProcessId), true); WinAPIHelper.SetForegroundWindow(mainFormHandle); WinAPIHelper.AttachThreadInput(WinAPIHelper.GetCurrentThreadId(), WinAPIHelper.GetWindowThreadProcessId(WinAPIHelper.GetForegroundWindow(), out lpdwProcessId), false); }
private void FormFileDescription_Shown(object sender, EventArgs e) { WinAPIHelper.ShowWindow(Handle, WindowShowStyle.ShowNormal); WinAPIHelper.MakeTopMost(Handle); WinAPIHelper.MakeNormal(Handle); uint lpdwProcessId; WinAPIHelper.AttachThreadInput(WinAPIHelper.GetCurrentThreadId(), WinAPIHelper.GetWindowThreadProcessId(WinAPIHelper.GetForegroundWindow(), out lpdwProcessId), true); WinAPIHelper.SetForegroundWindow(Handle); WinAPIHelper.AttachThreadInput(WinAPIHelper.GetCurrentThreadId(), WinAPIHelper.GetWindowThreadProcessId(WinAPIHelper.GetForegroundWindow(), out lpdwProcessId), false); }
public void Disconnect() { if (ExcelObject != null) { foreach (Workbook workbook in ExcelObject.Workbooks) { workbook.Close(); } uint processId; WinAPIHelper.GetWindowThreadProcessId(new IntPtr(ExcelObject.Hwnd), out processId); Process.GetProcessById((int)processId).Kill(); } Utilities.ReleaseComObject(ExcelObject); GC.Collect(); }
protected void Close() { try { _powerPointObject.Quit(); uint lpdwProcessId; WinAPIHelper.GetWindowThreadProcessId(WindowHandle, out lpdwProcessId); var powerPointProcessId = (int)lpdwProcessId; Process.GetProcessById(powerPointProcessId).CloseMainWindow(); } catch { } finally { try { Process.GetProcessesByName("POWERPNT").ToList().ForEach(p => p.Kill()); } catch { } } }
private void OnCheckProcessDoWork(object sender, DoWorkEventArgs e) { _checkTimer.Stop(); _currentIteration = 0; _newStatus = BarVsProcessStatus.OnTop; if (Process.GetProcesses() .Any(process => _processConfiguration .Any(processConfiguration => processConfiguration.Behaviour == ExternalProcessBehaviour.HideIfProcessIsRunning && String.Compare(processConfiguration.Name, process.ProcessName, StringComparison.OrdinalIgnoreCase) == 0))) { _newStatus = BarVsProcessStatus.Hidden; _checkProcess.ReportProgress(-1); return; } do { uint processId; var foregroundWindow = WinAPIHelper.GetForegroundWindow(); WinAPIHelper.GetWindowThreadProcessId(foregroundWindow, out processId); var p = Process.GetProcessById((int)processId); var processName = p.ProcessName.ToLower(); if (processName == "idle") { continue; // Ignore Idle process } _newStatus = BarVsProcessStatus.OnTop; foreach (var processConfiguration in _processConfiguration.Where(configuration => new[] { ExternalProcessBehaviour.HideIfIsActive, ExternalProcessBehaviour.HideIfIsActiveAndMaximized, ExternalProcessBehaviour.SetNotOnTopIfIsActive, ExternalProcessBehaviour.HideIfTitlebarMatches } .Contains(configuration.Behaviour))) { try { if (processConfiguration.Behaviour == ExternalProcessBehaviour.HideIfTitlebarMatches) { if (!p.MainWindowTitle.Contains(processConfiguration.Name)) { continue; } _newStatus = BarVsProcessStatus.Hidden; break; } if (String.Compare(processName, processConfiguration.Name, StringComparison.OrdinalIgnoreCase) != 0) { continue; } switch (processConfiguration.Behaviour) { case ExternalProcessBehaviour.HideIfIsActive: _newStatus = BarVsProcessStatus.Hidden; break; case ExternalProcessBehaviour.HideIfIsActiveAndMaximized: if (IsMaximized(p)) { _newStatus = BarVsProcessStatus.Hidden; } break; case ExternalProcessBehaviour.SetNotOnTopIfIsActive: _newStatus = BarVsProcessStatus.NotOnTop; break; } } catch { } } if (_newStatus != _lastStatus) { _checkProcess.ReportProgress(-1); return; } Thread.Sleep(Delay); }while (_currentIteration++ < Iterations); }