【问题标题】:C# Embed QEMU Into panel - how to get/generate QEMU window handle?C# Embed QEMU Into panel - 如何获取/生成 QEMU 窗口句柄?
【发布时间】:2015-09-04 03:13:05
【问题描述】:

我正在尝试将 QEMU 嵌入到 .NET 4.5 的面板中。

...我找到了应用程序面板示例,它使用了 WinAPI SetParent 函数。

很好,但是如何获取或生成 QEMU 窗口的句柄?

我查看(可能已停产?)QEMU Manager,我发现 Manager 正在执行带有 -hwnd 参数的 QEMU 仿真器,并在其后传递数字(可能是 int 指针?)。

我尝试使用 Process.MainWindowHandle 作为窗口句柄,并使用 WaitForInputHandle() 函数等待它,但出现异常,因为 QEMU 是控制台应用程序...

那么,最后一个问题是:如何获取/生成 QEMU 窗口的窗口句柄?

...请记住,我需要多个 QEMU 实例。

感谢您的帮助,
Vít "VitekST" Staniček

【问题讨论】:

    标签: c# windows embed panel qemu


    【解决方案1】:

    在 VB 中:

    Private Function WaitForMainWindowHandle(proc As Process, Optional maxIntent As Integer = Integer.MaxValue) As IntPtr
        Dim hwnd As IntPtr
        Do
            hwnd = proc.MainWindowHandle
            If hwnd <> IntPtr.Zero Then Return hwnd
            Application.DoEvents() // or:
            Threading.Thread.Sleep(25)
            maxIntent -= 1
        Loop While hwnd = IntPtr.Zero AndAlso maxIntent > 0
        '**********
        Return hwnd
    End Function
    

    用途:

        Dim hwnd As IntPtr = WaitForMainWindowHandle(procQEMU, 50)
        Dim message As New StringBuilder(256)
        SendMessage(hwnd, WM_GETTEXT, message.Capacity, message)
        Console.WriteLine(message)
    

    【讨论】:

      【解决方案2】:

      为遇到此问题的任何人翻译 user5154346 的答案:

      private IntPtr WaitForMainWindowHandle(Process proc, int maxIntent = int.MaxValue)
      {
          IntPtr hwnd;
          do
          {
              hwnd = proc.MainWindowHandle;
              if (hwnd != IntPtr.Zero)
                  return hwnd;
              System.Threading.Thread.Sleep(25);
              maxIntent--;
          } while (hwind == IntPtr.Zero && maxIntent > 0);
          return hwnd;
      }
      

      用途:

      IntPtr hwnd = WaitForMainWindowHandle(procQEMU, 50);
      StringBuilder message = new StringBuilder(256);
      SendMessage(hwnd, WM_GETTEXT, message.Capacity, message);
      Console.WriteLine(message);
      

      【讨论】:

        猜你喜欢
        • 2016-01-26
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 2012-11-22
        相关资源
        最近更新 更多