提问人:Wesam Nafaa 提问时间:6/21/2023 更新时间:6/21/2023 访问量:54
关于 SetParent API 的问题,它不适用于 Windows 11
Question about SetParent API, it doesn't work on Windows 11
问:
大家晚上好 对不起我平庸的英语
我有一个关于 SetParent API 的问题。当我在 Windows 10 上运行窗口时,它可以正常工作并包含我想要的任何程序
但是当程序在 Windows 11 上执行时,它什么都不做,例如,记事本正常运行并属于桌面,而不是我窗口中的容器。
这是我目前正在使用的:
Public Class WindowsApiSetAnyWindowParent
Public Declare Function SetParent Lib "user32.dll" (
ByVal hWndChild As IntPtr,
ByVal hWndNewParent As IntPtr
) As IntPtr
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongPtrA" (
ByVal hwnd As IntPtr,
ByVal nIndex As Integer,
ByVal dwNewLong As Long
) As Long
Public Declare Function MoveWindow Lib "user32.dll" (
ByVal hwnd As IntPtr,
ByVal x As Integer,
ByVal y As Integer,
ByVal cx As Integer,
ByVal cy As Integer,
ByVal repaint As Boolean
) As Boolean
Public Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (
ByVal hwnd As IntPtr,
ByVal Msg As UInteger,
ByVal wParam As Long,
ByVal lParam As Long
) As Boolean
Public Const SWP_NOOWNERZORDER As Integer = &H200
Public Const SWP_NOREDRAW As Integer = &H8
Public Const SWP_NOZORDER As Integer = &H4
Public Const SWP_SHOWWINDOW As Integer = &H40
Public Const WS_EX_MDICHILD As Integer = &H40
Public Const SWP_FRAMECHANGED As Integer = &H20
Public Const SWP_NOACTIVATE As Integer = &H10
Public Const SWP_ASYNCWINDOWPOS As Integer = &H4000
Public Const SWP_NOMOVE As Integer = &H2
Public Const SWP_NOSIZE As Integer = &H1
Public Const GWL_STYLE As Integer = -16
Public Const WS_VISIBLE As Integer = &H10000000
Public Const WM_CLOSE As Integer = &H10
Public Const WS_CHILD As Integer = &H40000000
End Class
于是我打电话给:
Dim TheNotePad As ProcessStartInfo = New ProcessStartInfo("notepad.exe")
TheNotePad.WindowStyle = ProcessWindowStyle.Minimized
Dim TheProcess As Process = Process.Start(TheNotePad)
TheProcess.WaitForInputIdle()
WindowsApiSetAnyWindowParent.SetParent(TheProcess.MainWindowHandle, HostTabPanel.Handle)
WindowsApiSetAnyWindowParent.SetWindowLong(TheProcess.MainWindowHandle, WindowsApiSetAnyWindowParent.GWL_STYLE, WindowsApiSetAnyWindowParent.WS_VISIBLE)
WindowsApiSetAnyWindowParent.MoveWindow(TheProcess.MainWindowHandle, 0, 0, HostTabPanel.Width, HostTabPanel.Height, True)
TheNotePad.WindowStyle = ProcessWindowStyle.Normal
非常感谢您的帮助
答: 暂无答案
评论