VB.NETでVB.NETでWinFormプロジェクトを作成し、SplitContainer2.Panel1
にFreeRDPというインスタンスを開きます。これはうまく動作しますが、最初にFreeRDPウィンドウに収まるようにフォームを拡大したいと思います。これを行うには、まずFreeRDPインスタンスのサイズを知る必要があります。VB.NET GetClientRect()はWinFormの子プロセスに何も返しません
残念ながら、私が行った試みは何も返しません。私はWindows APIからを使用しようとしていますが、私が返すのは0(または何もないと思います)です。私がAPI呼び出しをしたのはこれが初めてのことなので、何が間違っているのか分かりません。私は
はVS
の中断で正しいハンドル持って確認しました(私はこれらの規模が不十分ならば謝罪を。ハードスケール4K上で判断する) スパイ++に比べて正しいhWndハンドルがあることを確認しましたが、を呼び出すと何も返されません。ここで
は、関連するコードされています、私は自分のフォームでのHyper-V VMのコンソールウィンドウで、この時点で
Dim rdpWnd As New IntPtr
Dim proc As New Process
Private Declare Auto Function GetClientRect Lib "user32.dll" (_
ByVal hWnd As IntPtr, ByVal lpRect As RECT) As Boolean
<StructLayout(LayoutKind.Sequential)>
Private Structure RECT
Private Left As Short
Private Top As Short
Private Right As Short
Private Bottom As Short
End Structure
Private Sub Form_Load(_
sender As Object, e As EventArgs) Handles MyBase.Load
Dim startInfo As New ProcessStartInfo With {
.FileName = """" & appPath & "\console\wfreerdp.exe""",
.Arguments = "/parent-window:" & SplitContainer2.Panel1.Handle.ToString() & " /t:" & vmId
}
proc = Process.Start(startInfo)
rdpWnd = getWindowHandle(Me.Text, vmId)
End Sub
Private Function getWindowHandle(caption As String, Guid As String) As IntPtr
Dim hWnd As IntPtr = FindWindow(Nothing, caption)
If hWnd.Equals(IntPtr.Zero) Then
Return Nothing
End If
.......
Dim hWndRdp As IntPtr = FindWindowEx(hWndChild4, IntPtr.Zero, Nothing, Guid)
If hWndRdp.Equals(IntPtr.Zero) Then
Return Nothing
End If
Return hWndRdp
End Function
探していますが、私はことわざのButton1をクリックしたときに...
Private Sub Button1_MouseClick(_
sender As Object, e As MouseEventArgs) Handles Button1.MouseClick
Dim myRect As New RECT
GetClientRect(rdpWnd, myRect)
Dim rdpWndWidth As Short = myRect.Right - myRect.Left
Dim rdpWndHeight As Short = myRect.Bottom - myRect.Top
MsgBox("Width: " & rdpWndWidth & vbCrLf &
"Height: " & rdpWndHeight)
End Sub
MsgBox()
リターン:
とVS内の変数:
私が間違って何をしているのですか? Spy ++ができることが明らかになったときにクライアントのサイズを取得できないのはなぜですか?私はこれを理解しようと多くの時間を費やしてきました。私は、このマイルストーンをチェックオフにする助けに感謝します。私はすぐにそれを得ることができない場合については、別のものに移動し、後で戻ってくる。
どこで 'rdpWnd'を設定しますか? – abto
コードを更新しました。必要に応じて関数全体を投稿することができますが、VSとSpy ++のスクリーンショットから見ることができますが、正しいハンドルがあります。 –