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

Beiträge von Bitnugger

  • net user in MSG-Box ausgeben

    • Bitnugger
    • 7. Februar 2019 um 22:42
    Zitat von Musashi

    $iPID = Run(@COMSPEC & ' /c ' & $sCommand, "", @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
    If Not @error Then

    If Not @error Then

    ...sehr tückisch... funktioniert evt. nicht wie gedacht, denn Run() liefert dir einen Fehlercode, wenn @COMSPEC nicht ausgeführt werden konnte, aber nicht, wenn die Befehle net|find nicht existieren oder an @COMSPEC|net|find Parameter übergeben wurden, die entweden nicht exisiteren oder mit False beantwortet wurden!

    Zur Info: @COMSPEC wird bei Run() & Co nur zur Ausführung interner Befehle der cmd.exe benötigt, für die es keine ausführbare Datei gibt, oder wenn die Ausgabe via Pipe ("|") an einen anderen (internen) Befehl übergeben wird, oder wenn eine Dateiumleitung (">", "<") benötigt wird.

    Hier ein Bsp. mit mehreren Fehlern... Run() gibt aber trotzdem keine Fehlermeldung zurück...

    Code
    #include <WinAPI.au3>
    
    Local $sCommand = @COMSPEC & ' /ß ' & 'netz user ' & @UserName & ' |findx /I "Letztes Setzen des Kennworts"'
    ConsoleWrite(_WinAPI_WideCharToMultiByte("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sCommand --> " & $sCommand, 65001) & @CRLF)
    Local $iPID = Run($sCommand, "", @SW_HIDE, BitOR($STDOUT_CHILD, $STDERR_CHILD))
    If @error Then
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: @COMSPEC --> " & @COMSPEC & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    Else
        ProcessWaitClose($iPID)
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iPID        --> " & $iPID & @CRLF)
        Local $sSTDOUTText = StdoutRead($iPID)
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sSTDOUTText --> " & $sSTDOUTText & @CRLF)
    EndIf
    Alles anzeigen

    Ausgabe:

    Code
    @@ Debug line    3   var: $sCommand --> C:\WINDOWS\system32\cmd.exe /ß netz user ghost |findx /I "Letztes Setzen des Kennworts"
    @@ Debug line    9   var: $iPID        --> 13704
    @@ Debug line    11   var: $sSTDOUTText --> Microsoft Windows [Version 10.0.17763.292]
    (c) 2018 Microsoft Corporation. Alle Rechte vorbehalten.
  • net user in MSG-Box ausgeben

    • Bitnugger
    • 7. Februar 2019 um 19:57
    Zitat von Musashi

    Func _OEMtoChar($sOEM)

    Du sollest den String für die Rückgabe nicht extra in eine neue Variable kopieren, ist völlig unnötig und kostet nur mehr Zeit... besser wäre so:

    Code
    ; Info : statt _OEMtoChar könnte man auch _WinAPI_WideCharToMultiByte verwenden
    Func _OEMtoChar($sOEM)
        Local $aDLLReturn, $sAnsi
        $aDLLReturn = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
        Return @error ? $sOEM : $aDLLReturn[2] ; im Fehlerfall den Originalstring ($sOEM) unkonvertiert zurückgeben
    EndFunc   ;==>_OEMtoChar

    Letztes Setzen des Kennworts... also das Alter des Passworts (PasswordAge)... bekommst du so:

    Code: Win32_NetworkLoginProfile
    Local $strComputer = "."
    Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery( _
        "SELECT * FROM Win32_NetworkLoginProfile", 'WQL',48)
    For $objItem In $colItems
        ConsoleWrite("-----------------------------------" & @CRLF)
        ConsoleWrite("Win32_NetworkLoginProfile instance" & @CRLF)
        ConsoleWrite("-----------------------------------" & @CRLF)
        ConsoleWrite("AccountExpires: " & _OEMtoChar($objItem.AccountExpires) & @CRLF)
        ConsoleWrite("AuthorizationFlags: " & _OEMtoChar($objItem.AuthorizationFlags) & @CRLF)
        ConsoleWrite("BadPasswordCount: " & _OEMtoChar($objItem.BadPasswordCount) & @CRLF)
        ConsoleWrite("Caption: " & _OEMtoChar($objItem.Caption) & @CRLF)
        ConsoleWrite("CodePage: " & _OEMtoChar($objItem.CodePage) & @CRLF)
        ConsoleWrite("Comment: " & _OEMtoChar($objItem.Comment) & @CRLF)
        ConsoleWrite("CountryCode: " & _OEMtoChar($objItem.CountryCode) & @CRLF)
        ConsoleWrite("Description: " & _OEMtoChar($objItem.Description) & @CRLF)
        ConsoleWrite("Flags: " & _OEMtoChar($objItem.Flags) & @CRLF)
        ConsoleWrite("FullName: " & _OEMtoChar($objItem.FullName) & @CRLF)
        ConsoleWrite("HomeDirectory: " & _OEMtoChar($objItem.HomeDirectory) & @CRLF)
        ConsoleWrite("HomeDirectoryDrive: " & _OEMtoChar($objItem.HomeDirectoryDrive) & @CRLF)
        ConsoleWrite("LastLogoff: " & _OEMtoChar($objItem.LastLogoff) & @CRLF)
        ConsoleWrite("LastLogon: " & _OEMtoChar($objItem.LastLogon) & @CRLF)
        ConsoleWrite("LogonHours: " & _OEMtoChar($objItem.LogonHours) & @CRLF)
        ConsoleWrite("LogonServer: " & _OEMtoChar($objItem.LogonServer) & @CRLF)
        ConsoleWrite("MaximumStorage: " & _OEMtoChar($objItem.MaximumStorage) & @CRLF)
        ConsoleWrite("Name: " & _OEMtoChar($objItem.Name) & @CRLF)
        ConsoleWrite("NumberOfLogons: " & _OEMtoChar($objItem.NumberOfLogons) & @CRLF)
        ConsoleWrite("Parameters: " & _OEMtoChar($objItem.Parameters) & @CRLF)
        ConsoleWrite("PasswordAge: " & _OEMtoChar($objItem.PasswordAge) & @CRLF)
        ConsoleWrite("PasswordExpires: " & _OEMtoChar($objItem.PasswordExpires) & @CRLF)
        ConsoleWrite("PrimaryGroupId: " & _OEMtoChar($objItem.PrimaryGroupId) & @CRLF)
        ConsoleWrite("Privileges: " & _OEMtoChar($objItem.Privileges) & @CRLF)
        ConsoleWrite("Profile: " & _OEMtoChar($objItem.Profile) & @CRLF)
        ConsoleWrite("ScriptPath: " & _OEMtoChar($objItem.ScriptPath) & @CRLF)
        ConsoleWrite("SettingID: " & _OEMtoChar($objItem.SettingID) & @CRLF)
        ConsoleWrite("UnitsPerWeek: " & _OEMtoChar($objItem.UnitsPerWeek) & @CRLF)
        ConsoleWrite("UserComment: " & _OEMtoChar($objItem.UserComment) & @CRLF)
        ConsoleWrite("UserId: " & _OEMtoChar($objItem.UserId) & @CRLF)
        ConsoleWrite("UserType: " & _OEMtoChar($objItem.UserType) & @CRLF)
        ConsoleWrite("Workstations: " & _OEMtoChar($objItem.Workstations) & @CRLF & @CRLF)
    Next
    Exit
    
    ; Info : statt _OEMtoChar könnte man auch _WinAPI_WideCharToMultiByte verwenden
    Func _OEMtoChar($sOEM)
        Local $aDLLReturn, $sAnsi
        $aDLLReturn = DllCall('user32.dll', 'Int', 'OemToChar', 'str', $sOEM, 'str', '')
        Return @error ? $sOEM : $aDLLReturn[2] ; im Fehlerfall den Originalstring ($sOEM) unkonvertiert zurückgeben
    EndFunc   ;==>_OEMtoChar
    Alles anzeigen
  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 6. Februar 2019 um 13:58
    Zitat von Springstil

    Für mich dann doch ein wenig Kompliziert :saint: werde ich mir wohl eine andere Lösung einfallen lassen müssen.

    Ok, dann will ich mal ritterlich sein...

    Im Anhang findest du zwei Versionen. Eine die es via WMI macht, und eine die es via ProcessList macht - such dir eine aus!

    Ich denke mal, so hast du dir das gedacht...

    Edit: While- Schleife vergessen/eingebaut, damit sich das Script nicht selbst beendet.

    Dateien

    _CheckProcess (ProcessList).au3 2,38 kB – 451 Downloads _CheckProcess (WMI).au3 3,94 kB – 408 Downloads
  • ProcessExists für einzelne Benutzer

    • Bitnugger
    • 6. Februar 2019 um 09:46

    Versuche es mal anstelle ProcessExists("hhpxprojwinframe.exe") mit: _Singleton ().

    _Singleton ( $sOccurrenceName [, $iFlag = 0] )

    Für $sOccurrenceName kannst du dann z.B. den Namen des aktuellen Users (@UserName) oder den Profilpfad (@AppDataDir) angeben.

  • Sammelthread "AutoIt Interne Funktionen : Erwartetes Ergebnis -> Tatsächliches Ergebnis"

    • Bitnugger
    • 4. Februar 2019 um 21:33

    Funktion: Opt('MustDeclareVars', 1)

    Wenn im Script die Pre-Deklaration von Variablen mit Opt('MustDeclareVars', 1) erzwungen wird, bevor man sie benutzen darf, denkt und erwartet man, dass AU3Check meckert, wenn dann doch eine Variable benutzt wird, die vorher nicht deklariert wurde - und wenn AU3Check nicht meckert, dass alles im grünen Bereich ist und das Script dann keinesfalls an irgendeiner Stelle abbricht, weil es auf eine nicht deklarierte Variable stößt.

    Falsch gedacht...

    Hier ein Bsp:

    Code
    Opt('MustDeclareVars', 1)
    
    _Test(1) ; funktioniert!
    _Test() ; funktioniert nicht! --> "M:\Test.au3" (13) : ==> Variable used without being declared.:
    
    Func _Test($vArg = '')
        ConsoleWrite('> $vArg = "'&$vArg&'"' & @CRLF)
        If $vArg Then
            Local $iX = 64, $iY = 32
            ConsoleWrite('+ $iX = ' & $iX & @CRLF)
            ConsoleWrite('+ $iY = ' & $iY & @CRLF & @CRLF)
        Else
            $iX = 92 ; <-- Ist $vArg = '', wurden $iX und $iY nicht deklariert - das erkennt AU3Check nicht!
            $iY = 48 ; <--
            ConsoleWrite('! $iX = ' & $iX & @CRLF)
            ConsoleWrite('! $iY = ' & $iY & @CRLF & @CRLF)
        EndIf
    EndFunc
    Alles anzeigen

    In den meisten Fällen wird das Script sofort beendet und eine entsprechende Fehlermeldung ausgegeben, wenn es bei der Ausführung dann doch auf eine nicht pre-deklarierte Variable stößt, aber dies ist nicht immer der Fall! In diesen speziellen Fällen - wenn keine Fehlermeldung kommt und das Script einfach nur einfriert - wird es meist sehr schwer, den Fehler zu finden.

    Hier der relevante Teil der Funktion, die mir graue Harre beschert hat...

    Func _ListViewProc($hWnd, $iMsg, $wParam, $lParam, $iSubclassId, $hHdrFont)
    Code
    Func _ListViewProc($hWnd, $iMsg, $wParam, $lParam, $iSubclassId, $hHdrFont)
        ; ...
            If $iIndex = 0 And ($hWndFrom = $g_hIOOutHeader Or $hWndFrom = $g_hIOInpHeader) Then
                Local $iX, $iY, $iDX = 68, $iDY1 = 32, $iDY2 = 42, $hHDImageList = $hWndFrom = $g_hIOOutHeader ? $g_aHDImageLists[0] : $g_aHDImageLists[1]
                $iX = Floor(((DllStructGetData($tNMCustomDraw, "Right") - DllStructGetData($tNMCustomDraw, "Left")) - $iDX) / 2)
                $iY = Floor(((DllStructGetData($tNMCustomDraw, "Bottom") - DllStructGetData($tNMCustomDraw, "Top")) - ($hWndFrom = $g_hIOOutHeader ? $iDY1 : $iDY2)) / 2)
                _GUIImageList_Draw($hHDImageList, 0, $hDC, $iX, $iY)
            EndIf
        
            ; First line
            $iX = StringLen($aHdrInfo[$iIndex][0])
            DllStructSetData($tNMCustomDraw, "Left", DllStructGetData($tNMCustomDraw, "Left") + $aHdrInfo[$iIndex][3]) ; Left margin
            DllStructSetData($tNMCustomDraw, "Right", DllStructGetData($tNMCustomDraw, "Right") - $aHdrInfo[$iIndex][3]) ; Right margin
            DllStructSetData($tNMCustomDraw, "Top", DllStructGetData($tNMCustomDraw, "Top") + $aHdrInfo[$iIndex][3]) ; Top margin
            DllStructSetData($tNMCustomDraw, "Bottom", DllStructGetData($tNMCustomDraw, "Top") + $aHdrInfo[$iIndex][5]) ; Line height
            DllCall("user32.dll", "int", "DrawTextW", "handle", $hDC, "wstr", $aHdrInfo[$iIndex][0], "int", $iX, "struct*", DllStructGetPtr($tNMCustomDraw, "Left"), "uint", $aHdrInfo[$iIndex][4]) ; _WinAPI_DrawText
            ; Other lines
            For $i = 1 To $aHdrInfo[$iIndex][6] - 1
                $iX = StringLen($aHdrInfo[$iIndex][$i])
                DllStructSetData($tNMCustomDraw, "Top", DllStructGetData($tNMCustomDraw, "Top") + $aHdrInfo[$iIndex][5]) ; Line top
                DllStructSetData($tNMCustomDraw, "Bottom", DllStructGetData($tNMCustomDraw, "Bottom") + $aHdrInfo[$iIndex][5]) ; Line height
                DllCall("user32.dll", "int", "DrawTextW", "handle", $hDC, "wstr", $aHdrInfo[$iIndex][$i], "int", $iX, "struct*", DllStructGetPtr($tNMCustomDraw, "Left"), "uint", $aHdrInfo[$iIndex][4]) ; _WinAPI_DrawText
            Next
        
            Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors
        ; ...
    EndFunc  ;==>_ListViewProc
    Alles anzeigen
  • Zahlen größer 64-bit ?

    • Bitnugger
    • 3. Februar 2019 um 23:54

    BigNum UDF

    Auf dieser Seite findest du auch ein Example.

    Hier noch ein Bsp. - vielleicht hilft dir das ja... denn ohne Script kann man nur raten...

    Code
    #include "BigNum.au3"
    
    ; #FUNCTION# ;====================================================================================
    ;
    ; Name...........: _BigNum_Compare
    ; Description ...: Compares $sX $sY
    ; Syntax.........: _BigNum_Compare($sX, $sY)
    ; Parameters ....: $sX - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ;                  $sY - StringNumber: Minus"-" Digits"0"..."9" Separator"." ("-1234567890.12345")
    ; Return values .: Success - Return:
    ;                  |0  - $sX and $sY are equal
    ;                  |1  - $sX is greater than $sY
    ;                  |-1 - $sX is less than $sY
    ;                  Failure - sets @error to 1 if $sX/$sY not valid StringNumber
    ; Author ........: Eukalyptus www.autoit.de
    ;
    ; ;===============================================================================================
    
    ; $X = 10000000000000000000 ; warning: Integer found larger than INT64, which could give unintended results.
    ; $Y = 0.000000000000000001 ; warning: Integer found larger than INT64, which could give unintended results.
    $X = 1000000000000000000
    $Y = 0.00000000000000001
    ConsoleWrite('> $X = ' & $X & '  VarGetType($X) = ' & VarGetType($X) & @CRLF) ; --> 1000000000000000000
    ConsoleWrite('> $Y = ' & $Y & '  VarGetType($Y) = ' & VarGetType($Y) & @CRLF) ; --> 1e-017
    $X = '10000000000000000001234567773330'
    $Y = '0.000000000000000001234567773331'
    ConsoleWrite('> $X = ' & $X & '  VarGetType($X) = ' & VarGetType($X)  & @CRLF) ; --> 1000000000000000000
    ConsoleWrite('> $Y = ' & $Y & '  VarGetType($Y) = ' & VarGetType($Y)  & @CRLF) ; --> 0.00000000000000001
    
    $iCompare = _BigNum_Compare($X, $Y)
    ConsoleWrite((@error ? _ErrExit('_BigNum_Compare($X, $Y)', @error) : $iCompare = 0 ? '+ $sX and $sY are equal' : $iCompare = 1 ? '- $sX is greater than $sY' : '! $sX is less than $sY') & @CRLF)
    ConsoleWrite('> $iCompare = ' & $iCompare & @CRLF)
    
    ;~ If $X = $Y Then --> If $iCompare = 0 Then
    ;~ If $X > $Y Then --> If $iCompare = 1 Then
    ;~ If $X < $Y Then --> If $iCompare = -1 Then
    
    ;~ If $X = $Y Then --> If _BigNum_Compare($X, $Y) = 0 Then
    ;~ If $X > $Y Then --> If _BigNum_Compare($X, $Y) = 1 Then
    ;~ If $X < $Y Then --> If _BigNum_Compare($X, $Y) = -1 Then
    
    Func _ErrExit($sErrMsg, $iError, $iScriptLineNumber = @ScriptLineNumber)
        ConsoleWrite("@@ Debug line" & @TAB & $iScriptLineNumber & "   var: $sErrMsg --> " & $sErrMsg & @CRLF & "!@ " & @TAB & "#Error: " & $iError & @CRLF)
    EndFunc
    Alles anzeigen
  • Windows 10 (64 bit) ?

    • Bitnugger
    • 3. Februar 2019 um 21:23
    Zitat von Silvermoon1

    meine Frage ist: ob Autoit auch für den Windows 10 (64 bit) Rechner geeignet ist? X/

    Ja, AutoIt läuft auch auf Windows 10 X64.

  • Zahlen größer 64-bit ?

    • Bitnugger
    • 2. Februar 2019 um 21:36
    Zitat von Schmunke

    AutoIt kann das nicht ... gibt es vielleicht eine UDF dafür ?

    Ja, gibt es...

    Dateien

    BigNum.au3 35,33 kB – 262 Downloads
  • SciTE - Option "MustDeclareVars" mittels Property automatisch setzen

    • Bitnugger
    • 1. Februar 2019 um 20:22

    Ich lade in SciTe ein Script, in dem die Option "Opt('MustDeclareVars', 1)" nicht gesetzt ist. Nun ändere ich ein paar Zeilen und speichere die Änderungen, wobei die Option "Opt('MustDeclareVars', 1)" nicht eingefügt wird.

    Nun wähle ich im Menü Datei "Kopie speichern unter..." oder "Speichern unter..." aus... und dann wird dein Lua-Script ausgeführt... und fügt die Option "Opt('MustDeclareVars', 1)" in beide Scripte ein... sollte es aber eigentlich nicht. ;)

  • Hilfe zu _IsPressed bei Passwordfeldern

    • Bitnugger
    • 28. Januar 2019 um 16:56
    Zitat von Musashi

    Durch den Zusatz 'nicht', also :

    "... ansonsten wird das Control mit Millionen (und ich untertreibe nicht) Nachrichten zugemüllt."

    bzw. :

    "... ansonsten wird das Control mit Millionen (und ich übertreibe nicht) Nachrichten zugemüllt."

    wird dieser Gegensatz (nach meinem Sprachverständnis) aber aufgehoben ;) !

    Ich verstehe das so:

    Code
    "... ansonsten wird das Control mit Millionen "oder weniger" (und ich untertreibe nicht) Nachrichten zugemüllt." ; --> "er untertreibt nicht"
    "... ansonsten wird das Control mit Millionen "oder mehr" (und ich übertreibe nicht) Nachrichten zugemüllt."     ; --> "er übertreibt nicht"

    Da in dem Satz kein "oder weniger" und kein "oder mehr" enthalten ist, kann man davon ausgehen, dass "oder mehr" gemeint ist.

  • Hilfe zu _IsPressed bei Passwordfeldern

    • Bitnugger
    • 28. Januar 2019 um 15:36
    Zitat von alpines

    Und bitte nur einmal _SendMessage verwenden, ansonsten wird das Control mit Millionen (und ich untertreibe nicht) Nachrichten zugemüllt.

    Das soll natürlich (und ich übertreibe nicht) heißen! ;)

  • Vom Dateityp zur Dateiendung

    • Bitnugger
    • 26. Januar 2019 um 21:45
    Zitat von Yjuq

    Hat jemand eine Idee wie ich von dem Dateityp zu der eigentlichen Dateiendung komme?

    Zitat von Yjuq

    Das Problem ist, dass ich erst gar nicht den Pfad habe. Dennoch brauche ich Ihn für die weitere Verarbeitung in meinem Programm.

    So wird das aber nix, denn schau hier:

    Code
    M:\>assoc|find "Textdokument"
    .dic=Textdokument
    .exc=Textdokument
    .scp=Textdokument
    .txt=Textdokument
    
    M:\>ftype|find "Textdokument"
    Textdokument=C:\WINDOWS\system32\NOTEPAD.EXE %1

    oder hier mit AutoIt...

    C
    #include <AutoItConstants.au3>
    #include <Array.au3> ; Required for _ArrayDisplay only.
    
    Global $aAssoc_Textdokument = _GetStdoutRead('assoc|find "Textdokument"')
    _ArrayDisplay($aAssoc_Textdokument, '$aAssoc_Textdokument')
    Global $aFtype_Textdokument = _GetStdoutRead('ftype|find "Textdokument"')
    _ArrayDisplay($aFtype_Textdokument, '$aFtype_Textdokument')
    
    Func _GetStdoutRead($sCMD)
        ConsoleWrite('$sCMD = ' & $sCMD & @CRLF)
        Local $iPID = Run(@ComSpec & ' /C ' & $sCMD, '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        Local $sOutput = StdoutRead($iPID)
        ConsoleWrite($sOutput & @CRLF)
        Return StringRegExp($sOutput, '(.+)\R?', 3)
    EndFunc
    Alles anzeigen
  • Rechentool GUI Fragen

    • Bitnugger
    • 25. Januar 2019 um 22:06
    Zitat von Musashi

    Dbzgl. hat der User GreenCan eine schöne UDF erstellt, die bereits während der Eingabe nur gewünschte Zeichen erlaubt. Name der UDF : _inputmask.au3

    Für eine UDF aber nicht wirklich fein, es mit $WM_COMMAND zu machen...

    InputFilter.au3 von chesstiger kennst du auch? Da wird es mit WinProc gemacht. Im Anhang ist eine Version, bei der ich ein paar Fehler behoben und schlagmichtotichnixmehrwissen geändert habe.

    Dateien

    InputFilter_1.3.7z 5,01 kB – 264 Downloads
  • _GUICtrlButton_SetState

    • Bitnugger
    • 25. Januar 2019 um 18:07
    Zitat von alpines

    $Radio2 = GUICtrlCreateRadio("Radio1", 56, 136, 193, 49, BitOR($GUI_SS_DEFAULT_RADIO, $BS_PUSHLIKE))

    Hihi... hier hast du als Text auch "Radio1" stehen. ;)

    Zitat von co_steffl

    Dachte die gibt es nur als runde Button...

    Wie du selbst schon sagst... ist halt auch nur ein Button... aber eben mit anderen Styles. Das zeigt dir das AutoIt-Info-Tool auch an.

  • SciTE-Interface, Problem bei mehreren SciTE Instanzen

    • Bitnugger
    • 23. Januar 2019 um 23:49
    Zitat von BugFix

    Es gibt eine interne Bufferverwaltung, damit werden ja die Tabs mit Index versehen und auch (irgendwo) gespeichert, denn nach Neustart SciTE sind die Buffer in gleicher Reihenfolge geöffnet, ohne eine Session zu speichern.

    SciTE speichert beim Beenden doch immer automatisch die Session ab... zumindest bei mir... in: $(SciteUserHome)\SciTE.session

    Zitat von BugFix

    Und neue eingebaut. :whistling: Das Auslesen der properties (_GetProperty) führt jetzt immer zum Ergebnis "0" und _GetCurrentFile bringt kein Ergebnis. _WinAPI_MultiByteToWideChar ist dort also nicht sinnvoll, da es das Ergebnis "frisst".

    Habe die Dateien in Post #6 nochmals überarbeitet und noch eine Funktion (_GetLineCount) hinzugefügt. Bei mir funktioniert es. Wenn es bei dir immer noch nicht geht, dann liegt es wohl an der verwendeten Codepage. Hast du bei dir die Props code.page und output.code.page auf 65001 gesetzt? Man könnte auch anhand der Props bestimmen, ob und wie die Strings konvertiert werden...

  • SciTE-Interface, Problem bei mehreren SciTE Instanzen

    • Bitnugger
    • 23. Januar 2019 um 00:09
    Zitat von BugFix

    Für die Funktionalität ist der Parameter nicht erforderlich (habe ihn bisher nicht vermisst).

    Das kann aber schwer ins Auge gehen, denn wenn SciTE gerade stark beschäftigt ist, kann es mit der Antwort ein paar ms dauern.

    Zitat von BugFix

    Die codepage Sachen sind praktisch.

    Ja, vor allem weil man so auch UTF-8-Zeichen in SciTE und in der Eingabeaufforderung ausgeben kann. Da (s. Post #6) hatte ich übrigens noch ein paar Fehler drin, die ich nun aber korrigiert habe.

    Zitat von BugFix

    Das Aktivieren der Tabs mittels Send() ist sicher nicht die optimale Lösung. Im Extension Interface gibt es die Funktion ActivateBuffer(index). Ich habe aber bisher keine Möglichkeit gefunden diese Funktion aufzurufen.

    Ja, Send() ist nur eine Notlösung.

    Extension Interface.

    ...

    Die Methoden InitBuffer, ActivateBuffer und RemoveBuffer stellen die erforderlichen Hooks bereit, sodass Erweiterungen über einen Mechanismus verfügen, um Daten mit einem bestimmten Puffer zu verknüpfen, ähnlich wie SciTE die Monospace-Einstellung jedes Puffers selbst speichert. InitBuffer wird aufgerufen, wenn ein neues Dokument in einem bestimmten Puffer geöffnet wird. Der Puffer kann ein neu zugewiesener Puffer sein oder er kann wiederverwendet werden, wenn die maximale Anzahl von Puffern erreicht wurde. Sobald der Puffer initialisiert wurde, ist er der aktive Puffer. Danach wird ActivateBuffer aufgerufen, wenn der Benutzer zu einem anderen geladenen Puffer wechselt. RemoveBuffer wird aufgerufen, wenn ein vorhandener Puffer geschlossen wird. Danach werden die Indizes der Puffer, die nach dem entfernten Puffer kommen, um eins nach unten verschoben. Nach RemoveBuffer erhält die Erweiterung einen InitBuffer oder ActivateBuffer, um den neuen aktiven Puffer einzurichten.

    ...

    Der erste Satz... hm, ganz so einfach wird das wohl nicht werden.

    Mit "enumproperties" komme ich aber irgendwie nicht klar... bei enumproperties:user hätte ich weit mehr Einträge erwartet.

    enumproperties.png

  • Rechentool GUI Fragen

    • Bitnugger
    • 22. Januar 2019 um 17:43
    Zitat von elysium

    Dann wollte ich noch gerne fragen, ob ihr mir sagen könnt, wie ich den Text in Inputfeldern etwas mehr nach rechts schieben kann, einfach etwas Abstand zum Rand.

    Ein Input-Control ist lediglich eine Sonderform (hat immer nur eine Zeile) des Edit-Controls, dass es nur in AutoIt gibt.

    Für Edit-Controls gibt es die Funktionen _GUICtrlEdit_GetRECT, _GUICtrlEdit_GetRECTEx, _GUICtrlEdit_SetRECT, _GUICtrlEdit_SetRECTEx, _GUICtrlEdit_GetMargins() und _GUICtrlEdit_SetMargins(), mit dem die Abstände abgefragt/geändert werden können.

    Das Schöne daran: Es steht zwar nicht in der AutoIt-Hilfe, aber zumindest _GUICtrlEdit_GetMargins() und _GUICtrlEdit_SetMargins() funktionieren auch mit einem Input-Control!

    Hier ein Bsp.:

    C
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>
    
    Example()
    
    Func Example()
        GUICreate("Set Margins for Input-Control", 450, 150, -1, -1)
        Local $idInput = GUICtrlCreateInput("Input: Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück!", 10, 5, 430, 20)
        ; Get Margins
        $aMargins = _GUICtrlEdit_GetMargins($idInput)
    
        Local $idButtonMargins10 = GUICtrlCreateButton("Set Margins to 10, 10", 10, 35, 430, 20)
        Local $idButtonMargins25 = GUICtrlCreateButton("Set Margins to 50, 50", 10, 65, 430, 20)
        Local $idButtonMargins50 = GUICtrlCreateButton("Set Margins to 75, 75", 10, 95, 430, 20)
        Local $idButtonMarginsDef = GUICtrlCreateButton("Restore Margins to default [" & $aMargins[0] & ', ' & $aMargins[1] & ']', 10, 125, 430, 20)
    
        GUISetState(@SW_SHOW)
    
        ; Loop until the user exits.
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $idButtonMargins10
                    ; Set Margins to 10, 10
                    _GUICtrlEdit_SetMargins($idInput, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 10, 10)
                Case $idButtonMargins25
                    ; Set Margins to 50, 50
                    _GUICtrlEdit_SetMargins($idInput, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 50, 50)
                Case $idButtonMargins50
                    ; Set Margins to 75, 75
                    _GUICtrlEdit_SetMargins($idInput, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), 75, 75)
                Case $idButtonMarginsDef
                    ; Restore Margins to default
                    _GUICtrlEdit_SetMargins($idInput, BitOR($EC_LEFTMARGIN, $EC_RIGHTMARGIN), $aMargins[0], $aMargins[1])
            EndSwitch
        WEnd
    EndFunc   ;==>Example
    Alles anzeigen
  • Der Prozedureinsprungpunkt "luaL_register" wurde in der DLL "f:\AutoIt\AutoIt3_LuaScripts\shell.dll" nicht gefunden.

    • Bitnugger
    • 22. Januar 2019 um 16:37
    Zitat von Bitnugger

    PS: Jedes mal, wenn in SciTE ein Tab gewechselt/geladen wird, wird die SciTEStartup.lua ausgeführt!

    Dies ist der Fall, wenn ext.lua.reset=1 ist.

    In der SciTE4AutoIt3-Hilfe steht... "If ext.lua.reset is 0 (the default), the startup script property is checked only once - when SciTE starts."

    In der SciTEGlobal.properties steht bei mir jedoch ext.lua.reset=1, richtig wäre laut Hilfe aber ext.lua.reset=0!

    Habe das jetzt mal in meiner SciTEUser.properties auf 0 gesetzt.

  • SciTE-Interface, Problem bei mehreren SciTE Instanzen

    • Bitnugger
    • 22. Januar 2019 um 16:04
    Zitat von BugFix

    Hier die Version mit zusätzlicher Funktion um das richtige DirectorExtension-Hwnd zu bekommen:

    Sehr schön!

    Zitat von BugFix

    Func SendSciTE_Command($_sCmd) ;, $Wait_For_Return_Info = 0)

    Hehe... $Wait_For_Return_Info wird doch für _GetCurrentFile() und _GetProperty($_sProperty) benötigt... wobei der Parameter in der Funktion gar nicht ausgewertet wurde!

    Ich habe die Funktion SendSciTE_Command() nun entsprechend erweitert und auch zwei neue Funktionen hinzugefügt: _GetCurrentTabNumber() und _SetCurrentTabNumber($iTabNumber).

    Zudem habe ich noch mindestens einen weiteren Fehler behoben und die Ausgaben mit _WinAPI_WideCharToMultiByte() auf UTF-8 umgestellt, damit die Sonderzeichen korrekt dargestellt werden, wenn code.page und/oder output.code.page in SciTE auf 65001 (UTF-8) gesetzt wurde, was bei mir der Fall ist.

    Ein spezieller Fall ist übrigens _OutputToConsole()... denn wenn direkt davor ein ConsoleWrite() ausgeführt wurde und danach nicht ein wenig gewartet wird (das Sleep() in Zeile 76), erscheint die Ausgabe von _OutputToConsole() vor der Ausgabe von ConsoleWrite()! ;)

    Schaue es dir bitte mal an und sage was dazu...

    Dateien

    SciTE_Interface.au3 15,43 kB – 434 Downloads SciTE_Interface_Bsp.au3 5,19 kB – 423 Downloads
  • SciTE-Interface, Problem bei mehreren SciTE Instanzen

    • Bitnugger
    • 22. Januar 2019 um 10:58

    Siehe Bild... SciTE-Instanz #1 hat den Fokus und darin wird auch das Script SciTE_Interface_Bsp.au3 ausgeführt, was allein schon an den Ausgaben von ConsoleWrite zu erkennen ist.

    Die Ausgaben im output panel der SciTE-Instanz #2 sollten im output panel der SciTE-Instanz #1 zu sehen sein und auch die Änderung in Zeile 28 (EINFÜGEWERT) sollte im input panel der SciTE-Instanz #1 zu sehen sein.

    Der Fehler ist in der Funktion SendSciTE_Command... denn dort ermittelst du das falsche Handle für "DirectorExtension", denn bei zwei SciTE-Instanzen gibt es ja auch zwei DirectorExtensions.

    Local $Scite_hwnd = WinGetHandle("DirectorExtension") ; Get SciTE DIrector Handle

    Hiermit wird immer die zuerst erstellte DirectorExtension gefunden, wobei völlig egal ist, welche SciTE-Instanz gerade aktiv ist.

    Weil ich mein SciTE auf UTF-8 umgestellt habe, werden die Umlaute z.B. bei EINFÜGEWERT verstümmelt.

    Code: SciTeUser.properties
    # Internationalisation
    # Unicode
    code.page=65001
    output.code.page=65001

    Ich korrigiere die Ausgaben dann normalerweise immer mit _WinAPI_WideCharToMultiByte($vUnicode, $iCodePage) ; $vUnicode = "EINFÜGEWERT", $iCodePage = 65001

    Die falsche Zeile (28) ergibt sich dadurch, dass der TIME_STAMP jetzt nur noch eine Zeile hat und nicht wie vorher drei (mit #Region).

    Die Aufgabe liegt nun darin, das richtige Handle für die DirectorExtension zu ermitteln... und evtl. sollte man noch prüfen, ob das Script un-kompiliert aus SciTE heraus gestartet wurde.

    SciTE-Instanzen.png

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™