Kein Problem:
[autoit]#include <file.au3>
$logPath = @ScriptDir & '\send.log'
Func Senden1()
Send($F1Send)
Send("{ENTER}")
_FileWriteLog($logPath, $F1Send)
EndFunc
Kein Problem:
[autoit]#include <file.au3>
$logPath = @ScriptDir & '\send.log'
Func Senden1()
Send($F1Send)
Send("{ENTER}")
_FileWriteLog($logPath, $F1Send)
EndFunc
Hier mal mit Strings gemacht:
$strAlt = 'A Z'
$strInsert = 'X $$ X'
; einfügen ab Pos. 7
$arAlt = StringSplit($strAlt, '')
$arInsert = StringSplit($strInsert, '')
$pos = 7
For $i = 1 To UBound($arInsert) -1
$arAlt[$pos+$i] = $arInsert[$i]
Next
$strOut = ''
For $i = 1 To UBound($arAlt) -1
$strOut &= $arAlt[$i]
Next
MsgBox(0, '', $strOut)
Äh,wie jetzt?
Steht in der Datei 100 mal Chr(32) und du willst z.B. einen Text von 20 Zeichen ab Position 1 schreiben und den Rest belassen?
Tipp:
Füge bei jedem Senden ein _FileWriteLog() an. Dann speicherst du automatisch alles was gesendet wird.
Statt des Save-Buttons würde ich beim Beenden per MsgBox fragen ob gespeichert werden soll, wenn nein löschst du die Logdatei.
Hier hast du alle Parameter, die du abfragen kannst. Ich hab mal das momentan nicht wichtige auskommentiert und nur für alle HD gemeinsam ('_Total') ausgeben lassen.
Pack es in eine Schleife - fertig. ![]()
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$Output=""
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_PerfFormattedData_PerfDisk_PhysicalDisk", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If $objItem.Name = '_Total' Then
$Output = $Output & "Name: " & $objItem.Name & @CRLF
;~ $Output = $Output & "AvgDiskBytesPerRead: " & $objItem.AvgDiskBytesPerRead & @CRLF
;~ $Output = $Output & "AvgDiskBytesPerTransfer: " & $objItem.AvgDiskBytesPerTransfer & @CRLF
;~ $Output = $Output & "AvgDiskBytesPerWrite: " & $objItem.AvgDiskBytesPerWrite & @CRLF
;~ $Output = $Output & "AvgDiskQueueLength: " & $objItem.AvgDiskQueueLength & @CRLF
;~ $Output = $Output & "AvgDiskReadQueueLength: " & $objItem.AvgDiskReadQueueLength & @CRLF
;~ $Output = $Output & "AvgDisksecPerRead: " & $objItem.AvgDisksecPerRead & @CRLF
;~ $Output = $Output & "AvgDisksecPerTransfer: " & $objItem.AvgDisksecPerTransfer & @CRLF
;~ $Output = $Output & "AvgDisksecPerWrite: " & $objItem.AvgDisksecPerWrite & @CRLF
;~ $Output = $Output & "AvgDiskWriteQueueLength: " & $objItem.AvgDiskWriteQueueLength & @CRLF
;~ $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
;~ $Output = $Output & "CurrentDiskQueueLength: " & $objItem.CurrentDiskQueueLength & @CRLF
;~ $Output = $Output & "Description: " & $objItem.Description & @CRLF
;~ $Output = $Output & "DiskBytesPersec: " & $objItem.DiskBytesPersec & @CRLF
$Output = $Output & "DiskReadBytesPersec: " & $objItem.DiskReadBytesPersec & @CRLF
;~ $Output = $Output & "DiskReadsPersec: " & $objItem.DiskReadsPersec & @CRLF
$Output = $Output & "DiskTransfersPersec: " & $objItem.DiskTransfersPersec & @CRLF
$Output = $Output & "DiskWriteBytesPersec: " & $objItem.DiskWriteBytesPersec & @CRLF
;~ $Output = $Output & "DiskWritesPersec: " & $objItem.DiskWritesPersec & @CRLF
;~ $Output = $Output & "Frequency_Object: " & $objItem.Frequency_Object & @CRLF
;~ $Output = $Output & "Frequency_PerfTime: " & $objItem.Frequency_PerfTime & @CRLF
;~ $Output = $Output & "Frequency_Sys100NS: " & $objItem.Frequency_Sys100NS & @CRLF
;~ $Output = $Output & "PercentDiskReadTime: " & $objItem.PercentDiskReadTime & @CRLF
;~ $Output = $Output & "PercentDiskTime: " & $objItem.PercentDiskTime & @CRLF
;~ $Output = $Output & "PercentDiskWriteTime: " & $objItem.PercentDiskWriteTime & @CRLF
$Output = $Output & "PercentIdleTime: " & $objItem.PercentIdleTime & @CRLF
;~ $Output = $Output & "SplitIOPerSec: " & $objItem.SplitIOPerSec & @CRLF
;~ $Output = $Output & "Timestamp_Object: " & $objItem.Timestamp_Object & @CRLF
;~ $Output = $Output & "Timestamp_PerfTime: " & $objItem.Timestamp_PerfTime & @CRLF
;~ $Output = $Output & "Timestamp_Sys100NS: " & $objItem.Timestamp_Sys100NS & @CRLF
If Msgbox(1,"WMI Output",$Output) = 2 Then ExitLoop
EndIf
Next
Else
Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_PerfFormattedData_PerfDisk_PhysicalDisk" )
Endif
Hier mal eine Möglichkeit um Koordinaten zu ermitteln. Beenden, indem die Maus auf (0,0) gesetzt wird.
AutoitSetOption('MouseCoordMode', 1) ; 0 = relative coords to the active window
; 1 = absolute screen coordinates (default)
; 2 = relative coords to the client area of the active window
_CursorPos()
Func _CursorPos()
Local $x, $y
Do
$pos = MouseGetPos()
$x = $pos[0]
$y = $pos[1]
Select
Case ((@DesktopWidth-$pos[0]) < 130) And ((@DesktopHeight-$pos[1]) >= 60)
$x = @DesktopWidth-130
$y = $pos[1]
Case ((@DesktopWidth-$pos[0]) < 130) And ((@DesktopHeight-$pos[1]) < 60)
$x = @DesktopWidth-130
$y = @DesktopHeight-60
Case ((@DesktopWidth-$pos[0]) >= 130) And ((@DesktopHeight-$pos[1]) < 60)
$x = $pos[0]
$y = @DesktopHeight-60
EndSelect
ToolTip('x = ' & $pos[0] & @LF & 'y = ' & $pos[1], $x, $y, 'Cursorposition', 1)
Until ($pos[0] = 0 And $pos[1] = 0)
ToolTip('Funktion beendet', $pos[0], $pos[1], 'Cursorposition', 1)
Sleep(1500)
ToolTip('')
EndFunc ;==>_CursorPos
@(VX-)Rexx
Ich stimme dir insofern zu, dass dieser Punkt in der bisherigen Doku keinen Eingang gefunden hat und dies wünschenswert wäre.
Andererseits kann ich mir nicht verkneifen zu sagen, dass jemand der Arrays in einem Array ablegt schon tiefergehende Programmierkenntnisse besitzen sollte (nicht zwingend in AutoIt, nur fürs Verständnis) und somit durch try & error nach spätestens 5 Minuten zu diesem Ergebnis kommt. ![]()
EDIT:
Ich habe anhand deines Beispiels mal einen Beitrag für unser Wiki geschrieben.
Arrays als Elemente eines Arrays
Nimm beide, und was dir dann nicht gefällt, gibst du mir. ![]()
Nee, ernsthaft. Ist sicher stark von deiner Nutzung abhängig. Ich nehme eig. lieber langsam laufende Platten. Performanceverlust beim Lesen/schreiben halte ich für vernachlässigbar.
Guck mal hier rein, da verwende ich das:
ToolTip, beenden mit Mausbewegung bzw. nach Zeitablauf
Wenn ich z.B. aus einer Anwendung in die Zwischenablage kopiere, gebe ich i.A. per ToolTip aus: '...wurde in die Zwischenablage kopiert'. Dahinter ein Sleep, damit der User auch Zeit zum Lesen hat.
Da jeder unterschiedlich schnell liest, suchte ich nach einer möglichst einfachen Variante um den ToolTip vor Ablauf der Zeit zu killen.
Daraus ist diese Funktion entstanden.
Wird während der Tooltip-Anzeige die Maus um mehr als 10 Pixel horizontal oder vertikal bewegt, wird der Tooltip beendet.
Die Parameter sind identisch, wie bei ToolTip. Hinzugekommen ist $TIME mit Voreinstellung von 3 s.
Edit:
Irgendwas findet man immer noch zum Ändern. ![]()
Hab jetzt als Standard (wenn $x oder $y =-1), dass der Tipp an der Mausposition gezeigt wird.
_ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
;----------------------------------------------------------------------------------------------------------------------
; Function _ToolTipMouseExit("text", [time [, x=-1 [, y=-1 [, "title" [, icon [, options]]]]]] )
;
; Description usual ToolTip, will be terminate with mouse move, latest after time
;
; Parameter same ase used by ToolTip
; if x Or y =-1 then ToolTip will be placed at mouse position
; optional $TIME default is 3000 ms
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
If $TIME = -1 Then $TIME = 3000
Local $start = TimerInit(), $pos0 = MouseGetPos()
If ($x = -1) Or ($y = -1) Then
ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT)
Else
ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
EndIf
Do
Sleep(50)
$pos = MouseGetPos()
Until (TimerDiff($start) > $TIME) Or _
(Abs($pos[0] - $pos0[0]) > 10 Or _
Abs($pos[1] - $pos0[1]) > 10)
ToolTip('')
EndFunc ;_ToolTipMouseExit
Nein, es ist kein Bug. Du kannst nur nicht direkt auf ein Array innerhalb eines Array-Elements zugreifen. Du mußt es erst separieren:
[autoit]$Array[3]=$AnotherArray
; Anzeigen von $AnotherArray[2]
$x = $Array[3]
MsgBox(0, '', $x[2])
Wenn ich das richtig sehe, ermittelst du die abgelaufene Zeit durch ein Sleep(1000) in deiner For-Schleife.
Damit kannst du diese Schleife natürlich kaum verlassen.
Wenn du mit einer gegebenen Zeitspanne arbeiten möchtest und gleichzeitig Interaktion zulassen willst, empfiehlt sich der Einsatz von: TimerInit() und TimerDiff(). Probiers mal.
Das installierte Windows ist nicht multilingual, umstellen geht also nicht.
Naja, Hauptsache die Anwendung läuft in englisch, wäre halt nur von der Optik schöner, wenn es gleichmäßig wär.
Trotzdem Danke.
Hallo, wozu gibt es denn Makros in Autoit ? ![]()
DirCopy(@AppDataDir & "\Mozilla\Firefox", "D:\Backup\" , 1)
[/autoit]Hi,
folgendes Problem. Ich bereite einige hier in DE ausrangierte Diagnostik-PC fürs Ausland vor.
Auch hier habe ich das Problem, dass ich keine Windows-Neuinstallation durchführen kann, da dann die verankerten Lizenzinformationen futsch sind.
Für den Auslandseinsatz soll der PC mit englischer Sprache laufen. Kein Problem für die Anwendersoftware, da kann ich das umstellen.
Jetzt hätte ich aber gern auch Windows auf englisch umgestellt. Ist das überhaupt irgendwie möglich (Sprachdateien importieren ?) oder nicht?
System ist Win2K.
Hallo Bernd,
Danke :kiss: - genau so hat es geklappt.
Auch wenn mir nicht ganz klar ist wieso. Ich hatte zu diesem PC keine separaten SATA-Treiber (nur RAID-Treiber, die ich aber mit meiner Win2K-Version nicht verwenden kann, da SP4 erforderlich und das darf ich wegen der installieren Software nicht aufspielen - darunter läuft die nicht). Habe nur die Chipsatz- und Grafiktreiber installiert und dann auf SATA geklont. Booten ging dann anstandslos.
Ich weiß noch von 'nem Notebook mit SATA, dass dort im Gerätemanager nach der Installation auch ein SATA-Controller zu finden war.
Das ist bei dem PC nicht der Fall (vllt. wg. Dual-Channel ?).
Egal - es funzt, und das ist wichtig.
Unter welchem Namen hast du es denn kompiliert? Es darf natürlich NICHT der Name einer existierenden Datei sein -sonst treten benannte Effekte auf.
Hi,
ist mir bisher gar nicht aufgefallen - aber die Funktionen zum Edit-Ctrl geben entweder einen Zeilen- oder einen Zeichen-Index zurück.
Man kann mit keiner Funktion direkt den markierten Text ausgeben.
Hierzu habe ich jetzt eine Funktion hinzugefügt: GUICtrlEditGetSelTxt($h_edit)
;----------------------------------------------------------------------------------------------------------------------
; Fuction _GUICtrlEditGetSelTxt($h_edit)
;
; Description Get selectet text from an edit-control
;
; Parameter $h_edit edit control
;
; Return Succes selected text
; Failure 0 set @error = 1; error from _GUICtrlEditGetSel()
; set @error = 2; nothing selected
;
; Requirement #include <GuiEdit.au3>
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _GUICtrlEditGetSelTxt($h_edit)
Local $sel = _GUICtrlEditGetSel($h_edit)
If ($sel == $EC_ERR) Then
SetError(1)
Return 0
ElseIf (Not IsArray($sel)) Or ($sel[1] = $sel[2]) Then
SetError(2)
Return 0
EndIf
Local $selTxt = ''
$arTxt = StringSplit(GUICtrlRead($h_edit),'')
For $i = $sel[1]+1 To $sel[2]
$selTxt &= $arTxt[$i]
Next
Return $selTxt
EndFunc ;==>_GUICtrlEditGetSelTxt
Cursor an den Anfang setzen (Position 0):
[autoit]_GUICtrlEditSetSel ($edit, 0, 0)
[/autoit]Edit: Wenn du weißt, wieviel Zeichen du markieren möchtest:
[autoit]_GUICtrlEditSetSel ($edit, 0, $anzahl)
[/autoit]Dann bleibt dir nur erst zu markieren:
#include <GuiEdit.au3>
HotKeySet("!s", "_selectionRead") ; Auswahl zeigen mit Alt+s
GUICreate("Test", 200, 100)
$a = GUICtrlCreateEdit("", 20, 20, 150, 32, $WS_HSCROLL, $WS_EX_LAYERED )
GUISetState(@SW_SHOW)
$b = _StringRepeat("1234567890", 15)
GUICtrlSetData($a, $b)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
EndSelect
Sleep(10)
WEnd
Exit
Func _selectionRead()
$sel = _GUICtrlEditGetSel($a)
If IsArray($sel) Then
$editTxt = GUICtrlRead($a)
$arTxt = StringSplit($editTxt,'')
$selTxt = ''
For $i = $sel[1]+1 To $sel[2]
$selTxt &= $arTxt[$i]
Next
EndIf
MsgBox(0, '', "Select: " & $selTxt)
EndFunc
EDIT: Post Nr. 888 - Schnapszahl, ich gebe einen aus ![]()
:tassen: