Oh sch....,
auf die Idee bin ich bisher noch nicht gekommen.
Vielen Dank!
Dann scheinen die Variablen, welche ich bisher auslesen wollte keinen Wert zu haben.
Damit sollte ich weiter kommen!
Vielen Dank funkey!
Oh sch....,
auf die Idee bin ich bisher noch nicht gekommen.
Vielen Dank!
Dann scheinen die Variablen, welche ich bisher auslesen wollte keinen Wert zu haben.
Damit sollte ich weiter kommen!
Vielen Dank funkey!
Ja, habe es bereits mit Autoit-Strings versucht.
Es handelt sich um die Berechnungssoftware KISSsoft.
Ich weiß nicht in wie weit die Demoversion benutzbar ist.
Aber du kannst es theoretisch mit GetININame versuchen.
Hier ein Beispiel:
[autoit]$hKissSoft = ObjCreate( "KISSsoftCOM.KISSsoft" )
If @error Then
MsgBox( 0+48, "ERROR", "Failed to open KISSsoft!" )
Exit
EndIf
;$hKissSoft.SetSilentMode( True )
$hKissSoft.GetModule( "Z012", True )
$sTest = "TEST"
$val = $hKissSoft.GetININame( $sTest )
ConsoleWrite( "> GetININame: "&$sTest&@CRLF )
$hKissSoft.ReleaseModule
[/autoit]Hallo funkey,
danke, aber leider auch erfolglos.
[autoit]$sBSTR = _SysAllocString("TEST")
$val = $oObj.GetVar( "var", $sBSTR )
$tTest = DllStructCreate("wchar[6]", $sBSTR)
ConsoleWrite( "$oObj.GetVar: " & DllStructGetData($tTest, 1) & @CRLF) ; RES: "$oObj.GetVar: TEST"
_SysFreeString($sBSTR)
weitere Vorschläge/Ideen?
Hallo AutoIt'ler
ich bin derzeit daran via COM Schnittstelle ein Softwaretool zu steuern.
Dies funktioniert soweit auch wie ich mir das vorgestellt habe.
Jedoch ist es mir nicht möglich die überlieferten Strings auszulesen.
Die Dokumentation der Software beschreibt die Funktion folgendermaßen:
Variablen die als BSTR übergeben werden kann ich ohne Probleme auslesen.
[autoit]$val = $oObj.GetVar( "var" )
[/autoit]Ich komme jedoch nicht an die Daten heran die in BSTR* geschrieben werden sollten.
Ich habe bereits die Funktionen __IEStringToBstr und __IEBstrToString versucht, leider auch erfolglos. (1)
Daher habe ich mir die Spezifikationen von BSTR angeschaut und folgendes versucht: (2 3)
Func StringToBstr( ByRef $vBSTRstorage, $sString )
$dwSize = StringLen( $sString )
$tBSTR = "DWORD dwSize; WCHAR wcStr["&$dwSize+1&"]"
$vBSTRstorage = DllStructCreate( $tBSTR )
DllStructSetData( $vBSTRstorage, "dwSize", $dwSize*2 )
DllStructSetData( $vBSTRstorage, "wcStr", $sString )
Return DllStructGetPtr($vBSTRstorage) +4
EndFunc
Func BstrToString( $pBSTR )
$tBSTR = "DWORD dwSize"
$data = DllStructCreate( $tBSTR, $pBSTR -4 )
$dwSize = DllStructGetData( $data, "dwSize" ) /2
$tBSTR = "DWORD dwSize; WCHAR wcStr["&$dwSize+1&"]"
$data = DllStructCreate( $tBSTR, $pBSTR -4 )
Return DllStructGetData( $data, "wcStr" )
EndFunc
Leider auch erfolglos!
Kann mir jemand weiterhelfen?
Ich weiß, der Beitrag ist zwar veraltet,
aber vielleicht kann das jemand anders auch mal gut gebrauchen.
Ich hab mal das Script von smashly um die Möglichkeit erweitert,
mehrere Icons in ein Icon einzufügen.
_CreateIconFileFromHICON() erwartet jetzt ein Array von Icon Handeln.
HICON.au3
#include-once
#include <GDIPlus.au3>
#include <WinAPI.au3>
Func _GDIPlus_Resize( ByRef $hBitmap, $width = 64, $height = 64) ; code by UEZ 2011
Local $iH = _GDIPlus_ImageGetHeight($hBitmap)
Local $iW = _GDIPlus_ImageGetWidth($hBitmap)
Local $hImage = _GDIPlus_BitmapCreateFromScan0($width, $height)
Local $hContext = _GDIPlus_ImageGetGraphicsContext($hImage)
If $iW < $width And $iH < $height Then
$w = $width / 2 - $iW / 2
$h = $height / 2 - $iH / 2
_GDIPlus_GraphicsDrawImageRect($hContext, $hBitmap, $width / 2 - $iW / 2, $height / 2 - $iH / 2, $iW, $iH)
Else
If $iW > $iH Then
$f = $iW / $width
Else
$f = $iH / $height
EndIf
$w = $iW / $f
$h = $iH / $f
_GDIPlus_GraphicsDrawImageRect($hContext, $hBitmap, $width / 2 - $w / 2, $height / 2 - $h / 2, $w, $h)
EndIf
_GDIPlus_GraphicsDispose($hContext)
Return SetError(0, 0, $hImage)
EndFunc
Func _CreateIconFileFromHICON( $aIcon, $sOutIcon ) ;code by smashly optemized by tromorow
Local $sIco, $sBmp, $tBits, $iSz, $sBD, $FO, $i, $j
Local $sHeader, $sData, $iDataSize
Local $aInfo[10]
; clear strings
$sHeader = ""
$sData = ""
$iDataSize = 0 ; count of datas to get ico poss in mem
; Start of single Icon Header 2 x 2 bytes = 6 bytes: 0000 Reserved / 0100 Icon / 0100 Numer of icons, total length will be 22 bytes for a single icon when finished
$sIco = "0x00000100"&_PRIVATE_HICON_RB( Hex( UBound( $aIcon ), 4 ) )
For $i = 0 To UBound( $aIcon ) -1
[/autoit] [autoit][/autoit] [autoit]$aInfo = _PRIVATE_HICON_GetIcoInfos( $aIcon[ $i ] )
[/autoit] [autoit][/autoit] [autoit]; Now we have some the basic info to add to the Icon & Bitmap header so we'll add that to the headers.
$sHeader &= Hex( $aInfo[1], 2 ) & Hex( $aInfo[2], 2 ) & "00000100" & _PRIVATE_HICON_RB( Hex( $aInfo[3], 4 ) )
; now the size of both pics, size of ico + size of mask + bitmap header
$sHeader &= _PRIVATE_HICON_RB( Hex( $aInfo[4] + $aInfo[9] + 40 ) )
; calculate beginning of pic and add to Header
$sHeader &= _PRIVATE_HICON_RB( Hex( 6 + ( UBound( $aIcon ) * 16 ) + $iDataSize ) )
; add Datasize to counter
$iDataSize += $aInfo[4] + $aInfo[9] + 40
; Create a struct to store the Bitmap data Bits of the first bitmap, reset the BITMAPINFO struct
$tBits = 0
$tBits = DllStructCreate("byte[" & $aInfo[4] & "]")
; Get the color bitmap dib bits into the $tBits struct.
DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[0], 'int', $aInfo[4], 'ptr', DllStructGetPtr($tBits))
; Get GetBitmapBits returns Bottom to Top dib, so I turn it to Top to Bottom dib
; ATM I'm only assuming that GetBitmapBits returns a Bottom to Top dib, maybe the bitmap bits you use could be Top Down already?.
$sBD = ""
For $j = $aInfo[4] + 1 To 0 Step -( $aInfo[4] / $aInfo[2] )
$sBD &= StringTrimLeft( BinaryMid( DllStructGetData( $tBits, 1 ), $j, ( $aInfo[4] / $aInfo[2] ) ), 2 )
Next
; Start of the Bitmap data header 1 x 4bytes: length of the header will be 40 bytes when finished. Will be appended to the end of the icon header when finished
$sBmp = "28000000"
$sBmp &= _PRIVATE_HICON_RB( Hex( $aInfo[1] ) ) & _PRIVATE_HICON_RB( Hex( $aInfo[2] * 2) ) & "0100" & _PRIVATE_HICON_RB( Hex( $aInfo[3], 4 ) ) & "00000000"
; combine the bitmap data size with the bitmap header, I'm padding the rest of the 40 byte bitmap header with 0's., that's the Bitmap header done
$sBmp &= _PRIVATE_HICON_RB( Hex( $aInfo[4] + $aInfo[9] ) ) & "00000000000000000000000000000000"
; Now add the size of the Bitmap data + bitmap header size and combine the icon header together with the bitmap header and color bitmap data
$sData &= $sBmp & $sBD
; Create a struct to store the Bitmap dib Bits of the mask bitmap
$tBits = 0
$tBits = DllStructCreate("byte[" & $aInfo[9] & "]")
; Get the mask bitmap dib bits into the $tBits struct.
DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[5], 'int', $aInfo[9], 'ptr', DllStructGetPtr($tBits))
; Get GetBitmapBits returns Bottom to Top dib, so I turn it to a Top to Bottom dib and append the mask bitmap data to the icon
For $j = $aInfo[9] + 1 To 0 Step -( $aInfo[9] / $aInfo[7] )
$sData &= StringTrimLeft( BinaryMid( DllStructGetData( $tBits, 1 ), $j, ( $aInfo[9] / $aInfo[7] ) ), 2 )
Next
Next
[/autoit] [autoit][/autoit] [autoit]$sIco &= $sHeader & $sData
[/autoit] [autoit][/autoit] [autoit]; Write the icon to a file.
$FO = FileOpen($sOutIcon, 18)
FileWrite($sOutIcon, Binary($sIco))
FileClose($FO)
; Clear the structs
$tBits = 0
EndFunc ;==>_CreateIconFileFromHICON
Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[6]
EndFunc ;==>_GDIPlus_BitmapCreateFromScan0
Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
Local $hIcon
$hIcon = DllCall($ghGDIPDll, "int", "GdipCreateHICONFromBitmap", "hwnd", $hBitmap, "int*", 0)
If @error Then Return SetError(@error, 0, -1)
Return SetError($hIcon[0], 0, $hIcon[2])
EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap
Func _GDIPlus_BitmapCreateBitmapFromHICON($hIcon)
; Prog@ndy
Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateBitmapFromHICON", "ptr", $hIcon, "ptr*",0)
If @error Then Return SetError(1,0,0)
Return SetError($result[0], 1, $result[2])
EndFunc ;==>_GDIPlus_BitmapCreateBitmapFromHICON
; Reverse Byte String
Func _PRIVATE_HICON_RB($sByte)
Local $aX = StringRegExp($sByte, "(.{2})", 3), $sX = ''
For $i = UBound($aX) - 1 To 0 Step -1
$sX &= $aX[$i]
Next
Return $sX
EndFunc ;==>_PRIVATE_HICON_RB
; get Ico info
Func _PRIVATE_HICON_GetIcoInfos( $hIcon )
Local $aInfo, $hCDC, $tBI
Local $ret[10]
; Get info about the HICON, this is mainly to get the pointers to the Color/Mask bitmaps data
$aInfo = _WinAPI_GetIconInfo( $hIcon )
; Create a memory Compatable DC
$hCDC = _WinAPI_CreateCompatibleDC( 0 )
; Create a BITMAPINFO Struct to store the Bitmap Info, it needs to be inilialized by setting the struct size.
$tBI = DllStructCreate( $tagBITMAPINFO )
DllStructSetData( $tBI, "Size", DllStructGetSize( $tBI ) )
; Pass a bitmap data pointer to the BITMAPINFO struct so we can recieve the details of the color bitmap data, we use it to write the headers
_WinAPI_GetDIBits( $hCDC, $aInfo[5], 0, 0, 0, DllStructGetPtr( $tBI ), 0)
$ret[0] = $aInfo[5]
$ret[1] = DllStructGetData( $tBI, "Width" )
$ret[2] = DllStructGetData( $tBI, "Height" )
$ret[3] = DllStructGetData( $tBI, "BitCount" )
$ret[4] = DllStructGetData( $tBI, "SizeImage" )
;Clear the BITMAPINFO & $tBits Struct as we'll use the same variables again for the mask bitmap data
$tBI = 0
; Create a BITMAPINFO Struct to store the Bitmap Info again, it needs to be inilialized by setting the struct size.
$tBI = DllStructCreate( $tagBITMAPINFO )
DllStructSetData( $tBI, "Size", DllStructGetSize( $tBI ) )
; Pass a bitmap data pointer to the BITMAPINFO struct so we can recieve the details of the bitmask bitmap data
_WinAPI_GetDIBits( $hCDC, $aInfo[4], 0, 0, 0, DllStructGetPtr( $tBI ), 0 )
; We've finished with the Compatable DC, delete it.
_WinAPI_DeleteDC( $hCDC )
$ret[5] = $aInfo[4]
$ret[6] = DllStructGetData( $tBI, "Width" )
$ret[7] = DllStructGetData( $tBI, "Height" )
$ret[8] = DllStructGetData( $tBI, "BitCount" )
$ret[9] = DllStructGetData( $tBI, "SizeImage" )
; Clear the structs
$tBI = 0
$hCDC = 0
Return $ret
EndFunc
Beispiel.au3
#include "HICON.au3"
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hBitmap1 = _GDIPlus_BitmapCreateFromFile( "test1.jpg" )
$hBitmap2 = _GDIPlus_BitmapCreateFromFile( "test2.jpg" )
Dim $aIcon[2]
$aIcon[0] = _GDIPlus_HICONCreateFromBitmap( $hBitmap1 )
$aIcon[1] = _GDIPlus_HICONCreateFromBitmap( $hBitmap2 )
_CreateIconFileFromHICON( $aIcon, "test.ico" )
[/autoit] [autoit][/autoit] [autoit]_WinAPI_DestroyIcon( $aIcon[0] )
_WinAPI_DestroyIcon( $aIcon[1] )
_GDIPlus_BitmapDispose( $hBitmap )
_GDIPlus_Shutdown()
Habe Lösungen Gefunden.
Das Problem liegt am Samba Server (Daran hab ich leider noch nicht gedacht ).
Habe feststellen müssen,
dass Win7 eine NTLMv2 Authentifizierung erzwingt.
Und mein Samba hatte eben nur NTLM.
Entweder man setzt den Registrykey:
LmCompatibilityLevel muss dabei ein DWORD sein.
Oder (wie ich es jetzt getan habe),
man updatet seinen Samba Server, und füge:
in die Konfiguration ein.
Vielen Dank für eure Bemühungen.
Gruß tromorow
Quellen:
http://repat.de/2011/02/samba-…ystemfehler-86/
http://lists.samba.org/archive/samba/…ary/080468.html
@ Dietmar
Ich habe es auch schon mit requireadmin versucht, aber das Programm hat ja bereits Adminrechte.
@ GerhardSchr
Das scheint ohne Probleme zu funktionieren.
Nur leider weiß ich nicht wie mir das weiter hilft.
Den Fehler hab ich nicht bei AutoIt gesehen, sondern allgemein an Win7.
Wenn selbst "net use" nicht richtig funktioniert.
Wie gesagt, auf XP hatte ich mit dem selber script keine Probleme.
Hallo AutoItlerInnen und AutoItler,
ich habe vor einiger zeit ein Programm geschrieben,
um Netzlaufwerke in einer VPN-Sitzung zu verbinden und zu trennen.
Einige Kollegen teilten mir mit,
dass sie Probleme unter Windows 7 mit den Netzlaufwerken haben.
Leider bin ich jetzt auch auf Windows 7 umgestiegen (Neuer Rechner),
und mich betrifft das Problem nun auch.
Wenn ich mit AutoIt den DriveMapAdd Befehl ausführe,
dann gibt dieser unter Win7 eine erfolgreiche Verbindung zurück,
obwohl kein Laufwerk angelegt wurde.
Wenn ich auf "net use" zurück greife,
dann bekomme ich den Fehler:
Systemfehler 53 aufgetreten.
Der Netzwerkpfad wurde nicht gefunden.
Das Laufwerk von Hand (über den Explorer) zu verbinden,
ist kein Problem.
Nun dachte ich mir ich greife auf das COM-Objekt "Wscript.Network" zu.
[autoit]$WsN = ObjCreate( "Wscript.Network" )
$WsN.MapNetworkDrive( $LS_lett, $LS_path, False, $CONF_User, $CONF_Pass )
Das funktioniert auch super,
nur leider läuft das Programm unter Admin rechten,
um die VPN-Kommunikation hin zu bekommen.
Und dann funktioniert es wieder nicht.
Ich bekomme den Fehler:
Error: The requested action with this object has faild.
Hat einer vielleicht noch jemand eine Idee?
Gruß tromorow