我想创建一个操作一些Windows进程的隐藏表单

时间:2016-06-10 06:00:38

标签: c# winforms process

我想创建一个始终打开的隐藏应用程序,我希望此应用程序检测是否打开了具有特定文本的进程以打开另一个应用程序并将其始终置于顶部。 例如:

UIWebView

This is the app that must be detected after its text name

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

使用正确的工具完成工作 使用Windows服务项目模板创建Windows服务。

答案 1 :(得分:1)

  1. 创建一个在后台运行的窗口少表单应用程序。粗略的想法是创建一个Windows窗体应用程序并禁用可视属性。
  2. <强> Program.cs的

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
            //Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    

    <强> Form.cs

    public partial class Form1 : Form
    {
        public Form1()
        {
            //InitializeComponent();
        }
    
    
        #region Silent mode
    
        private static Form1 _instance;
    
        /// <summary>
        /// Prevent window getting visible
        /// </summary>
        /// <param name="value"></param>
        protected override void SetVisibleCore(bool value)
        {
            // Prevent window getting visible            
            CreateHandle();
            _instance = this;
    
            //do not show the window
            value = false;
    
            base.SetVisibleCore(value);
        }
    
        #endregion
    
    }
    
    1. 以特定间隔启用计时器触发器,浏览正在运行的进程并实现您想要执行的操作。

      Timer _timer;
      
      public Form1()
      {
          //InitializeComponent();
          _timer = new Timer();
          _timer.Interval = 1000; //ms
          _timer.Elapsed += _timer_Elapsed;
      }
      
      private void _timer_Elapsed(object sender, ElapsedEventArgs e)
      {
          foreach (var process in Process.GetProcesses())
          {
              //compare and perform tasks
          }
      }
      

答案 2 :(得分:0)

这是我使用的方法。 processName是您尝试查找的进程的名称,newPrecessPath是您不会运行的进程的路径 如果你不想隐藏你的主要只是使用this.Hide() 您可以在计时器中使用此方法每隔x秒尝试查找运行进程。

private void LookProcess(string processName, string newProcessPath)
        {
            foreach (var process in Process.GetProcesses())
            {
                if (process.ProcessName == processName)
                {
                    ProcessStartInfo prcinf = new ProcessStartInfo();
                    prcinf.WindowStyle = ProcessWindowStyle.Maximized;
                    prcinf.FileName = newProcessPath;

                    Process.Start(prcinfprc);
                }
            }
        }