Wenn es sich auf ein Netzwerklaufwerk kopieren soll, warum dann auf alle kopieren?
Das lässt sich doch mit dem DriveType eingrenzen:
#include <Array.au3>
$aDrives = DriveGetDrive('Network')
_ArrayDisplay($aDrives)
Wenn es sich auf ein Netzwerklaufwerk kopieren soll, warum dann auf alle kopieren?
Das lässt sich doch mit dem DriveType eingrenzen:
#include <Array.au3>
$aDrives = DriveGetDrive('Network')
_ArrayDisplay($aDrives)
Da der Punkt für jedes beliebige Zeichen steht, kann man das Verhalten folgendermassen in den Griff bekommen:
[autoit]
$alt = "aabbccxxddeeffxXyyyyZzgghhiiXxyyyyzZjjkkllXXyyyyZZmmnnoo"
$neu = StringRegExpReplace($alt, "(?i)xx([^xz]*?)zz", "00${1}11")
[/autoit][autoit][/autoit][autoit]Msgbox(0,"",$neu)
[/autoit]
Und ganz wichtig:
immer nen Sleep in ne endlosschleife sonst treibste die cpu bis an die kernschmelze
Und gerade das ist völlig falsch.
Im MessageLoop-Modus ist ein Sleep nicht nur überflüssig (GUIGetMsg regelt die Prozessorauslastung), sondern kann sogar (wenn der Wert zu groß ist) zu einer Nichtbedienbarkeit der GUI führen.
Nur im OnEventMode muss in der Endlosschleife ein Sleep rein, weil sonst ein Prozessorkern 100% erreicht.
So, jetzt kann man die Buttons auch verschieben (Reihenfolge ändern). Dazu muss man einen Button länger als 250 mSek gedrückt halten. Der Mauszeiger verwandelt sich dann in einen horizontalen Doppelpfeil und man kann den Button auf der Leiste verschieben. Außerdem kann man jetzt die Buttons umbenennen (Kontextmenü).
Neue Version in Post#1.
Mikrosekunden (Ticks) seit der letzen Mausbewegung/Tastendruck.
Edit: Verschoben nach H&U.
Beide Fehler behoben! Danke, Tweaky und Raupi!
Neue Version in Post#1.
Ich habe eine Art Toolbar hinzugefügt (siehe Screenshot). Es ist eigentlich eine Reihe von Buttons (weil die Toolbar-UDF zu viele Probleme macht).
Man kann Exe-Dateien per Drag&Drop in die Leiste reinziehen und es wird automatisch ein Button erstellt. Per Kontextmenü kann man die Buttons auch wieder löschen.
Sortieren und umbenennen geht noch nicht (muss mir erstmal ein Konzept dafür überlegen). Das heißt, wer das will, kann die Einträge in der Inidatei entsprechend anordnen. Die werden von links nach rechts in der Sektion "[DropToolbarPath]" abgelegt. Dabei ist der Teil vor dem "=" der ToolTip-Name und hinter dem "=" steht der volle Pfad zur Exedatei.
Man kann nun auch die im Explorer ausgeblendeten Laufwerke hier im FileCommander ausblenden lassen (Einstellungsmenü). Ausserdem habe ich noch eine Möglichkeit zum Konfigurieren dieser Ausblendfunktion eingebaut. Danke für den Tipp, BuFF!
Und wenn kein externer HexEditor eingetragen ist, wird ein einfacher, kleiner HexViewer (im Tools-Verzeichnis) verwendet. Danke für die Funktion, Kleiner!
Neue Version in Post#1.
Die History findest Du in der Hilfe ganz unten unter "Appendix" und dann "History / Changelog".
Hier geht's ja darum, dass InetGet jetzt anders funktioniert. Es wird ein Handle zurückgegeben, mit dem Du dann mittels InetGetInfo alle wichtigen Informationen zum Download erhälst.
Schau Dir am besten mal das Beispielscript zu InetGet an.
Das Makro stammt noch aus einer alten AutoIt-Version. In der neuen AutoIt-Version wurde es durch InetGetInfo ersetzt, weil man nun auch mehrere Downloads gleichzeitig einleiten kann.
Hier mal der entsprechende Auszug aus der History:
ZitatAlles anzeigen
15th January, 2010 - v3.3.4.0Some of the following features are deprecated. Deprecated features are no longer documented but continue to work. Deprecated features will be removed after version 3.3.4.0. It is strongly recommended that scripts relying on deprecated features be updated to work with the new behavior. Some features have already been removed and will be noted as such.
AutoIt:
[...]
InetGet("abort"), @InetGetActive and @InetGetBytesRead have been removed. The following list shows the new functions used to access the old behavior:
InetGet("abort") - Calling the new InetClose() function with a handle returned from InetGet() will abort a download.
@InetGetActive - Calling the new InetGetInfo() function with no parameters returns a count of active downloads.
@InetGetBytesRead - Calling the new InetGetInfo() function with a handle returned from InetGet()will return the bytes read (and more) for a download.
Die beiden Arrays haben die gleiche Anzahl an Elementen?
Dann so:
Global $array1[3] = ['Text1', 'Text2', 'Text3']
Global $array2[3] = [1, 2, 3]
Global $string = ''
For $i = 0 To UBound($array1) - 1
$string &= $array2[$i] & '=' & $array1[$i] & ' & '
Next
$string = StringTrimRight($string, 3)
MsgBox(0, '$string = ', $string)
[verschoben nach OT]
aber dann habe ich das Problem das er wieder nach oben springt...
Äh, wenn Du das Editfeld leerst, dann ist da logischerweise nichts mehr. Wohin soll er denn sonst springen?
Oder habe ich das jetzt falsch verstanden?
Ahhh! UEZ, Du bist mein Retter. So geht's ohne $WS_EX_COMPOSITED.
Dann hat die Rebar ja doch noch eine Chance. ![]()
Vielen Dank!
Du musst hier
[autoit]GuiCtrlSetData($Edit1, "" , 1)
[/autoit]
das ", 1" weglassen, also ohne dritten Parameter.
Ich muss Dir zustimmen, Raupi. Es funktioniert zwar in dem obigen Beispiel, aber nicht im FileCommander. Da flackern die Listviews wie blöd und das einlesen dauert ewig.
$WS_EX_COMPOSITED ist also keine Lösung (habe das Thema wieder auf "offen" gesetzt).
Wow! Klasse Lösung! Muss ich mal ins Archiv aufnehmen. ![]()
Die Adminrechte braucht man nicht überall. HKCU lässt sich auch ohne beschreiben.
Aber für HKLM hast Du recht. ![]()
Edit: Ich muss mich da selbst korrigieren. Man braucht auch für HKCU AdminRechte. Sprenger120, Deine Antwort ist also voll und ganz korrekt. Entschuldige bitte!
Das Problem hat sich erledigt!
Ich konnte es nach langem rumprobieren endlich lösen: $WS_EX_COMPOSITED als ExStyle für das Fenster.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GuiReBar.au3>
#include <GuiToolBar.au3>
#include <GuiComboBox.au3>
#include <GuiDateTimePicker.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiConstantsEx.au3>
$Debug_RB = False
Global $hReBar
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
_main()
Func _main()
Local $hgui, $btnExit, $hToolbar, $hCombo, $hDTP, $hInput, $wpos
Local Enum $idNew = 1000, $idOpen, $idSave, $idHelp
$hgui = GUICreate("Rebar", 400, 396, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZEBOX), $WS_EX_COMPOSITED)
; create the rebar control
$hReBar = _GUICtrlRebar_Create($hgui, BitOR($CCS_TOP, $WS_BORDER, $RBS_VARHEIGHT, $RBS_AUTOSIZE, $RBS_BANDBORDERS))
; create a toolbar to put in the rebar
$hToolbar = _GUICtrlToolbar_Create($hgui, BitOR($TBSTYLE_FLAT, $CCS_NORESIZE, $CCS_NOPARENTALIGN))
; Add standard system bitmaps
Switch _GUICtrlToolbar_GetBitmapFlags($hToolbar)
Case 0
_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_SMALL_COLOR)
Case 2
_GUICtrlToolbar_AddBitmap($hToolbar, 1, -1, $IDB_STD_LARGE_COLOR)
EndSwitch
; Add buttons
_GUICtrlToolbar_AddButton($hToolbar, $idNew, $STD_FILENEW)
_GUICtrlToolbar_AddButton($hToolbar, $idOpen, $STD_FILEOPEN)
_GUICtrlToolbar_AddButton($hToolbar, $idSave, $STD_FILESAVE)
_GUICtrlToolbar_AddButtonSep($hToolbar)
_GUICtrlToolbar_AddButton($hToolbar, $idHelp, $STD_HELP)
; create a combobox to put in the rebar
$hCombo = _GUICtrlComboBox_Create($hgui, "", 0, 0, 120)
_GUICtrlComboBox_BeginUpdate($hCombo)
_GUICtrlComboBox_AddDir($hCombo, @WindowsDir & "\*.exe")
_GUICtrlComboBox_EndUpdate($hCombo)
; create a date time picker to put in the rebar
$hDTP = _GUICtrlDTP_Create($hgui, 0, 0, 190)
; add band with control
_GUICtrlRebar_AddBand($hReBar, $hCombo, 120, 200, "Dir *.exe")
; add band with date time picker
_GUICtrlRebar_AddBand($hReBar, $hDTP, 120)
; add band with toolbar to begining of rebar
_GUICtrlRebar_AddToolBarBand($hReBar, $hToolbar, "", 0)
;add another control
_GUICtrlRebar_AddBand($hReBar, GUICtrlGetHandle($hInput), 120, 200, "Name:")
$btnExit = GUICtrlCreateButton("Exit", 150, 360, 100, 25)
GUISetState(@SW_SHOW)
Sleep(1000)
$wpos = WinGetPos($hgui)
WinMove($hgui, '', Default, Default, 500)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $btnExit
Exit
EndSwitch
WEnd
EndFunc ;==>_main
Func WM_SIZE($hWnd)
Local $wpos
$wpos = WinGetPos($hWnd)
ControlMove($hWnd, "", $hReBar, 0, 0, $wpos[2])
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_SIZE
Func WM_NOTIFY()
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"-->Line(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
Ich bin keineswegs beleidigt.
Es ist nur so, dass Du wichtige Informationen nicht nennst. Wenn ich jetzt lese, dass Du den Titel noch nicht weisst, dann lässt das darauf schliessen, dass es sich um eine eigene GUI handelt.
In dem Fall hast Du noch ganz andere Möglichkeiten (z.B. GUIGetCursorInfo):
#include <GUIConstantsEx.au3>
$hGui = GUICreate('Test')
GUISetState()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYUP
$aInfo = GUIGetCursorInfo($hGui)
If $aInfo[0] > 10 And $aInfo[0] < 50 And $aInfo[1] > 10 And $aInfo[1] < 50 Then MsgBox(0, 'Klick', 'getroffen')
EndSwitch
WEnd
Du schreibst den Zähler einfach mit in die Inidatei:
$sIniFile = @ScriptDir & '\config.ini'
Do
$sFile = FileOpenDialog('Test', '', 'All (*.*)')
If Not @error Then
$iCount = IniRead($sIniFile, 'Files', 'Count', -1)
$iCount += 1
IniWrite($sIniFile, 'Files', 'Count', $iCount)
IniWrite($sIniFile, 'Files', $iCount, $sFile)
EndIf
Until @error