Laß dir nicht alles vorkauen.
Es gibt für den Befehl ein Hilfe-Beispiel.
Beiträge von BugFix
-
-
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.
-
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
[/autoit] [autoit][/autoit] [autoit]
Const $wdAlignParagraphCenter = 1
Const $wdAlignParagraphRight = 2
Const $wdAlignParagraphJustify = 3
Const $wdAlignParagraphDistribute = 4
Const $wdAlignParagraphJustifyMed = 5
Const $wdAlignParagraphJustifyHi = 7
Const $wdAlignParagraphJustifyLow = 8
Const $wdAlignParagraphThaiJustify = 9$oWord = ObjCreate("Word.Application")
[/autoit] [autoit][/autoit] [autoit]
$oWord.Visible = True
$oDoc = $oWord.Documents.Open ('C:\Test.doc')_Test_FormatRange($oWord, $oDoc)
[/autoit] [autoit][/autoit] [autoit]$oDoc.Close
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$oWord.QuitFunc _Test_FormatRange(ByRef $oWord, ByRef $oDoc)
[/autoit] [autoit][/autoit] [autoit]
; 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); Formatieren
[/autoit] [autoit][/autoit] [autoit]
$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 = $wdAlignParagraphJustifySleep (1000)
[/autoit]
$rng.Font.Bold = False
EndFunc -
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.
-
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
[/autoit][autoit][/autoit][autoit]
$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$oDoc.Close ; Dokument schließen
[/autoit]
$oWord.Quit ; Word beenden <== nicht vergessen! sonst sind u.U. einige Wordinstanzen im Hintergrund offen und fressen deinen Speicher
-
Na dann mach es so:
[autoit]$oWord = ObjCreate("Word.Application")
[/autoit][autoit][/autoit][autoit]
$oDoc = $oWord.Documents.Open ('C:\Test.doc')
$oDoc.Range().Select
$oDoc.Range.Copy
$Inhalt = ClipGet()
ConsoleWrite($Inhalt & @CRLF)$oDoc.Close
[/autoit]
$oWord.Quit -
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 aufSpoiler anzeigen
[autoit];
[/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)
;
In der Funktion _AuswertungNotiz($USER, $text) prüfst du ob der $USER auch du selbst bist ( wer anders hat dem Bot nix zu sagen
) 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.
-
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. -
[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] -
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')
[/autoit]
_IsPressed('code', $dll)
;..
_IsPressed('code', $dll)
;..
; usw.
; zum Programmende:
DllClose($dll) -
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
[/autoit] [autoit][/autoit] [autoit]
$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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc currentHK()
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound($aCheck) -1
If BitAND(GUICtrlRead($aCheck[$i]), $GUI_CHECKED) Then
Call(StringTrimLeft(ControlGetText($gui, '', $aCheck[$i]), 1))
EndIf
Next
EndFuncFunc di()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Func di')
;~ Send("{ENTER}-di{ENTER}")
EndFuncFunc water_red()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Func water_red')
;~ Send("{ENTER}-water red{ENTER}")
EndFuncFunc hhn()
[/autoit]
MsgBox(0, '', 'Func hhn')
;~ Send("{ENTER}-hhn{ENTER}")
EndFunc -
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. -
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
- Ich seh grad, der Micha hatte noch ein Edit, mit demselben Vorschlag. Na gut, doppelt hält besser. 
-
Ich verwende "5down" - da kannst du etliche Parameter mitgeben und auch einen sicheren Abschuß von "sich sperrenden" Programmen erzwingen.
-
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)
[/autoit] [autoit][/autoit] [autoit]
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)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$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
WEndFunc di()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Func di')
;~ Send("{ENTER}-di{ENTER}")
EndFuncFunc water_red()
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0, '', 'Func water_red')
;~ Send("{ENTER}-water red{ENTER}")
EndFuncFunc hhn()
[/autoit]
MsgBox(0, '', 'Func hhn')
;~ Send("{ENTER}-hhn{ENTER}")
EndFunc -
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...
-
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. -
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]
[/autoit] [autoit][/autoit] [autoit]
; Wenn keine PID übergeben, wird der Pfad der aktuellen Anwendung anhand der PID ermittelt
ConsoleWrite(_GetPathByPID() & @CRLF);===============================================================================
[/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 ;==>_GetPathByPIDEdit: 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.
-
Ich habe einen Ordner den ich durchsuche möchte
Womit möchtest du durchsuchen? - Mit einer Lupe?
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?! -
vieleicht sollte man wirklich öfter mal die Hilfe nutzen und schauen was man mit der Funktion machen kann.
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 .