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);
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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);
        }