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

Beiträge von BugFix

  • Doppelte Zahlen

    • BugFix
    • 21. Oktober 2010 um 10:54
    Zitat von Der_Doc

    Meine Frage zwecks den Objekten war nicht so gemeint ob es schneller oder schöner ist sonder ob es proktikabler ist.


    Entscheide selbst:

    kurzer Vergleich Array/Dictionary-Objekt
    [autoit]

    ; === Erstellen Array und Dictionary-Objekt
    ; === 2D-Array, da Dictionary eine Schlüssel-Wert Verwaltung ist
    Local $array[1][2], $oSD = ObjCreate('Scripting.Dictionary')
    ; === Array wird über Index angesprochen
    ; === Dictionary wird direkt über den Schlüssel angesprochen

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

    ; === Werte eintragen
    ; === Array
    If $array[UBound($array)-1][0] <> '' Then ReDim $array[UBound($array)+1][2]
    $array[UBound($array)-1][0] = 'Schlüssel'
    $array[UBound($array)-1][1] = 'Wert'

    ; === Dictionary
    $oSD.Add('Schlüssel', 'Wert')

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

    ; === Wert ausgeben
    ; === Array
    $index = _ArraySearch($array, 'Schlüssel')
    ConsoleWrite($array[$index][1] & @CRLF)

    ; === Dictionary
    ConsoleWrite($oSD.Item('Schlüssel') & @CRLF)

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

    ; === Wert löschen
    ; === Array
    $index = _ArraySearch($array, 'Schlüssel')
    _ArrayDelete($array, $index)

    ; === Dictionary
    $oSD.Remove('Schlüssel')

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

    ; === Überprüfen ob Schlüssel existiert
    ; === Array
    _ArraySearch($array, 'Schlüssel')
    If @error Then
    ConsoleWrite('Existiert nicht' & @CRLF)
    Else
    ConsoleWrite('Existiert' & @CRLF)
    EndIf

    ; === Dictionary
    If $oSD.Exists('Schlüssel') Then
    ConsoleWrite('Existiert' & @CRLF)
    Else
    ConsoleWrite('Existiert nicht' & @CRLF)
    EndIf

    [/autoit]

    Mehr findest du hier: Objekt: Scripting.Dictionary

  • Problem mit _ExcelReadCell

    • BugFix
    • 21. Oktober 2010 um 09:51

    Das Problem entsteht m.M. weil du ab dem zweiten mal versuchst eine bereits geöffnete Datei nochmal zu öffnen.
    Hier ein Bsp., wie es funktioniert (Speichern u. Schließen hab ich nicht integriert, da du vermutlich dieses von Hand machst).

    [autoit]

    Local $oExcel, $oWorkBook
    Local $sFile = "C:\Test.xls" ; die zu bearbeitende XLS
    Local $sSheet = "Tabelle2", $sCell = "A2"

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

    #region - der folgende Bereich muß bei dir dann in einer (zeitgesteuerten) Schleife laufen um immer wieder zu lesen -----------------

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

    ; === 1. versuchen auf ein Excel-Objekt zuzugreifen, falls dieses existiert
    $oWorkBook = ObjGet($sFile, "Excel.Application")
    If @error Then ; Datei noch nicht in Excel geöffnet
    ; === Excel-Objekt neu erstellen
    $oExcel = ObjCreate("Excel.Application")
    ; === gewünschte Datei öffnen
    $oWorkBook = $oExcel.Workbooks.Open($sFile)
    EndIf

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

    ; === Hier kannst du in deine INI schreiben
    ConsoleWrite($oWorkBook.Sheets($sSheet).Range($sCell).Value & @CRLF)

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

    #endregion -------------------------------------------------------------------------------

    [/autoit]
  • Moderation für neue Mitglieder (Shoutbox)

    • BugFix
    • 20. Oktober 2010 um 20:29
    Zitat von Der_Doc

    Oscar was habe ich denn anders gesagt? ?(

    MfG
    Der_Doc


    In der SB sollen die betreffenden Einträge nicht gelöscht werden. Sonst können diese im Nachhinein nicht mehr bewertet werden.

  • Excelarbeitsblatt in eine andere Exceldatei kopieren

    • BugFix
    • 20. Oktober 2010 um 19:11

    Der_Doc: Ich hatte doch schon beantwortet. Meine gezeigte Lösung funktioniert. Das Select ist nur unnütz, schadet aber nicht.

  • Excelarbeitsblatt in eine andere Exceldatei kopieren

    • BugFix
    • 20. Oktober 2010 um 18:28

    Du brauchst nur ein Objekt "Excel.Application". Ist eine Hierarchie: ExcelObjekt-Workbooks-Sheets
    Daraus resultierte auch der Fehler, weil die Workbooks in zwei getrennten Objekten "zu Hause" waren, konnten sie nicht miteinander kommunizieren.
    Ich verwende lieber die Tabellennummern, spart Schreibarbeit. :D Aber Name geht natürlich auch.

    [autoit]

    Local $oExcel = ObjCreate("Excel.Application")
    $oExcel.Visible = 1 ; oder 0 unsichtbar

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

    Local $sFilePathA = 'FileA.xls'
    Local $sFilePathB = 'FileB.xls'
    Local $oBookA = $oExcel.Workbooks.Open($sFilePathA)
    Local $oBookB = $oExcel.Workbooks.Open($sFilePathB)

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

    $oBookA.Sheets(1).Copy( Default, $oBookB.Sheets(1))

    [/autoit]
  • Erweiterte Dateiinfo (eine Datei od. alle eines Ordners)

    • BugFix
    • 20. Oktober 2010 um 17:58
    Zitat von hundi

    zum schreiben in die erweiterten Datei Infos?


    Danach habe ich bisher vergeblich gesucht. :wacko:

  • Subscript used with non-Array variable

    • BugFix
    • 19. Oktober 2010 um 22:28

    Diese Fehlermeldung kommt in deinem Fall sicher, weil IniRead fehlgeschlagen ist (Entschlüsseln versagt).
    Du hast mehrere Möglichkeiten anzusetzen, z.B.:
    - Fehler beim Entschlüsseln abfragen
    - Fehler beim Ini lesen abfragen
    Ein sauberes Fehlermanagement sollte dich zum Ziel bringen.

  • Transparente Buttons

    • BugFix
    • 19. Oktober 2010 um 21:44
    Zitat von Ilse

    Oder wie machen das die Profis hier?

    Ich bin mal so frei und fühl mich mit angesprochen. ;)
    Aber letztlich bin ich da kein guter Ratgeber, da ich keinen Wert auf Style lege. Ich bin ein reiner Funktionalist.

  • Fokus auf Button

    • BugFix
    • 19. Oktober 2010 um 21:18

    Wenn ich es richtig verstanden habe, soll das Input ausgelesen werden, wenn der Fokus im Input ist und ENTER gedrückt wird.
    Dazu brauchst du einen Hook:

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    Opt("GUIOnEventMode", 1)
    OnAutoItExitRegister('OnAutoItExit')

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

    Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Global $hmod = _WinAPI_GetModuleHandle(0)
    Global $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Global $active = False, $gui, $input

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

    $gui = GUICreate('')
    GUISetOnEvent(-3, '_ende')
    $input = GUICtrlCreateInput('', 10,10,100)

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

    GUISetState()

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

    While 1
    If BitAND(WinGetState($gui), 8) Then
    $active = True
    Else
    $active = False
    EndIf
    Sleep(100)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    ;===========================================================
    ; callback function
    ;===========================================================
    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS, $vkCode, $ID, $index
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Or Not $active Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    $vkCode = DllStructGetData($tKEYHOOKS, "vkCode")
    If $wParam = $WM_KEYDOWN And $vkCode = 13 Then ; ENTER gedrückt

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

    $ID = _WinAPI_GetDlgCtrlID(ControlGetHandle($gui, '', ControlGetFocus($gui)))
    If $ID <> $input Then Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    ConsoleWrite(GUICtrlRead($input) & @CRLF) ; Hier darf auf keinen Fall eine MsgBox aufgerufen werden!

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

    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
    EndFunc

    [/autoit]
  • Transparente Buttons

    • BugFix
    • 19. Oktober 2010 um 18:47

    Meinst du so etwas:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $GUImain = GUICreate('Main', 255, 40, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
    GUICtrlCreatePic(@Systemdir & "\oobe\images\mslogo.jpg", 0, 0, 255, 40)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    $GUIBtn = GUICreate("", 80, 20, 155, 10, $WS_POPUP, $WS_EX_MDICHILD, $GUImain)
    WinSetTrans($GUIBtn, "", 150)
    $Btn = GUICtrlCreateButton('Button', 0, 0, 80, 20)

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

    GUISetState(@SW_SHOW, $GUIBtn)
    GUISetState(@SW_SHOW, $GUImain)

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit]
  • Hilfe bei Arrays (mein erstes Mal!)

    • BugFix
    • 19. Oktober 2010 um 17:20

    Sag doch mal, aus welchem Programm du die Daten rauskopierst. Vielleicht kommst du ja mit ControlCommand/ ControlGetText etc. weiter. Hast du versucht die Controls mit dem AutoIt-Windows-InfoTool zu identifizieren?

  • Bitte um Hilfe beim Formatieren eines Befehls

    • BugFix
    • 19. Oktober 2010 um 10:52

    Es funktioniert problemlos:

    [autoit]


    ;=== Test_param.au3
    $param = ''
    If $CMDLINE[0] Then
    For $i = 1 To $CMDLINE[0]
    $param &= $CMDLINE[$i] & @CRLF
    Next
    EndIf
    MsgBox(0, '', $param)

    [/autoit]


    Mit folgendem Befehl aufrufen:

    [autoit]

    Run(@AutoItExe & ' Test_param.au3 "param1" "param2" "param3"')

    [/autoit]

    Edit: Die Gänsefüßchen für die Parameter sind nicht zwingend. Ich verwende sie für eine optisch bessere Abtrennung.

  • Teile aus einem Array löschen

    • BugFix
    • 18. Oktober 2010 um 16:50

    Der Fehler entsteht beim Splitten, du verwendest als Trenner @CRLF - auf Webseiten wird aber i.A. @LF verwendet. Probiers mal damit zu splitten.

  • DescribeIt - Funktionsheader leicht gemacht (Alpha)

    • BugFix
    • 18. Oktober 2010 um 14:30
    Zitat von Pitter

    keine SciTEUser.properties gibt.
    SciTe ist allerdings installiert.... und nu? ?(


    Dann hast du bisher noch keine Userspezifischen Einstellungen vorgenommen - erst dann wird diese Datei erstellt. Kannst sie also ohne Bedenken auch als leere Textdatei erstellen (Suffix ist .properties !).

  • Problem mit HotKeys

    • BugFix
    • 18. Oktober 2010 um 14:17

    Wenn man statt der Buchstaben deren ASCII-Werte verwendet, kann man das kpl. Skript mittels Array und Schleife in ein paar Zeilen unterbringen. ;)
    Aber wenn du echt zu faul bist die Zeilenumbrüche hier einzufügen, ist dir wohl nicht an Hilfe gelegen.

  • Problem mit HotKeys

    • BugFix
    • 18. Oktober 2010 um 14:00

    1. Wenn du hier nicht lesbaren Code reinstellst, brauchst du dich nicht über Nachfragen wundern.
    2. Herumschreien mögen wir hier gar nicht. Du möchtest Hilfe. Also befleißige dich eines vernünftigen Umgangstones.

  • Welche Dateien benötigt AutoIT auf Fremdsystemen ?

    • BugFix
    • 18. Oktober 2010 um 13:47

    Keinerlei Includes - dann sollte der Ordner "Aut2Exe" ausreichen. Enthält neben der "Aut2Exe.exe" auch die StandardIcon und die EXE-Komprimierung.
    Wie es verwendet wird, findest du in der Hilfe unter
    > Using AutoIt
    >> Compiling Scripts
    >>> Method 3 - The Command Line

  • Welche Dateien benötigt AutoIT auf Fremdsystemen ?

    • BugFix
    • 18. Oktober 2010 um 12:45

    Wie Hellboy richtig sagte, wenn es nur minimale Veränderungen sind einfach INI oder auch CmdLine nutzen.
    Was du zum Kompilieren brauchst, hängt davon ab, welche Includes deine Skripte erfordern. Denn diese müssen selbstverständlich neben der Aut2Exe.exe alle vorliegen.

  • Namen einer exe datei gehen

    • BugFix
    • 18. Oktober 2010 um 12:17
    Zitat von Baron1977

    der Windows Explorer.exe den möchte ich aber nicht offnen sondern das Kontextmenu wo steht eigenschaft und an taskleiste lösen.


    Uns wäre sehr geholfen, wenn bei Systemfragen auch das System benannt wird. Ich habe XP und bei mir gibt es dergleichen nicht.

  • Maximiertes Fenster herunterziehen wie bei Win7 für XP und Vista

    • BugFix
    • 18. Oktober 2010 um 12:06

    Habe WinXP und sehe mich mal wieder bestätigt, dass Win7 wohl eher etwas für Grafikenthusiasten und Effektliebhaber ist. OK, wer es mag. :rolleyes:

    Zitat von funkey

    Einfach ein maximiertes Fenster an der Titelleiste anklicken und herunterziehen um es wiederherzustellen, bzw. ein nicht maximiertes Fenster einfach nach oben schieben um es zu maximieren.

    Funktioniert (aber ein Klick auf "Verkleinern/Maximieren" bewirkt doch dasselbe und geht schneller).

    Zitat von funkey

    Ebenfalls kann man das Fenster nach rechts oder links schieben, um es auf genau der Hälfte des Bildschirmes anzuzeigen.

    Da regt sich auf meinem PC gar nix, aber kein Problem, da ich kein Freund von Effekten bin.
    @fukey: Nicht dass du mich mißverstehst, ich möchte deine Leistung nicht schmälern. Ich bin wohl einfach zu alt für solche Gimmicks. :D
    Meine PC's bekommen immer das Klassik-Design und wo es irgend geht verzichte ich eh auf Mausklickerei, Tastatur ist da weitaus schneller. ;)

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™