В какой момент вы звоните:
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());
}