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 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); }
/// <summary> /// 主要用来处理剪切板消息和热键 /// </summary> /// <param name="hwnd"></param> /// <param name="msg"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <param name="handled"></param> /// <returns></returns> public IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { if (msg == WM_CLIPBOARDUPDATE) { if (WatchStatus) { ClipModel clip = clipService.HandClip(); if (string.IsNullOrWhiteSpace(clip.ClipValue)) { handled = true; return(IntPtr.Zero); } AddClip(clip); if (clip.NeedOverride) { Task.Run(() => { //设置剪切板前取消监听 WatchStatus = false; Application.Current.Dispatcher.Invoke(() => { clipService.SetValueToClipboard(clip); }); //设置剪切板后恢复监听 WatchStatus = true; }); } } handled = true; } //触发显示界面快捷键 else if (msg == HotKeyManager.WM_HOTKEY) { if (hotkeyAtom == wParam.ToInt32()) { activityWindow = WinAPIHelper.GetForegroundWindow(); if (WinAPIHelper.GetCursorPos(out WinAPIHelper.POINT point)) { double x = SystemParameters.WorkArea.Width; //得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height; //得到屏幕工作区域高度 double mx = CursorHelp.ConvertPixelsToDIPixels(point.X); double my = CursorHelp.ConvertPixelsToDIPixels(point.Y); if (mx > x - ActualWidth) { Left = x - ActualWidth; } else { Left = mx; } if (my > y - ActualHeight) { Top = y - ActualHeight - 2; } else { Top = my - 2; } } Show(); Activate(); Topmost = true; webView1.Focus(); webView1.CoreWebView2.ExecuteScriptAsync("show()"); } handled = true; } return(IntPtr.Zero); }
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); }