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
,这样当您单击扑克应用程序时它们就不会被遮盖。
我正在尝试为扑克制作 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
,这样当您单击扑克应用程序时它们就不会被遮盖。