Ursprungposting wiederhergestellt!
Bitte nicht das Ursprungsposting löschen, sondern nur auf "bearbeiten" klicken und den Thread auf "gelöst" stellen!
Ursprungposting wiederhergestellt!
Bitte nicht das Ursprungsposting löschen, sondern nur auf "bearbeiten" klicken und den Thread auf "gelöst" stellen!
DirRemove sollte helfen.
Raupi, für's einlesen kann man auch einen Einzeiler nehmen (SCNR):
[autoit]If FileExists(@ScriptDir & '\Test.txt') Then GUICtrlSetData($List1, StringReplace(FileRead($sFilename), ',', '|'))
[/autoit]
und beim speichern solltest Du prüfen, ob überhaupt Einträge in der Liste sind ($iCount = positiv?).
Auch von mir alles Gute und feier noch schön!
Ich hatte gerade etwas Langeweile und da habe ich mal schnell ein Mausmeter geschrieben.
Die beiden Werte für die Breite eures Monitors müsst ihr noch anpassen.
#NoTrayIcon
#include <Misc.au3>
#include <String.au3>
; Die zwei folgenden Werte werden für die DPI-Berechnung benötigt
Global $iMonPixel = 1920 ; Monitorbreite in Pixel (Wert anpassen!)
Global $iMonWidth = 517 ; Monitorbreite in mm (Wert anpassen!)
Global $sTitle = 'Mausmeter v1.0'
_Singleton($sTitle)
Global $a, $b, $msg, $sTime, $nSpeed, $iPixel = 0, $nMeter = 0
Global $nDPI = $iMonPixel / $iMonWidth * 25.4
Global $bShowTooltip = True
Global $aOld = MouseGetPos(), $aPos
Global $iTimer = TimerInit()
AdlibEnable('_RefreshDisplay', 500)
HotKeySet('!q', '_End') ; [ALT] + [q] zum beenden des Programms
HotKeySet('!s', '_HideShowTooltip') ; [ALT] + [s] zum anzeigen/verstecken des Tooltips
While 1
$aPos = MouseGetPos()
If $aPos[0] <> $aOld[0] Or $aPos[1] <> $aOld[1] Then
$a = Abs($aOld[0] - $aPos[0])
$b = Abs($aOld[1] - $aPos[1])
$iPixel += Int(Sqrt(($a ^ 2) + ($b ^ 2)))
$nMeter = StringFormat('%0.3f', $iPixel * (.0254 / $nDPI))
$sTime = _NewTicksToTime(TimerDiff($iTimer))
$nSpeed = StringFormat('%0.3f', $nMeter / (TimerDiff($iTimer) / 1000) * 3600 / 1000)
$aOld = $aPos
$msg = 'Laufzeit (hh:mm:ss) = ' & $sTime & @CR & @CR & 'Zurückgelegte Strecke:' & @CR & 'in Pixel: ' & _StringAddThousandsSep($iPixel, '.', ',')
$msg &= @CR & 'in Meter: ' & _StringAddThousandsSep($nMeter, '.', ',')
$msg &= @CR & @CR & 'Durchschnittl. Geschwindigkeit:' & @CR & 'in km/h: ' & _StringAddThousandsSep($nSpeed, '.', ',')
If $bShowTooltip Then ToolTip($msg, @DesktopWidth / 2 - 100, 0, $sTitle, 1, 1)
EndIf
Sleep(10)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _HideShowTooltip()
$bShowTooltip = Not $bShowTooltip
If Not $bShowTooltip Then ToolTip('')
EndFunc
Func _RefreshDisplay()
$sTime = _NewTicksToTime(TimerDiff($iTimer))
$nSpeed = StringFormat('%0.3f', $nMeter / (TimerDiff($iTimer) / 1000) * 3600 / 1000)
$msg = 'Laufzeit (hh:mm:ss) = ' & $sTime & @CR & @CR & 'Zurückgelegte Strecke:' & @CR & 'in Pixel: ' & _StringAddThousandsSep($iPixel, '.', ',')
$msg &= @CR & 'in Meter: ' & _StringAddThousandsSep($nMeter, '.', ',')
$msg &= @CR & @CR & 'Durchschnittl. Geschwindigkeit:' & @CR & 'in km/h: ' & _StringAddThousandsSep($nSpeed, '.', ',')
If $bShowTooltip Then ToolTip($msg, @DesktopWidth / 2 - 100, 0, $sTitle, 1, 1)
EndFunc ;==>_RefreshDisplay
Func _NewTicksToTime($iTicks)
Local $iHours, $iMins, $iSecs = Int($iTicks / 1000)
$iHours = Int($iSecs / 3600)
$iSecs = Mod($iSecs, 3600)
$iMins = Int($iSecs / 60)
$iSecs = Mod($iSecs, 60)
Return StringFormat('%02i:%02i:%02i', $iHours, $iMins, $iSecs)
EndFunc ;==>_NewTicksToTime
Ich habe eine ATI-Grafikkarte und im "Catalyst Control Center" kann man bei "Display Properties", "Rotation" den Drehwinkel angeben.
Wenn man mehrere Monitore am Rechner hat und den Desktop auf diese erweitert, dann hat man logischerweise eine größere Gesamtauflösung.
@DesktopWidth und @DesktopHeight geben einem aber nur die Auflösung vom ersten Monitor zurück. Ich habe mir mal die _WinApi-Funktionen genauer angesehen und dabei entdeckt, dass man damit auch die Gesamtauflösung auslesen kann. Rausgekommen ist eine kleine Funktion:
#include <Array.au3>
#include <WinAPI.au3>
$aRes = _GetGlobalResolution()
_ArrayDisplay($aRes)
Func _GetGlobalResolution()
Local $aRes[4], $hWindow, $stRET
$hWindow = _WinAPI_GetDesktopWindow()
$stRET = _WinAPI_GetWindowPlacement($hWindow)
If Not @error Then
$aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left
$aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top
$aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right
$aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom
Return $aRes
Else
Return SetError(1, 0, 0)
EndIf
EndFunc ;==>_GetGlobalResolution
Ich habe das bei mir mit zwei Monitoren getestet. Der erste Monitor hat eine Auflösung von 1920x1200 und der Zweite 1600x1200, wobei ich den hochkant (um 90 Grad gedreht) betreibe, also 1200x1600.
Ergebnisse:
Zweiter Monitor links neben dem Ersten: -1200, 0, 1920, 1600 (left, top, right, bottom)
Zweiten Monitor rechts neben dem Ersten: 0, 0, 3120, 1600 (left, top, right, bottom)
Zweiter Monitor über dem Ersten: 0, -1600, 1920, 1200 (left, top, right, bottom)
Zweiter Monitor unter dem Ersten: 0, 0, 1920, 2800 (left, top, right, bottom)
Das sieht für mich sehr gut aus und ich hoffe mal, dass das bei euch auch funktioniert. ![]()
Hab sie gefunden! Ist von AspirinJunkie: Auflösung des 2ten Monitors
Edit: Ah, verdammt! Es wird aber nicht angezeigt, ob der Desktop geklont oder erweitert ist und wenn erweitert, in welche Richtung. Schade!
Edit2: Ich habe jetzt mal eine eigene Funktion dazu geschrieben: _GetGlobalResolution
Jein! GuiCtrlRead($CheckboxSame) liefert entweder 1 oder 4 (ok, es gibt Ausnahmen, aber hier egal) und das entspricht immer "True". Du hast aber zusätzlich "==" benutzt, was hier dazu geführt hat, dass das Ergebnis immer "False" war.
Eine CheckBox prüft man aber immer auf $GUI_CHECKED und das am besten mit BitAnd.
Diese Zeile:
[autoit]If GUICtrlRead( $CheckboxSame) == True Then
[/autoit]
gegen diese austauschen:
If BitAnd(GuiCtrlRead($CheckboxSame), $GUI_CHECKED) Then
[/autoit]Wenn Du vor dem sortieren ein "_GUICtrlListView_BeginUpdate" und hinterher ein "_GUICtrlListView_EndUpdate" setzt, bekommt der Anwender auch nichts davon mit, auch wenn sehr viele Einträge im Listview sind.
[Werbung on]MP3-Double-Finder[Werbung off]
Mit meinem Programm findet man die Doppelten recht schnell. ![]()
Naja, sowas habe ich mal gemacht und dabei etwas getrickst:
- vor dem sortieren die Spalte mit dem Datum ins _NowCalcDate-Format umwandeln
- dann sortieren
- und hinterher die Spalte wieder ins deutsche Format umwandeln.
So auf die Schnelle und ungetestet, würde ich sagen, da fehlt eine schließende Klammer nach "Chr (34":
[autoit]RunWait(@COMSPEC & ' /c secedit /configure /db ' & Chr (34) & @ProgramFilesDir & '\Symantec\Config4T\FolderOnly.sdb' & Chr (34) & ' /cfg ' & Chr (34) & @ProgramFilesDir & '\Symantec\Config4T\FolderOnly.inf' & Chr (34) & ' /quiet')
[/autoit]Andere Möglichkeit: Die Laufzeit im Titel anzeigen:
Opt('WinTitleMatchMode', 2)
$sTitle = 'Solitär'
ShellExecute('sol.exe')
WinWait($sTitle)
$handle = WinGetHandle($sTitle)
$iTimer = TimerInit()
AdlibEnable('_TimeUpdate', 10)
While WinExists($handle)
Sleep(100)
WEnd
Func _TimeUpdate()
WinSetTitle($handle, '', StringRegExpReplace(WinGetTitle($handle), ' \d{2}:\d{2}:\d{2}.\d{3}', '') & ' ' & _NewTicksToTime(TimerDiff($iTimer)))
EndFunc ;==>_TimeUpdate
Func _NewTicksToTime($iTicks)
Local $iHours, $iMins, $iSecs = Int($iTicks / 1000), $iMSecs = $iTicks - $iSecs * 1000
$iHours = Int($iSecs / 3600)
$iSecs = Mod($iSecs, 3600)
$iMins = Int($iSecs / 60)
$iSecs = Mod($iSecs, 60)
Return StringFormat('%02i:%02i:%02i.%03i', $iHours, $iMins, $iSecs, $iMSecs)
EndFunc ;==>_NewTicksToTime
Kannst Du mal oben im Script nach der Zeile 38 folgende Zeile einfügen:
[autoit]ConsoleWrite(@error & @CRLF)
[/autoit]
und posten, was da ausgegeben wird.
So:
[autoit]$kb = ($size / $ms) * 1000 / 1024
[/autoit]
Wenn $size Bytes übertragen werden und dafür die Zeit $ms in Millisekunden benötigt wird, dann muss man die Anzahl der Bytes durch die Anzahl der Millisekunden teilen, um auf Bytes je Millisekunde zu kommen. Danach mit 1000 malnehmen, um auf eine Sekunde zu kommen und dann durch 1024 teilen für KB.
Binärdateien musst Du mit Parameter "16" öffnen. Das gilt auch für das speichern.
Habe Dein Script mal etwas abgeändert:
$File = FileOpenDialog("Wähle die Datei aus", @DesktopDir, "Alle Dateien (*.*)")
$Save = FileSaveDialog("Wo soll die Datei gespeichert werden?", @DesktopDir, "(*." & StringTrimLeft($File, StringInStr($File, ".", 0, -1)) & ")")
If StringInStr($File, "." & StringTrimLeft($File, StringInStr($File, ".", 0, -1))) Then $Save &= "." & StringTrimLeft($File, StringInStr($File, ".", 0, -1))
$Open = FileOpen($File, 16)
$OpenSave = FileOpen($Save, 16 + 2)
$Size = FileGetSize($File)
While True
$Buffer = FileRead($Open, 1024)
If @error Then ExitLoop
FileWrite($OpenSave, $Buffer)
WEnd
FileClose($OpenSave)
FileClose($Open)
Oh mann, Forenregeln lesen!Hier gibt's kein Botsupport!
Edit: Oh, moment, Evolution ist gar kein Game, richtig? Da war ich etwas vorschnell. Sorry!
Edit2: Lass Dir mal mit:
[autoit]_ArrayDisplay($wert)
[/autoit]
nach der "For $q = 1 To $anzahl"...Next-Schleife die Werte im Array anzeigen.
Und _ArrayMinIndex solltest Du in dem Fall mit Parameter "1" aufrufen:
$lowy = _ArrayMinIndex($wert, 1)
[/autoit]
sonst würde nicht numerisch verglichen, sondern alphanumerisch.
Alina, das kommt darauf an, wie das andere Programm die Logdatei schreibt.
Wenn die Datei während des gesamten Ablaufs gelockt ist, dann geht das nicht. Andernfalls kannst Du die Datei auslesen. Wenn Du allerdings vorhast die Datei häppchenweise auszulesen, solltest Du vorher ein Kopie davon anlegen und diese dann auslesen.