Hi BugFix,
du hast wohl Recht. Ich hatte nicht die gesamte Ordnerstruktur (Ordner+Unterordner) vom Zielordner im Zielverzeichnis angelegt. So eine automatisches Anlegen von Ordnern, wie du es vorhast, wäre natürlich schick
Hi BugFix,
du hast wohl Recht. Ich hatte nicht die gesamte Ordnerstruktur (Ordner+Unterordner) vom Zielordner im Zielverzeichnis angelegt. So eine automatisches Anlegen von Ordnern, wie du es vorhast, wäre natürlich schick
Hi,
eine gute Idee:-)
Ich habe es bei mir getestet, leider ohne Erfolg "Installation Fehlerhaft". Ich habe bestimmt einen Fehler beim Aufruf der Funktion:
_WriteInstall("G:\Apps\TUGZip", "C:\TEMP\Test", "C:\TEMP\setup.au3",-1,-1)
Die Quelle ist vorhanden, den Zielordner habe ich vorher manuell angelegt. Das Setup-Script erzeugt im Zielordner, wie gewünscht, eine Datei Install.log mit folgendem Inhalt:
2007-03-25 12:55:30 : \Apps\TUGZip\Forum.url = Fehler
2007-03-25 12:55:30 : \Apps\TUGZip\Help.chm = Fehler
usw.
Viele Grüße,
Milko
Und das gefällt mir eben an diesem Forum:
informativ, nicht überheblich, kompetent UND harmoniebedürftig.
AspirinJunkie
Dein Beispielskript fand ich als Anfänger verdeutlichend, Danke.
Mein Versäumnis bei der Fehlerbeschreibung, sorry!
Ich konnte gerade den Fehler nicht mal bei mir reproduzieren :hammer:
So hier nochmal ein bei mir reproduzierbares Fehlverhalten des Autoit (Version 3.2.2.0):
$ret=Filecopy("c:\Temp\test.txt",c:\temp\test.txt",1)
msgbox(0,"Ergebnis",$ret)
Die Quelle und das Ziel sind gleich, bis auf die Groß-/Kleinschreibung der Buchstabe "T", das gleiche passiert natürlich auch mit der Buchstabe "C" usw.
Nach der Ausführung ist die Datei "test.txt" gelöscht und $ret ist "0"
2. Versuch: man gibt den Ordner c:\Temp frei und mountet ihn z.B. unter der Laufwerkbuchstabe Z
$ret=Filecopy("c:\temp\test.txt",z:\test.txt",1)
msgbox(0,"Ergebnis",$ret)
Das gleiche Fehlverhalten. Windows meldet in so einem Fall Folgendes:
"test kann nicht kopiert werden: Die Datei wird von einer anderen Person bzw. einem anderen Programm verwendet."
Danke für die Mühe.
Kein Problem.
Gehen wir davon aus, dass im Verzeichnis c:\temp eine Datei mit dem Namen "test.txt" existiert. Wenn ich mit autoit den Befehl:
Filecopy("c:\temp\test.txt","c:\temp\test.txt",1)
absetze, dann habe ich den Fall, dass die Datei gelöscht und ein Fehler zurückgemeldet wird.
Hi,
Filecopy(Quelle,Ziel,flag)
wenn bei der Funktion Filecopy die Quelle und das Ziel gleich sind und der Flag 1 beträgt (überschreiben erlaubt), dann wird die Datei endgültig gelöscht und ein Fehler zurückgemeldet. Windows Explorer verweigert in diesem Fall die Ausführung (Meldung: der Quell-. und Zieldateiname sind identisch). Handelt es sich hierbei um einen Bug?
Gruß, Milko
PS.: Das obige Beispiel ist eine vereinfachte Darstellung eines komlpizierten Falles in einer Netzwerkumgebung.
Genau das meinte ich, Danke :kiss:
Edit: Ähmm, ich habe gerade festgestellt, dass deine Version im Gegensatz zur Version von "jos van der Zande" nicht nur Filenamen, sondern auch Ordnernamen berücksichtigt, das kann natürlich manchmal sogar gewünscht sein...
(d.h. auch, dass du eine Abfrage weniger in deiner Funktion hast )
Klasse!
Wenn du irgendwann Zeit hast, könntest du auch eine Filemask-Auswertung einbauen?
Immer diese Sonderwünsche
Hi,
ich habe ein paar Fehler entdeckt und korrigiert (siehe "; Edit Milko"). Ein paar Stellen habe ich auch ergänzt, sonst hätte das Script bei mir nicht funktioniert.
Das Problem, dass das 2. Select/Case nicht funktioniert hat, lag an der Zeile 32 in deinem gesposteten Script.
Ich habe auch das Schreiben der Batch-Datei auskommentiert (geschmacksache). Außerdem würde ich an deiner Stelle die Files (captdll.dll und topng.exe) mit FileInstall ins Temp-Verzeichnis kopieren, dann brauche ich auch die Ausgangsfiles nicht so hin und her zuschieben.
Viele Grüße, Milko
DesktopScreenShot2(".png")
Func DesktopScreenShot2($Format) ; Edit Milko
; Local $Cwin1 = WinGetHandle(""); Übernimmt aktuelles Fenster
; Local $Cwin2 = WinGetPos($Cwin1); Übernimmt aktuelle Fenstergrösse
$SaveAs = $format ; Edit Milko
$dll1=@ScriptDir & "\data\captdll.dll" ;Edit Milko
Select
Case $SaveAs = ".jpg"
Global $SaveAs = ".jpg"
$quality=100 ; Edit Milko
Case $SaveAs = ".png"
$SaveAs = ".bmp"
$quality = -1
Case $SaveAs = ".bmp"
$SaveAs = ".bmp"
$quality = -1
EndSelect
Msgbox(0,"","got 313")
Global $CaptureDirectory = @TempDir & "\"; Verzeichnis für die Screenshots
$CaptureFile = "ss" & @HOUR & @MIN & @SEC & $SaveAs
DllCall($dll1, "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", "0", "int", "0", "int", @DesktopWidth, "int", @DesktopHeight, "int", $quality)
; $CaptureDirectory & $CaptureFile = zu speichernder Pfad und Name des Screenshots
; "0" = Links
; "0" = Oben
; @DesktopWidth = Breite
; @DesktopHeight = Höhe
; $Quality = BMP (-1) od. JPG (1-100)
Msgbox(0,"","got 323")
If @error Then
MsgBox(262160,"Error", $03)
Msgbox(0,"","got 326")
Else
; $SaveAs = $format ; Edit Milko
Msgbox(0,"","got 329")
Select
Case $Format = ".jpg"
Msgbox(0,"","got 330")
Global $CaptureFile
_Upload()
Case $Format = ".png"
FileMove($CaptureDirectory & $CaptureFile, @ScriptDir&"\data\"&$CaptureFile)
sleep(500)
If FileExists(@ScriptDir& "\data\"&$CaptureFile) Then ; Edit Milko
$filename = StringTrimRight($CaptureFile, 3)
;~ $BatFile = "@echo off" & @CRLF ; Edit Milko
;~ $BatFile = $BatFile & "topng " & $CaptureFile & " png" & @CRLF
;~ $bat = FileWrite("data\pngcreate.bat", $BatFile)
;~ FileClose($bat)
;~ RunWait(@ScriptDir&"\data\pngcreate.bat", @ScriptDir&"\data", @SW_HIDE)
;~ FileDelete(@ScriptDir & "\data\pngcreate.bat")
runwait (@ComSpec & " /c " & @ScriptDir & "\data\topng.exe " & $CaptureFile & " png" & " pause",@ScriptDir & "\data\",@SW_HIDE) ; Edit Milko
FileMove(@ScriptDir & "\data\"&$filename&"png", @TempDir&"\"&$filename&"png")
FileDelete(@ScriptDir & "\data\"&$CaptureFile) ; Edit Milko (Zeile verschoben)
msgbox(0,"PNg-File erstellt?","")
Global $CaptureFile = $filename&"png"
_Upload()
Else
MsgBox(1,"Error", $04)
EndIf
Case $Format = ".bmp"
Global $CaptureFile
_Upload()
EndSelect
EndIf
EndFunc ;==> DesktopScreenShot2()
Vielen Dank für den Link. Sehr gute Einführung, ich habe mir zusätzlich das Programm Regex Coach heruntergeladen, interessantes Tool, besonders für Anfänger.
Gruß, Milko
Hi,
das Script von BugFix ist zwar sehr schön für die Einarbeitung, hat aber leider auch 2 andere graviende Fehler:
1. Wenn ich eine Zeile zum Editieren geöffnet habe und mir danach eine 2. Zeile zum Editieren öffne, dann stimmen die Anzahl der Einträge nicht mehr (die Zellen von 1 bis 14 werden doppelt aufgelistet).
2. Wenn ich beim Editieren einer Zeile eine Zelle (z.B. Zeile 5/ Spalte 1) gelöscht habe, dann werden bei allen nachfolgenden Zeilen, die zum Editieren geöffnet werden, die Zelle (Zeile x /Spalte 1) nach dem Schließen des Editfensters autmoatisch gelöscht.
Edit: ich habe 3 kleine Änderungen vorgenommen, ich hoffe, es ist so in Ordnung (siehe "; Edit Milko").
#include <GUIConstants.au3>
#include <GuiListView.au3>
#Include <GuiList.au3>
Dim $arItem[8], $arChange
$Form1 = GUICreate("AForm1", 633, 265, -1, -1)
$ListView1 = GUICtrlCreateListView("1|2|3|4|5|6|7|8|9|10|11|12|13|14", 16, 16, 601, 225)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
For $i = 0 To 7
$arItem[$i] = GUICtrlCreateListViewItem("",$ListView1)
For $k = 0 To 13
_GUICtrlListViewSetItemText($ListView1, $i, $k, "Zeile"&$i+1 & "/Spalte"&$k+1)
_GUICtrlListViewSetColumnWidth($ListView1, $k, 86)
Next
Next
$lvContext = GUICtrlCreateContextMenu($ListView1)
$conEdit = GUICtrlCreateMenuitem("Edit", $lvContext)
$conDelAll = GUICtrlCreateMenuItem("Lösche kpl. Eintrag", $lvContext)
; GUI für Edit
$Form2 = GUICreate("AForm2", 328, 432, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
$List1 = GUICtrlCreateList("", 20, 20, 285, 370, BitOR($WS_HSCROLL,$WS_BORDER))
$btnOK = GUICtrlCreateButton("OK", 196, 400, 109, 21, 0)
$lContext = GUICtrlCreateContextMenu($List1)
$conEdit_l = GUICtrlCreateMenuitem("Editieren", $lContext)
$conDel_l = GUICtrlCreateMenuitem("Löschen", $lContext)
GUISetState(@SW_SHOW, $Form1)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $conDelAll
_GUICtrlListViewDeleteItem($ListView1, _GUICtrlListViewGetSelectedIndices($ListView1))
Case $conEdit
_GUICtrlListClear($List1) ; Edit Milko
$lvIndex = _GUICtrlListViewGetSelectedIndices($ListView1)
$arChange = _GUICtrlListViewGetItemTextArray($ListView1, $lvIndex)
if IsArray($arChange) Then ; Edit Milko
For $i = 1 To $arChange[0]
_GUICtrlListAddItem($List1, $arChange[$i])
Next
GUISetState(@SW_SHOW, $Form2)
endif
Case $btnOK
For $i = 0 To _GUICtrlListCount($List1) -1
_GUICtrlListViewSetItemText($ListView1, $lvIndex, $i, _GUICtrlListGetText($List1, $i))
Next
GUISetState(@SW_HIDE, $Form2)
Case $conEdit_l
$lIndex = _GUICtrlListGetCaretIndex($List1)
$var = InputBox("Eintrag ändern", "", _GUICtrlListGetText($List1, $lIndex))
if not @error then _GUICtrlListReplaceString($List1, $lIndex, $var) ; Edit Milko
Case $conDel_l ; nicht wirklich löschen, sonst wär eine Spalte zu wenig
$lIndex = _GUICtrlListGetCaretIndex($List1)
_GUICtrlListReplaceString($List1, $lIndex, "")
EndSwitch
WEnd
Viele Grüße, Milko
Hi Mega,
dein vorriges Script hat bei nicht funktioniert, wenn net view nur einen Rechner (mein Notebook selbst) auflistete. Dein 2. Script funktiniert prima. Endlich habe ich auch das mit der Funktion StdoutRead() verstanden. Ich habe mir immer die Ausgaben von externe Programmen mit ">>" in eine Datei umleiten lassen, um deren Inhalt später mit FileOpen() und FileRead() auswerten zu können.
Vielen Dank, Milko
Hi,
interessante Diskussion. Ich habe leider abgestimmt (gegen die Werbung), bevor ich eure Beiträge gelesen habe.
Aber im Nachhineien, nachdem ich gelesen habe, was so 10/20 Skunden meiner Zeit pro Tag einbringt, habe ich wirklich nichts dagegen, die eine Varianten (zwischen den Posts) zu behalten. Ich sehe das jetzt als gezielte Ausnutzung von Möglichkeiten, den Betreibern des Forums, ein paar Cents zukommen zu lassen. Wenn das System es hergibt, warum nicht...
[] Ich bevorzuge die Variante mit der Box
[X] Ich bevorzuge die Zwischen-Posts
[] Ich hasse Werbung, weg damit!
[] kann beides bleiben!
Viele Grüße, Milko
Ps. Gleich fange ich damit an
PS2: Firefox: Rechtsklick auf die Werbung-> "Link in einem neuen Tab öffnen" und gut ist. Ich brauche mir die Werbung nicht mal anzusehen :party3:
Hi Thomas,
es wäre schön, wenn du auch Ordner und Unterordner mitlöschen könntest :tier:
Gruß, Milko
Hi Tom,
es geht auch einfacher:
1. Deine Einstellungen über dem Menüpunkt "Exportieren..." in eine Datei z.B. desktop.dsv exportieren.
2. Danach brauchst die systray überhaupt nicht mehr, deine Einstellungen kannst du dann mit der Befehlszeile "desksave.exe desktop.dsv" wieder herstellen lassen, ohne extra Script zur Steuerung der Systray.
Gruß, Milko
PS. Die Version 7.1.1 hat einen Fehler, wenn du die obige Befehlszeile ausführst (der Programmierer ist schon informiert). Du kannst die Version 7.1 benutzen, die ich hier hochlade.
Hi,
du könntest die Ausgabe des Programmes in eine Datei umleiten (z.B. psloggedon.exe -x -l >output.tmp) und sie dann mit Autoit in Ruhe auswerten;-)
Gruß,
Milko
Hi,
das obige Problem habe ich auch bislang und habe deshalb statt dessen immer die Funktion Tooltip verwendet (ist aber umständlich).
Ich habe ein kleines Script, wo man das Problem nachvollziehen kann, ein Klick auf das Icon und der Tipp taucht nicht mehr auf. Was mach ich da falsch?
#include <GUIConstants.au3>
GUICreate("Test-GUI",250,100)
GUISetBkColor (0x00E0FFFF)
$button = GUICtrlCreateButton ("OK",90,70,70,20)
$tipp=GUICtrlCreateIcon("shell32.dll", 24, 115, 30,16,16)
GUICtrlSetTip($tipp,"Hier steht der Tipp")
GUISetState()
While 1
$msg = GUIGetMsg ()
Select
Case $msg = $GUI_EVENT_CLOSE
exit
Case $msg = $button
exit
EndSelect
Wend
Hi,
das Thema hatten wir schon vor ca. 3 Wochen. Die beste Lösung, die ich dann realisiert habe, war das mit dem Tool Desksave (https://autoit.de/www.desksave.de). Das Tool ist Freeware und kann auch von der Kommandozeile aus aufgerufen werden.
Viel Glück,
Milko
Hi,
was wäre das AutoIt-Forum ohne euch und eure Arbeit!
Danke :kiss:
Gruß, Milko