c# 在 SetParent user32.dll 时无法聚焦

c# can't focus when SetParent user32.dll

我正在尝试为扑克制作 HUD,

所以我的想法是在扑克牌应用程序(这不是我的应用程序)上设置 Form 并且即使我移动扑克牌 table 也始终保持表格在 table 上

所以我使用

从 table 获取 IntPtr
  [DllImport("user32.dll")]
    public static extern int EnumWindows(EnumWindowsCallback lpEnumFunc, int lParam);

我需要 table 每个玩家的 Form 来显示玩家的信息

所以我使用

创建了我附加到扑克table的表格
[DllImport("user32.dll")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

但是当我显示表格时我失去了焦点!我就是无法点击扑克 table 或我的主机。解决方案?

    private void displayHudForEachPlayer(IntPtr pokerTable) {


        StringBuilder windowTitle = new StringBuilder(256);
        GetWindowText(pokerTable, windowTitle, windowTitle.Capacity);

        if (windowTitle.ToString().Contains("Real money"))
        {

            HudPlayerView hudPlayer1 = new HudPlayerView();
            //hudPlayer1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

            Console.WriteLine(windowTitle.ToString());

            IntPtr childHandle = hudPlayer1.Handle;

            ParentWndWrapper oParentWnd = new ParentWndWrapper(pokerTable);
            SetParent(childHandle, pokerTable);

            hudPlayer1.SetBounds(0, 0, 100, 50);
            hudPlayer1.ShowDialog();
        }
    }

我也试过

IWin32Window w = Control.FromHandle(pokerTable);
hudPlayer1.ShowDialog(w);

而不是 SetParent,但结果相同。

您正在调用 ShowDialog(),它显示一个模态 window,它将阻止您在模态对话框关闭之前与任何其他内容进行交互。

尝试使用 Form.Show() 并在每个表单上设置 TopMost = true,这样当您单击扑克应用程序时它们就不会被遮盖。