Meine Versuche habe ich immer mit einem Vista-Client und einem W2003-Server gemacht.
Hier mal der komplette AutoIt-Code, damit gabs keine Probleme bei o.g. Konfiguration:
Code: Alles auswählen
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
;http://msdn.microsoft.com/en-us/library/aa383022%28VS.85%29.aspx
$remoteServer = "your_server"
$logonDomain = "logon_domain"
$remoteUser = "username"
$passWord = "password"
$width = 1024
$height = 768
$colorDepth = 16
If $CmdLine[0] > 0 Then
$remoteServer = $CmdLine[1]
$logonDomain = $CmdLine[2]
$remoteUser = $CmdLine[3]
$passWord = $CmdLine[4]
$width = $CmdLine[5]
$height = $CmdLine[6]
$colorDepth = $CmdLine[7]
EndIf
$GUI = GUICreate("Extended Terminal Services Client - " & $remoteServer, $width, $height, -1, -1, -1)
$RdpClient = ObjCreate("MsTscAx.MsTscAx")
$GUIActiveX = GUICtrlCreateObj($RdpClient, -1, -1, $width, $height)
GUICtrlSetStyle($GUIActiveX, $WS_VISIBLE)
GUICtrlSetResizing($GUIActiveX, $GUI_DOCKAUTO)
GUISetIcon("extsc.ico")
GUISetState()
$RdpClient.Server = $remoteServer
$RdpClient.Domain = $logonDomain
$RdpClient.UserName = $remoteUser
$RdpClient.AdvancedSettings2.ClearTextPassword = $passWord
$RdpClient.DesktopWidth = $width
$RdpClient.DesktopHeight = $height
$RdpClient.ColorDepth = $colorDepth
;$RdpClient.Fullscreen = True
;$RdpClient.AdvancedSettings3.SmartSizing = True
$RdpClient.ConnectingText = "Verbindung wird aufgebaut. Bitte warten..."
$RdpClient.DisconnectedText = "Verbindung wurde getrennt."
$RdpConnected = 0
$RdpClient.Connect()
; Determine the class name of the ATL control - it seems to be random from system to system
Opt("WinTitleMatchMode", 4) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
Opt("WinSearchChildren", 1) ;0=no, 1=search children also
$sATLClass = ""
$aClasses = StringSplit(WinGetClassList($GUI, ""), @LF)
For $i = 1 To $aClasses[0]
If StringLeft($aClasses[$i], 4) = "ATL:" Then
$sATLClass = $aClasses[$i]
ExitLoop
EndIf
Next
; get the handles to the controls that must have their styles modified
$hUIContainerClass = ControlGetHandle($GUI, "", "[CLASS:UIContainerClass]")
$hUIMainClass = ControlGetHandle($GUI, "", "[CLASS:UIMainClass]")
$hATL = ControlGetHandle($GUI, "", "[CLASS:" & $sATLClass & "]")
ConsoleWrite("$hUIContainerClass (should not be 0 or blank):" & $hUIContainerClass & @CRLF)
ConsoleWrite("$hUIMainClass (should not be 0 or blank):" & $hUIMainClass & @CRLF)
ConsoleWrite("$hATL (should not be 0 or blank):" & $hATL & @CRLF)
; modify the styles of the child controls to match those set by the offical client application
; this prevents clipping problems
Const $WS_EX_NOPARENTNOTIFY = 0x4
Const $WS_EX_NOINHERITLAYOUT = 0x100000
$hUIContainerClassStyle = BitOR($WS_CHILD, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_VISIBLE) ; 0x56000000
$hUIContainerClassStyleEx = BitOR($WS_EX_NOINHERITLAYOUT, $WS_EX_NOPARENTNOTIFY) ; 0x00100004
$hUIMainClassStyle = BitOR($WS_CHILD, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_SYSMENU, $WS_VISIBLE) ; 0x56080000
$hUIMainClassStyleEx = 0x0
$hATLStyle = BitOR($WS_CHILD, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_VISIBLE) ; 0x56000000
$hATLStyleEx = 0x0
;$guiStyle = BitOR($WS_BORDER, $WS_CAPTION, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_DLGFRAME, $WS_GROUP, $WS_MAXIMIZE, $WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_TABSTOP, $WS_THICKFRAME, $WS_VISIBLE) ; 0x17CF0100
$guiStyle = BitOR($WS_CAPTION, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS, $WS_GROUP, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_TABSTOP, $WS_VISIBLE) ; 0x17CF0100
$guiStyleEx = $WS_EX_WINDOWEDGE ; 0x00000100
_SetStyle($hUIContainerClass, $hUIContainerClassStyle, $hUIContainerClassStyleEx)
_SetStyle($hUIMainClass, $hUIMainClassStyle, $hUIMainClassStyleEx)
_SetStyle($hATL, $hATLStyle, $hATLStyleEx)
_SetStyle($GUI, $guiStyle, $guiStyleEx)
$aStyle = GUIGetStyle()
GUISetStyle(BitAND($aStyle[0], BitNOT($WS_MAXIMIZEBOX)))
Func _SetStyle($hwnd, $style, $exstyle)
DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hwnd, "int", -16, "long", $style)
DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hwnd, "int", -20, "long", $exstyle)
EndFunc ;==>_SetStyle
While 1
If $RdpClient.Connected = 1 And $RdpConnected <> 1 Then
;MsgBox(0, "Achtung", "Login Complete!")
$RdpConnected = 1
EndIf
If $RdpClient.Connected <> 1 And $RdpConnected = 1 Then
;MsgBox(0, "Achtung", "Logoff Complete!")
$RdpConnected = 0
ExitLoop
EndIf
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
WEnd
GUIDelete()
Exit