1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. tromorow

Beiträge von tromorow

  • Arbeiten mit BSTR

    • tromorow
    • 23. September 2014 um 11:10

    Oh sch....,

    auf die Idee bin ich bisher noch nicht gekommen. :S
    Vielen Dank!
    Dann scheinen die Variablen, welche ich bisher auslesen wollte keinen Wert zu haben.

    Damit sollte ich weiter kommen! :)
    Vielen Dank funkey!

  • Arbeiten mit BSTR

    • tromorow
    • 22. September 2014 um 13:33

    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

    [/autoit][autoit][/autoit][autoit]

    ;$hKissSoft.SetSilentMode( True )
    $hKissSoft.GetModule( "Z012", True )

    [/autoit][autoit][/autoit][autoit]

    $sTest = "TEST"
    $val = $hKissSoft.GetININame( $sTest )
    ConsoleWrite( "> GetININame: "&$sTest&@CRLF )

    [/autoit][autoit][/autoit][autoit]

    $hKissSoft.ReleaseModule

    [/autoit]
  • Arbeiten mit BSTR

    • tromorow
    • 19. September 2014 um 11:59

    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)

    [/autoit]

    weitere Vorschläge/Ideen?

  • Arbeiten mit BSTR

    • tromorow
    • 18. September 2014 um 16:47

    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:

    Code
    GetVar([in] BSTR name, [out, retval] BSTR* value) liest eine Variable als Text zurück.

    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)

    [autoit]

    Func StringToBstr( ByRef $vBSTRstorage, $sString )
    $dwSize = StringLen( $sString )
    $tBSTR = "DWORD dwSize; WCHAR wcStr["&$dwSize+1&"]"
    $vBSTRstorage = DllStructCreate( $tBSTR )

    [/autoit][autoit][/autoit][autoit]

    DllStructSetData( $vBSTRstorage, "dwSize", $dwSize*2 )
    DllStructSetData( $vBSTRstorage, "wcStr", $sString )

    [/autoit][autoit][/autoit][autoit]

    Return DllStructGetPtr($vBSTRstorage) +4
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func BstrToString( $pBSTR )
    $tBSTR = "DWORD dwSize"
    $data = DllStructCreate( $tBSTR, $pBSTR -4 )

    [/autoit][autoit][/autoit][autoit]

    $dwSize = DllStructGetData( $data, "dwSize" ) /2
    $tBSTR = "DWORD dwSize; WCHAR wcStr["&$dwSize+1&"]"
    $data = DllStructCreate( $tBSTR, $pBSTR -4 )

    [/autoit][autoit][/autoit][autoit]

    Return DllStructGetData( $data, "wcStr" )
    EndFunc

    [/autoit]

    Leider auch erfolglos!

    Kann mir jemand weiterhelfen?

  • Jpg zu ico

    • tromorow
    • 2. Dezember 2011 um 18:12

    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

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    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]

    [/autoit] [autoit][/autoit] [autoit]

    ; clear strings
    $sHeader = ""
    $sData = ""
    $iDataSize = 0 ; count of datas to get ico poss in mem

    [/autoit] [autoit][/autoit] [autoit]

    ; 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 ) )

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    ; Create a struct to store the Bitmap data Bits of the first bitmap, reset the BITMAPINFO struct
    $tBits = 0
    $tBits = DllStructCreate("byte[" & $aInfo[4] & "]")

    [/autoit] [autoit][/autoit] [autoit]

    ; Get the color bitmap dib bits into the $tBits struct.
    DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[0], 'int', $aInfo[4], 'ptr', DllStructGetPtr($tBits))

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ; 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"

    [/autoit] [autoit][/autoit] [autoit]

    ; 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"

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ; Create a struct to store the Bitmap dib Bits of the mask bitmap
    $tBits = 0
    $tBits = DllStructCreate("byte[" & $aInfo[9] & "]")

    [/autoit] [autoit][/autoit] [autoit]

    ; Get the mask bitmap dib bits into the $tBits struct.
    DllCall('gdi32.dll', 'int', 'GetBitmapBits', 'ptr', $aInfo[5], 'int', $aInfo[9], 'ptr', DllStructGetPtr($tBits))

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    ; Clear the structs
    $tBits = 0
    EndFunc ;==>_CreateIconFileFromHICON

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ; get Ico info
    Func _PRIVATE_HICON_GetIcoInfos( $hIcon )
    Local $aInfo, $hCDC, $tBI
    Local $ret[10]

    [/autoit] [autoit][/autoit] [autoit]

    ; Get info about the HICON, this is mainly to get the pointers to the Color/Mask bitmaps data
    $aInfo = _WinAPI_GetIconInfo( $hIcon )

    [/autoit] [autoit][/autoit] [autoit]

    ; Create a memory Compatable DC
    $hCDC = _WinAPI_CreateCompatibleDC( 0 )

    [/autoit] [autoit][/autoit] [autoit]

    ; 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 ) )

    [/autoit] [autoit][/autoit] [autoit]

    ; 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)

    [/autoit] [autoit][/autoit] [autoit]

    $ret[0] = $aInfo[5]
    $ret[1] = DllStructGetData( $tBI, "Width" )
    $ret[2] = DllStructGetData( $tBI, "Height" )
    $ret[3] = DllStructGetData( $tBI, "BitCount" )
    $ret[4] = DllStructGetData( $tBI, "SizeImage" )

    [/autoit] [autoit][/autoit] [autoit]

    ;Clear the BITMAPINFO & $tBits Struct as we'll use the same variables again for the mask bitmap data
    $tBI = 0

    [/autoit] [autoit][/autoit] [autoit]

    ; 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 ) )

    [/autoit] [autoit][/autoit] [autoit]

    ; 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 )

    [/autoit] [autoit][/autoit] [autoit]

    ; We've finished with the Compatable DC, delete it.
    _WinAPI_DeleteDC( $hCDC )

    [/autoit] [autoit][/autoit] [autoit]

    $ret[5] = $aInfo[4]
    $ret[6] = DllStructGetData( $tBI, "Width" )
    $ret[7] = DllStructGetData( $tBI, "Height" )
    $ret[8] = DllStructGetData( $tBI, "BitCount" )
    $ret[9] = DllStructGetData( $tBI, "SizeImage" )

    [/autoit] [autoit][/autoit] [autoit]

    ; Clear the structs
    $tBI = 0
    $hCDC = 0

    [/autoit] [autoit][/autoit] [autoit]

    Return $ret
    EndFunc

    [/autoit]


    Beispiel.au3

    Spoiler anzeigen
    [autoit]


    #include "HICON.au3"

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hBitmap1 = _GDIPlus_BitmapCreateFromFile( "test1.jpg" )
    $hBitmap2 = _GDIPlus_BitmapCreateFromFile( "test2.jpg" )

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aIcon[2]
    $aIcon[0] = _GDIPlus_HICONCreateFromBitmap( $hBitmap1 )
    $aIcon[1] = _GDIPlus_HICONCreateFromBitmap( $hBitmap2 )

    [/autoit] [autoit][/autoit] [autoit]

    _CreateIconFileFromHICON( $aIcon, "test.ico" )

    [/autoit] [autoit][/autoit] [autoit]

    _WinAPI_DestroyIcon( $aIcon[0] )
    _WinAPI_DestroyIcon( $aIcon[1] )
    _GDIPlus_BitmapDispose( $hBitmap )
    _GDIPlus_Shutdown()

    [/autoit]
  • DriveMapAdd Problem unter Win7

    • tromorow
    • 21. April 2011 um 13:46

    Habe Lösungen Gefunden.
    Das Problem liegt am Samba Server (Daran hab ich leider noch nicht gedacht :S ).
    Habe feststellen müssen,
    dass Win7 eine NTLMv2 Authentifizierung erzwingt.
    Und mein Samba hatte eben nur NTLM.
    Entweder man setzt den Registrykey:

    Code
    [HK_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
    LmCompatibilityLevel = 2


    LmCompatibilityLevel muss dabei ein DWORD sein.
    Oder (wie ich es jetzt getan habe),
    man updatet seinen Samba Server, und füge:

    Code
    client NTLMv2 auth = yes


    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

  • DriveMapAdd Problem unter Win7

    • tromorow
    • 21. April 2011 um 13:07

    @ 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.

  • DriveMapAdd Problem unter Win7

    • tromorow
    • 20. April 2011 um 11:53

    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 )

    [/autoit]


    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

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™