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

  • Worddatei aulesen?

    • BugFix
    • 5. April 2009 um 14:01

    Laß dir nicht alles vorkauen. :evil:
    Es gibt für den Befehl ein Hilfe-Beispiel.

  • Explorer bedienen

    • BugFix
    • 5. April 2009 um 13:40

    Wozu willst du das im Explorer machen? Das kannst du doch direkt tun. Schau mal in der Hilfe unter: Funktionsreferenz => File, Directory and Disk Management.

  • FileWrite in Word

    • BugFix
    • 5. April 2009 um 11:05

    Hier mal ein kleines Bsp., wie du das realisiertst. Die Funktionen für Save und SaveAs findest du in der Word-UDF.

    Spoiler anzeigen
    [autoit]

    Const $wdAlignParagraphLeft = 0
    Const $wdAlignParagraphCenter = 1
    Const $wdAlignParagraphRight = 2
    Const $wdAlignParagraphJustify = 3
    Const $wdAlignParagraphDistribute = 4
    Const $wdAlignParagraphJustifyMed = 5
    Const $wdAlignParagraphJustifyHi = 7
    Const $wdAlignParagraphJustifyLow = 8
    Const $wdAlignParagraphThaiJustify = 9

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

    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = True
    $oDoc = $oWord.Documents.Open ('C:\Test.doc')

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

    _Test_FormatRange($oWord, $oDoc)

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

    $oDoc.Close
    $oWord.Quit

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

    Func _Test_FormatRange(ByRef $oWord, ByRef $oDoc)
    ; Bereich festlegen
    ; Range auf dritten Absatz festlegen
    Local $rng = $oDoc.Paragraphs(3).Range
    ; oder Zeichen von - bis
    ;~ Local $rng = $oDoc.Range(10,20)
    ; oder Satz 6
    ;~ Local $rng = $oDoc.Sentences(6)
    ; oder Wort 1
    ;~ Local $rng = $oDoc.Words(1)
    ; oder gemixt, in Satz 5 das 4. Wort
    ;~ Local $rng = $oDoc.Sentences(5).Words(4)

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

    ; Formatieren
    $rng.Font.Size = 14
    $rng.Font.Name = "Arial"
    $rng.Font.Color = 0x0000FF ; in BGR-Format
    $rng.Font.Bold = True

    ; Alignement zentriert
    $rng.ParagraphFormat.Alignment = $wdAlignParagraphCenter
    Sleep (1000)
    ; Alignement rechts
    $rng.ParagraphFormat.Alignment = $wdAlignParagraphRight
    Sleep (1000)
    ; Alignement links
    $rng.ParagraphFormat.Alignment = $wdAlignParagraphLeft
    Sleep (1000)
    ; Alignement Blocksatz
    $rng.ParagraphFormat.Alignment = $wdAlignParagraphJustify

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

    Sleep (1000)
    $rng.Font.Bold = False
    EndFunc

    [/autoit]
  • col1 aus einem array loeschen

    • BugFix
    • 5. April 2009 um 08:37

    Du kannst auch aus meiner UDF-Sammlung ArrayMore.au3 die Funktion _Array2DDelete(ByRef $ARRAY, $iDEL, $bCOL=False) mit True für $bCOL verwenden, dann wird die entsprechende Spalte gelöscht.

  • Worddatei aulesen?

    • BugFix
    • 5. April 2009 um 08:27
    Zitat von team2way

    irwie kommt da bei mir auch beim ausführen ein fehler


    Meinst du nicht auch, dass es hilfreich wäre, wenn du den Fehler hier postest?

    ConsoleWrite war nur zur Überprüfung drin, an dieser Stelle übergibst du halt $Inhalt an dein Edit.

    Hier nochmal kpl. kommentiert:

    [autoit]

    $oWord = ObjCreate("Word.Application") ; Word-Objekt erstellen
    $oDoc = $oWord.Documents.Open ('C:\Test.doc') ; im Word-Objekt eine Datei öffnen, gibt Dokument-Objekt zurück
    $oDoc.Range().Select ; allen Text im $oDoc als Bereich wählen (Range ohne Parameter) und markieren (Select)
    $oDoc.Range.Copy ; den jetzt markierten Bereich kopieren
    ; da du den gesamten Text auslesen möchtest kannst du auch folgendes statt Range verwenden:
    ; $oDoc.Content.Select
    ; $oDoc.Content.Copy
    $Inhalt = ClipGet() ; kopierten Text an Variable $Inhalt übergeben (hier könnte schon direkt die Übergabe an dein Edit erfolgen)
    ConsoleWrite($Inhalt & @CRLF) ; testweise Ausgabe desTextes in die Console

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

    $oDoc.Close ; Dokument schließen
    $oWord.Quit ; Word beenden <== nicht vergessen! sonst sind u.U. einige Wordinstanzen im Hintergrund offen und fressen deinen Speicher ;)

    [/autoit]
  • Worddatei aulesen?

    • BugFix
    • 5. April 2009 um 00:09

    Na dann mach es so:

    [autoit]

    $oWord = ObjCreate("Word.Application")
    $oDoc = $oWord.Documents.Open ('C:\Test.doc')
    $oDoc.Range().Select
    $oDoc.Range.Copy
    $Inhalt = ClipGet()
    ConsoleWrite($Inhalt & @CRLF)

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

    $oDoc.Close
    $oWord.Quit

    [/autoit]
  • iRC-Bot Fragen

    • BugFix
    • 4. April 2009 um 16:33

    Ich hatte das so gelöst, dass alle Aktionen des Bots, die durch mich gesteuert werden sollen, mit /notice eingeleitet werden.
    Damit der Bot "weiß", was er zu sagen hat, übergebe ich den Text innerhalb von $
    Syntax: "/notice Bot-name _FREETEXT $TEXT$"
    _FREETEXT ist dabei das Stichwort, damit der Bot weiß, dass er eine Message zu senden hat, mit _ACTION wird z.B. ein /me .. des Bots ausgelöst.
    NOTICE fragst du ab und rufst dann eine Auswertung auf

    Spoiler anzeigen
    [autoit]

    ;
    ;
    Local $sData = StringSplit($recv, @CRLF)
    For $i = 1 To $sData[0] Step 1
    Local $sTemp = StringSplit($sData[$i], " ")
    If $sTemp[1] = "" Then ContinueLoop
    If $sTemp[1] = "PING" Then _IRCPing($sock, $sTemp[2])
    If $sTemp[0] <= 2 Then ContinueLoop
    Switch $sTemp[2]
    Case 'NOTICE'
    $USER = StringTrimLeft(StringLeft($sTemp[1], StringInStr($sTemp[1], '!')-1), 1)
    $text = ''
    If $sTemp[0] > 3 Then
    For $k = 4 To $sTemp[0]
    If $k = 4 Then
    $text &= StringTrimLeft($sTemp[$k], 1) & ' '
    Else
    $text &= $sTemp[$k] & ' '
    EndIf
    Next
    $text = StringTrimRight($text, 1)
    EndIf
    _AuswertungNotiz($USER, $text)
    ;

    [/autoit]


    In der Funktion _AuswertungNotiz($USER, $text) prüfst du ob der $USER auch du selbst bist ( wer anders hat dem Bot nix zu sagen :D ) und leitest im weiteren die Reaktion des Bots ein.

    Ich habe das noch etwas umfangreicher gelöst, um eine Art KI zu erreichen. Also Reaktion auf Stichworte aus einer Vielzahl von Möglichkeiten, ohne sich zu wiederholen. Direktes Ansprechen der User etc.

  • ganz einfach aber für mich zu schwer :-(

    • BugFix
    • 4. April 2009 um 10:58

    Sag mal bitte für WELCHEN Chat es sein soll. Ich kenne eigentlich keinen, bei dem ich nicht per Messenger automatisch antworten lassen kann.
    Ausnahme: Du chattest auf einer Web-Site, aber die haben oft auch diese Funktion für Idle-Time integriert.

  • Hilfe mit Umgang der Registry

    • BugFix
    • 4. April 2009 um 10:51

    [OT]
    Micha_he:
    Wir hatten irgendwann schonmal darüber geredet, es macht wirklich Sinn (vor allem bei größeren Projekten) sich Struktogramme und Programmablaufpläne zu erstellen.
    Zum Einen sind diese völlig unabhängig von der verwendeten Programmiersprache und zum Anderen sind Logikfehler leichter zu erkennen.
    [/OT]

  • Shift "klemmt"

    • BugFix
    • 4. April 2009 um 00:33
    Zitat von Skull &amp; Bones

    dass man das machen sollte wenn oft _isPressed abgefragt wird o.ä., aber nicht wieso.

    Wenn du _IsPressed aufrufst wird per Voreinstellung die dll geöffnet, der Befehl ausgeführt und die dll geschlossen. Für eine bessere Performance empfiehlt sich bei häufigen Aufrufen:

    [autoit]

    $dll = DllOpen('deine-dll')
    _IsPressed('code', $dll)
    ;..
    _IsPressed('code', $dll)
    ;..
    ; usw.
    ; zum Programmende:
    DllClose($dll)

    [/autoit]
  • Shift "klemmt"

    • BugFix
    • 3. April 2009 um 22:53

    Aha, dann willst du also einen Hotkey bestimmen und unabhängig davon wählen ob Funktion 1 und/oder 2 und/oder 3 ausgeführt werden.
    Das klappt so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $hotkey
    $gui = GUICreate("DotA Gamesettings", 200, 100)
    Global $aCheck[3] = [ _
    GUICtrlCreateCheckbox ("-di", 10, 10, 40), _
    GUICtrlCreateCheckbox ("-water_red", 10, 30, 70), _
    GUICtrlCreateCheckbox ("-hhn", 10, 50, 40)]
    $hklabel = GUICtrlCreateLabel ( "Hotkey: STRG + SHIFT + ", 10, 73 )
    $coKey = GUICtrlCreateCombo('NO', 140, 70, 40, 20)
    $sItem = ''
    For $i = 48 To 90
    If $i = 58 Then $i = 65
    $sItem &= Chr($i) & '|'
    Next
    GUICtrlSetData($coKey, StringTrimRight($sItem, 1), 'NO')
    $btSet = GUICtrlCreateButton('Set', 140, 10, 40, 20)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btSet
    $hk = GUICtrlRead($coKey)
    If $hk <> 'NO' Then
    $hotkey = $hk
    HotKeySet("^+" & $hotkey, 'currentHK')
    Else ; wenn "NO" gewählt wurde, wird der Hotkey zurückgesetzt (deaktiviert)
    HotKeySet("^+" & $hotkey)
    EndIf
    EndSwitch
    WEnd

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

    Func currentHK()
    For $i = 0 To UBound($aCheck) -1
    If BitAND(GUICtrlRead($aCheck[$i]), $GUI_CHECKED) Then
    Call(StringTrimLeft(ControlGetText($gui, '', $aCheck[$i]), 1))
    EndIf
    Next
    EndFunc

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

    Func di()
    MsgBox(0, '', 'Func di')
    ;~ Send("{ENTER}-di{ENTER}")
    EndFunc

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

    Func water_red()
    MsgBox(0, '', 'Func water_red')
    ;~ Send("{ENTER}-water red{ENTER}")
    EndFunc

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

    Func hhn()
    MsgBox(0, '', 'Func hhn')
    ;~ Send("{ENTER}-hhn{ENTER}")
    EndFunc

    [/autoit]
  • Links auf Forenbeiträge

    • BugFix
    • 3. April 2009 um 21:45

    Hi,
    mir ist aufgefallen, dass häufig (besonders in der Shoutbox) Fehler beim Verlinken auf Beiträge im Forum gemacht werden.
    Es wird einfach aus der Adressleiste des Browsers kopiert. Nur damit kann man nix anfangen. Dieser Link enthält die ID des angemeldeten Users. Da diese für andere nicht zutrifft, hat man beim Wechsel auf den Link, den Besucherstatus und kann nicht antworten.
    Deshalb folgende Bitte:
    Immer den Permalink verwenden, diesen findet ihr durch Rechtsklick auf die Post-Nummer:
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

  • Uhrzeit abgleich

    • BugFix
    • 3. April 2009 um 20:49

    Du kannst eines machen:
    Gehe einfach vom aktuellen Datum/Zeit aus.
    - Alle angegebenen Zeiten müssen demzufolge später als das JETZT sein.
    - Ist die Zeit kleiner, muß sie für den Folgetag sein

    :D - Ich seh grad, der Micha hatte noch ein Edit, mit demselben Vorschlag. Na gut, doppelt hält besser. ;)

  • Alle prozesse killn --> bluescreen

    • BugFix
    • 3. April 2009 um 20:37

    Ich verwende "5down" - da kannst du etliche Parameter mitgeben und auch einen sicheren Abschuß von "sich sperrenden" Programmen erzwingen.

  • Shift "klemmt"

    • BugFix
    • 3. April 2009 um 19:26

    Hi,
    ich hab es dir mal kpl. umgestrickt. Für HotKeys sollte man schon die HotKey-Funktion benutzen. ;)
    Da alle HK mit STRG+SHIFT anfangen, habe ich die anderen Ziffern/Zahlen in einer Combo bereitgestellt.
    Wähle ein Radio, einen HK und mit dem Button Set wird der HK aktiviert.
    Der zugehörige Buchstabe wird daneben angezeigt.
    Mit Auswahl von "NO" und "Set" wird der HotKey deaktiviert.
    Wichtig: Die Bezeichnung der Radios muß identisch sein mit den Funktionen für das HotKey (das führende - stört nicht, wird abgeschnitten).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $gui = GUICreate("DotA Gamesettings", 200, 100)
    Global $aRadio[3][3] = [ _
    [GUICtrlCreateRadio ("-di", 10, 10, 40),'',GUICtrlCreateLabel('', 90, 13, 20, 17)], _
    [GUICtrlCreateRadio ("-water_red", 10, 30, 70),'',GUICtrlCreateLabel('', 90, 33, 20, 17)], _
    [GUICtrlCreateRadio ("-hhn", 10, 50, 40),'',GUICtrlCreateLabel('', 90, 53, 20, 17)]]
    GUICtrlSetState($aRadio[0][0], $GUI_CHECKED)
    $hklabel = GUICtrlCreateLabel ( "Hotkey: STRG + SHIFT + ", 10, 73 )
    $coKey = GUICtrlCreateCombo('NO', 140, 70, 40, 20)
    $sItem = ''
    For $i = 48 To 90
    If $i = 58 Then $i = 65
    $sItem &= Chr($i) & '|'
    Next
    GUICtrlSetData($coKey, StringTrimRight($sItem, 1), 'NO')
    $btSet = GUICtrlCreateButton('Set', 140, 10, 40, 20)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btSet
    $hk = GUICtrlRead($coKey)
    For $i = 0 To UBound($aRadio) -1
    If BitAND(GUICtrlRead($aRadio[$i][0]), $GUI_CHECKED) Then
    If $hk <> 'NO'Then
    $aRadio[$i][1] = $hk
    HotKeySet("^+" & $hk, StringTrimLeft(ControlGetText($gui, '', $aRadio[$i][0]), 1))
    GUICtrlSetData($aRadio[$i][2], $hk)
    Else ; wenn "NO" gewählt wurde, wird der Hotkey zurückgesetzt (deaktiviert)
    HotKeySet("^+" & $aRadio[$i][1])
    GUICtrlSetData($aRadio[$i][2], '')
    EndIf
    ExitLoop
    EndIf
    Next
    EndSwitch
    WEnd

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

    Func di()
    MsgBox(0, '', 'Func di')
    ;~ Send("{ENTER}-di{ENTER}")
    EndFunc

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

    Func water_red()
    MsgBox(0, '', 'Func water_red')
    ;~ Send("{ENTER}-water red{ENTER}")
    EndFunc

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

    Func hhn()
    MsgBox(0, '', 'Func hhn')
    ;~ Send("{ENTER}-hhn{ENTER}")
    EndFunc

    [/autoit]
  • µit Light Thread

    • BugFix
    • 2. April 2009 um 17:52
    Zitat von MatthiasG.

    Aber es ist doch eine Intention, die von ihm aus geht. Ich meine, er kann doch selbst entscheiden, was er macht.


    Ich denke, es dürfte wohl nicht all zu abwegig sein, dass für Aktionen in einem Forum dessen Betreiber zuständig ist... ;)

  • µit Light Thread

    • BugFix
    • 2. April 2009 um 17:41
    Zitat von L3viathan2142

    9 Leute, die umbedingt mitmachen möchten - das reicht mir.
    ...


    Solltest du das nicht besser im Konsens mit den Admins klären? Alleingänge in dieser Richtung finde ich nicht erstrebenswert.

  • Anwendungspfad anhand der PID ermitteln

    • BugFix
    • 1. April 2009 um 19:18

    Hi,
    hier mal eine Möglichkeit mit der PID den Pfad der Anwendung zu ermitteln.
    Wird keine PID übergeben, gibt die Funktion den Pfad für die Anwendung des aktiven Fensters zurück.

    _GetPathByPID()
    [autoit]


    ; Wenn keine PID übergeben, wird der Pfad der aktuellen Anwendung anhand der PID ermittelt
    ConsoleWrite(_GetPathByPID() & @CRLF)

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

    ;===============================================================================
    ; Function Name: _GetPathByPID($PID=-1)
    ; Description:: Get full path of an running application by using PID
    ; Parameter(s): $PID - PID, if not set will used PID from active Window
    ; Requirement(s): #include <WinAPI.au3>
    ; Return Value(s): Success Full ApplicationPath
    ; Failure set @error 1 - process handle failed
    ; 2 - process image failed
    ; 3 - query dosdevice failed
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    #include-once
    #include <WinAPI.au3>
    Func _GetPathByPID($PID=-1)
    If $PID = -1 Then $PID = WinGetProcess(WinGetTitle("[active]"))
    $hProcess = _WinAPI_OpenProcess(0x00000400, True, $PID, True)
    If Not $hProcess Then Return SetError(1,0,0)
    Local $ret, $path, $DevicePath, $DeviceLetter, $strPath = DllStructCreate("char path[256]")
    DllCall(@SystemDir & '\Psapi.dll', "uint64", "GetProcessImageFileNameA", _
    "hwnd", $hProcess, "ptr", DllStructGetPtr($strPath), "int", 256)
    If @error Then Return SetError(2,0,0)
    $path = DllStructGetData($strPath, 'path')
    $DevicePath = StringRegExp($path, "\\Device\\\w*\\[\w\d\+\-()]*", 1)
    Local $lpTargetPath, $aDrive = DriveGetDrive("ALL")
    For $i = 1 To UBound($aDrive) -1
    $ret = DllCall("kernel32.dll", "long", "QueryDosDeviceA", "str", $aDrive[$i], "str", $lpTargetPath, "long", 256)
    If @error Then Return SetError(3,0,0)
    If $ret[2] = $DevicePath[0] Then
    $DeviceLetter = $aDrive[$i]
    ExitLoop
    EndIf
    Next
    DllCall("kernel32.dll", "long", "CloseHandle", "long", $hProcess)
    Return StringReplace($path, $DevicePath[0], StringUpper($DeviceLetter))
    EndFunc ;==>_GetPathByPID

    [/autoit]

    Edit: Es gibt ja kaum was, was nicht schon jemand getan hat ;(
    Habe gerade eine ähnliche Lösung (1 Monat alt) im EN-Forum gefunden. Link
    Naja, ich habs als Zweiter getan - der andere als Vorletzter. :rofl:

  • Dateien ausschließen

    • BugFix
    • 1. April 2009 um 09:16
    Zitat von gorgo1984

    Ich habe einen Ordner den ich durchsuche möchte

    Womit möchtest du durchsuchen? - Mit einer Lupe? :evil:
    Ist es denn so schwer zu schreiben z.B.: ...Ich möchte mit FileOpenDialog Dateien zum Öffnen anbieten außer *.dat
    Woher sollen wir wissen, mit welcher Funktion du "durchsuchen" willst, geschweige denn was du darunter verstehst?!

  • Problem mit StringSplit

    • BugFix
    • 1. April 2009 um 09:12
    Zitat von Der_Doc

    vieleicht sollte man wirklich öfter mal die Hilfe nutzen und schauen was man mit der Funktion machen kann.

    :D Meist reicht es (um einen Überblick zu haben) bei einer neuen AutoIt-Version die Changes anzuschauen. Ich glaub, die StringSplit-Anpassung ist seit 3.3.0.0 .

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™