使用另一个应用程序从 parent window 中分离 child window
Detach a child window from its parent window by using another application
我是 Visual Basic 的新手。我正在尝试构建一个可以控制我的其他应用程序的应用程序。
所以我的第一个应用程序在主 window.
中有一个 child window
我希望我的第二个应用程序能够控制我的第一个应用程序。通过在我的第二个应用程序上按下一个按钮,它应该使第一个应用程序中的 child window 成为一个单独的 window。 window 将可以自由移动到其原始 parent window 之外。它应该作为一个单独的 window。即使原来的 parent window 被最小化,child window 仍然存在。
我有点让它工作了,但它并不像预期的那样。
The problems I encounter now are:
1. After the child window is detached, the child window still reminds in a background
frame looks like the background of its original parent window. I want the window to
be on the desktop.
2. After the child window is detached, the child window minimize with its main window.
I want the child window stay even if I minimize the main window.
以下是我的程序代码:
基本上它试图通过 window 标题获取主 window 的句柄,然后获取其 child window 的句柄并使用 SetParent函数将其parent更改为桌面,因此直接显示在桌面上。
我知道可能还有其他方法可以做到这一点,请告诉我。如果您能具体一点,那将非常有帮助,因为我提到我是 visual basic 的新手。我的代码可能看起来很乱,对此深表歉意。 :P 谢谢大家!
Option Explicit On
Public Class FormG
Const GW_CHILD = 5
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim r As Int32, hChild As Long, desk As Long
r = FindWindow(vbNullString, "Form1")
hChild = GetWindow(r, GW_CHILD)
desk = GetDesktopWindow()
SetParent(hChild, desk)
End Sub
End Class
您不得尝试 re-attach 一个 child 到另一个 window。当您 可以 调用 SetParent
时, it will be very, very hard 可以正确执行并解决由此产生的所有问题。这就像如果有人告诉你某人现在是 你的 parent。所有相关人员都能表现得像真的一样吗?
您的问题的解决方案是让第一个应用程序有两个 windows 共享相同的代码:child window 和 non-child window。您只需隐藏不需要的那个即可。
但是,我感觉您正在尝试实现具有更直接和简单解决方案的东西。你应该描述你试图通过提取 window.
来解决什么问题
我是 Visual Basic 的新手。我正在尝试构建一个可以控制我的其他应用程序的应用程序。
所以我的第一个应用程序在主 window.
中有一个 child window我希望我的第二个应用程序能够控制我的第一个应用程序。通过在我的第二个应用程序上按下一个按钮,它应该使第一个应用程序中的 child window 成为一个单独的 window。 window 将可以自由移动到其原始 parent window 之外。它应该作为一个单独的 window。即使原来的 parent window 被最小化,child window 仍然存在。
我有点让它工作了,但它并不像预期的那样。
The problems I encounter now are:
1. After the child window is detached, the child window still reminds in a background
frame looks like the background of its original parent window. I want the window to
be on the desktop.
2. After the child window is detached, the child window minimize with its main window.
I want the child window stay even if I minimize the main window.
以下是我的程序代码:
基本上它试图通过 window 标题获取主 window 的句柄,然后获取其 child window 的句柄并使用 SetParent函数将其parent更改为桌面,因此直接显示在桌面上。
我知道可能还有其他方法可以做到这一点,请告诉我。如果您能具体一点,那将非常有帮助,因为我提到我是 visual basic 的新手。我的代码可能看起来很乱,对此深表歉意。 :P 谢谢大家!
Option Explicit On
Public Class FormG
Const GW_CHILD = 5
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Integer, ByVal hWndNewParent As Integer) As Integer
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim r As Int32, hChild As Long, desk As Long
r = FindWindow(vbNullString, "Form1")
hChild = GetWindow(r, GW_CHILD)
desk = GetDesktopWindow()
SetParent(hChild, desk)
End Sub
End Class
您不得尝试 re-attach 一个 child 到另一个 window。当您 可以 调用 SetParent
时, it will be very, very hard 可以正确执行并解决由此产生的所有问题。这就像如果有人告诉你某人现在是 你的 parent。所有相关人员都能表现得像真的一样吗?
您的问题的解决方案是让第一个应用程序有两个 windows 共享相同的代码:child window 和 non-child window。您只需隐藏不需要的那个即可。
但是,我感觉您正在尝试实现具有更直接和简单解决方案的东西。你应该描述你试图通过提取 window.
来解决什么问题