Получение ручки скрытой формы - PullRequest
0 голосов
/ 31 июля 2009

У меня есть консольное приложение (SRMan.exe), которое происходит от System.Windows.Forms.Form. Я мог бы скрыть форму, пока exe работает. код, который я использовал здесь

    this.Opacity = 0;
    this.Size = new Size(0, 0);
    this.Location = new Point(-100, -100);
    this.Visible = false;

Также, для свойств формы ShowIcon и ShowInTaskbar задано значение false.

но я не смог получить дескриптор окна того запущенного процесса. Код, который я использовал здесь

Process[] process1 = Process.GetProcessesByName("SRMan");
IntPtr pt = process1[0].MainWindowHandle;

Любая помощь приветствуется!

Спасибо
Карим.

Ответы [ 2 ]

2 голосов
/ 31 июля 2009

В какой момент вы звоните:

Process[] process1 = Process.GetProcessesByName("SRMan");
IntPtr pt = process1[0].MainWindowHandle;

pt будет возвращено как ноль, или «MainWindowHandle» может вызвать исключение, если дескриптор главного окна еще не создан.

Попробуйте изменить код на:

Process[] process1 = Process.GetProcessesByName("SRMan");
process1[0].WaitForInputIdle();
IntPtr pt = process1[0].MainWindowHandle;

, так как это заставит ваш код ждать полной загрузки процесса. ( статья MSDN)

Например, следующий код отлично работает для меня:

 private Thread thd;

 private void Form1_Load(object sender, EventArgs e)
 {            
     thd = new Thread(new ThreadStart(GetHandle));
     thd.Start();
     this.Opacity = 0;
     this.Size = new Size(0, 0);
     this.Location = new Point(-100, -100);
     this.Visible = false;
 }

 private void GetHandle()
 {
     Process[] process1 = Process.GetProcessesByName("WindowsFormsApplication12.vshost");
     process1[0].WaitForInputIdle();
     IntPtr pt = process1[0].MainWindowHandle;
     MessageBox.Show(pt.ToString());
 }
0 голосов
/ 31 июля 2009

Есть ли причина, по которой вы не можете просто взять дескриптор из свойства Handle формы? Все, что происходит от класса Control, что и формы, будет иметь свойство Handle.

Почему вы прибегаете к извлечению из процесса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...