sevimtel Ответов: 1

Я не могу получить mainwindow handle id windows ce


ProcessInfo[] procs = null;
            if (denizbankProcess == null || (denizProcess != null && denizProcess.HasExited))
            {
                procs = ProcessCE.GetProcesses();
                if (procs.Where(p => p.FullPath.Contains("DotNetDeniz")).Count() > 0)
                {
                    var pid = procs.Where(p => p.FullPath.Contains("DotNetDeniz")).First().Pid;
                    denizbankProcess = Process.GetProcessById((int)pid);
                }
                //denizProcess = Process.GetProcessById(Marshal.ReadInt32(procs.Where(p => p.FullPath.Contains("DotNetEMVDeniz")).First().Pid));
                else
                {
                    var psi = new System.Diagnostics.ProcessStartInfo();
                    psi.FileName = "\\PocketStore\\WIN_CE\\DotNet\\Deniz\\DotNetDeniz.exe";
                    denizProcess = Process.Start(psi);
                    Thread.Sleep(10000);
                }
            }


Что я уже пробовал:

Я пытаюсь показать запущенное приложение.
Во-первых, я могу запустить приложение, во-вторых, проверить, работает ли оно в фоновом режиме, и хочу показать его, но это не работает

1 Ответов

Рейтинг:
2

Wendelius

Вы, вероятно, могли бы использовать Функция SetForegroundWindow | Microsoft Docs[^] чтобы довести окно до самого верха

Что-то вроде

[System.Runtime.InteropServices.DllImport("user32.dll")]
internal static extern int SetForegroundWindow(IntPtr hwnd);

...

void YourMethod() {
   ProcessInfo[] procs = null;
   if (denizbankProcess == null || (denizProcess != null && denizProcess.HasExited))
   {
      procs = ProcessCE.GetProcesses();
      if (procs.Where(p => p.FullPath.Contains("DotNetDeniz")).Count() > 0)
      {
         var pid = procs.Where(p => p.FullPath.Contains("DotNetDeniz")).First().Pid;
         denizbankProcess = Process.GetProcessById((int)pid);
         SetForegroundWindow(denizbankProcess.MainWindowHandle);
      }
      //denizProcess = Process.GetProcessById(Marshal.ReadInt32(procs.Where(p => p.FullPath.Contains("DotNetEMVDeniz")).First().Pid));
      else
      {
         var psi = new System.Diagnostics.ProcessStartInfo();
         psi.FileName = "\\PocketStore\\WIN_CE\\DotNet\\Deniz\\DotNetDeniz.exe";
         denizProcess = Process.Start(psi);
         Thread.Sleep(10000);
      }
   }
}


Обратите внимание, что если окно свернуто, то вам необходимо использовать Функция ShowWindow | Microsoft Docs[^] чтобы сначала восстановить или развернуть окно.