Dann halt noch um die Bedingung erweitern:
[autoit]If BitXOR(WinExists('Rechner'), WinExists('Unbenannt')) Or Not BitAND(WinExists('Rechner'), WinExists('Unbenannt')) Then MsgBox(0, 0, 'Jo!')
[/autoit]Dann halt noch um die Bedingung erweitern:
[autoit]If BitXOR(WinExists('Rechner'), WinExists('Unbenannt')) Or Not BitAND(WinExists('Rechner'), WinExists('Unbenannt')) Then MsgBox(0, 0, 'Jo!')
[/autoit]Wenn das Script nur etwas machen soll, wenn eines der beiden Fenster offen ist, dann am besten BitXOR benutzen:
[autoit]If BitXOR(WinExists('Rechner'), WinExists('Unbenannt')) Then MsgBox(0, 0, 'Jo!')
[/autoit]TimerInit benutzen und ein Label:
$GUI_EVENT_CLOSE = -3
$Breite = 180
$Hoehe = 3
GUICreate("Download", 200, 30)
GUISetBkColor(0x393939)
$hProgr = GUICtrlCreateLabel('', 10, 10, 1, $Hoehe)
GUICtrlSetBkColor(-1, 0x99FF00)
GUISetState()
$Timer = TimerInit()
For $NextLoop = 1 To $Breite
GUICtrlSetPos($hProgr, 10, 10, $NextLoop, $Hoehe)
Do
Until TimerDiff($Timer) > 4
$Timer = TimerInit()
Next
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Bei Leerzeichen im Pfadnamen am besten "FileGetShortName" benutzen, dann funktioniert das:
[autoit]
$sPath = "C:\Dokumente und Einstellungen\Admin\Eigene Dateien\au3_prog\mother-child-test\child01.exe"
$sPath = FileGetShortName($sPath)
Run($sPath)
Mal eine rumgetrickste "Lösung":
#include <GuiTreeView.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $exit, $ItemA, $ItemB, $Item1, $Item2, $Item3, $Item4, $DragItem, $tree, $hGui, $hListView
Example()
Func Example()
$hGui = Guicreate("Test", 400, 250, -1, -1, Default, $WS_EX_ACCEPTFILES)
$tree = guictrlcreatetreeview(300, 10, 100, 100)
;~ GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$ItemA = Guictrlcreatetreeviewitem("ItemA", $tree)
$ItemB = Guictrlcreatetreeviewitem("ItemB", $tree)
$Item1 = Guictrlcreatetreeviewitem("Item1", $ItemA)
$Item2 = Guictrlcreatetreeviewitem("Item2", $ItemA)
$Item3 = Guictrlcreatetreeviewitem("Item3", $ItemB)
$Item4 = Guictrlcreatetreeviewitem("Item4", $ItemB)
$hListView = Guictrlcreatelistview("Test", 10, 10, 200, 200)
;~ GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState()
GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "MDown")
GUISetOnEvent($GUI_EVENT_PRIMARYUP, "MUp")
while(1)
Sleep(1000)
WEnd
EndFunc ;==>_Main
Func MUp()
Local $aInfo = GUIGetCursorInfo($hGui)
If $aInfo[4] = $hListView And $DragItem <> -1 Then
GUICtrlCreateListViewItem(_GUICtrlTreeView_GetText($tree, $DragItem), $hListView)
EndIf
$DragItem = -1
EndFunc
Func MDown()
Local $aInfo = GUIGetCursorInfo($hGui)
If $aInfo[4] = $tree Then
$DragItem = _GUICtrlTreeView_GetSelection($tree)
Else
$DragItem = -1
EndIf
EndFunc
Func OnExit()
If @GUI_CtrlId = $Exit Then
;MsgBox(0, "You clicked on", "Exit")
Else
;MsgBox(0, "You clicked on", "Close")
EndIf
Exit
EndFunc ;==>OnExit
Edit: War noch ein kleiner Fehler drin. Behoben!
So herum (Treeview -> Listview) wird wohl nur mit Tricks gehen, denn:
ZitatOnly dragging a ListviewItem will start the drag & drop process.
010001000110000101101110011010110110010100100000011001101111110001110010001000000110010001101001011001010010000001000010011011000111010101101101011001010110111000100000001110100010110100101001
Hier die erweiterte Version:
ConsoleWrite(_BinToString('01010100011001010111001101110100') & @CRLF)
ConsoleWrite(_StringToBin('Test') & @CRLF)
Func _BinToString($bin)
Local $aChr = StringRegExp($bin, '.{8}', 3), $dec, $string = ''
For $k = 0 To UBound($aChr) - 1
$dec = 0
For $i = 8 To 1 Step -1
$dec += 2 ^ (8 - $i) * StringMid($aChr[$k], $i, 1)
Next
$string &= Chr($dec)
Next
Return $string
EndFunc ;==>_BinToString
Func _StringToBin($string)
Local $aChr = StringSplit($string, ''), $bin = ''
For $k = 1 To $aChr[0]
For $i = 7 To 0 Step -1
$bin &= (BitAND(Asc($aChr[$k]), 2 ^ $i) = 2 ^ $i) * 1
Next
Next
Return $bin
EndFunc ;==>_StringToBin
@PokerFace: Hast recht. Gehört nach "Hilfe & Unterstützung". [moved]
Das ist Binärcode! Ein Zeichen im ASCII-Zeichensatz kann einen Wert von 0-255 annehmen, das entspricht 8 Stellen pro Zeichen im Binärcode (2^8=256).
Wenn man den String nun in jeweils 8stellige Strings aufteilt und jeden für sich ins Dezimalsystem umwandelt, danach das Zeichen mit diesem Wert aus der ASCII-Tabelle einsetzt, erhält man ein oder mehrere Worte.
Script zum umwandeln:
#include <Array.au3>
$string = '010001110110111101101111011001110110110001100101001000000110100001101001011011000110011001110100001000000101111001011110'
$array = StringRegExp($string, '.{8}', 3)
$out = ''
For $i = 0 To UBound($array) - 1
$out &= Chr(_BinToDec($array[$i]))
Next
MsgBox(0,0,$out)
Func _BinToDec($bin)
Local $dec = 0
For $i = 8 To 1 Step -1
$dec += 2^(8-$i) * StringMid($bin, $i, 1)
Next
Return $dec
EndFunc
Das wird nicht funktionieren, ohne vorher die Datei herunterzuladen. Bei FTP gibt es nur "put" und "get", aber kein "append" oder "edit" oder so. ![]()
Die Farbe kannst Du nur beim klassischen Style von Windows ändern:
[autoit]
#include <GUIConstantsEx.au3>
#region - GUI Create
GUICreate('', 400, 400, -1, -1)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 0) ; auf den klassischen Style umschalten
GUICtrlCreateGroup("text", 20, 200)
GUICtrlSetFont(-1, 16, 400, 0)
Guictrlsetcolor(-1, 0xFF0000)
GUICtrlCreateGroup("", -99, -99, 1, 1)
DllCall('uxtheme.dll', 'none', 'SetThemeAppProperties', 'int', 7) ; zurück zum Standard-Windowsstyle
GUISetState()
#endregion
#region - GUI SelectLoop
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
#endregion
RunIt ist ein Programm, was ein Fenster zur Verfügung stellt, auf das man Programme (Exe-Dateien) ziehen kann (Drag & Drop) und die dann dort mit dem Programm-Icon und -Namen erscheinen.
Ein Doppelklick auf das Icon startet das Programm. Ein Launcher halt...
Man kann das Icon beliebig auf dem Fenster verschieben. Fenstergröße und -Position können verändert werden (wird abgespeichert).
Außerdem gibt es ein Tray-Icon. Wenn man dort doppelt drauf klickt, wird das Fenster minimiert. Bei einem einfachen Klick erscheint das Fenster wieder.
Version: 1.0
Du könntest damit anfangen unsere Forenregeln zu lesen!
Diese besagen nämlich, dass wir hier keine (Game-)Bots unterstützen.
Und wenn Du ansonsten eine Frage hast, dann mach bitte einen eigenen Thread auf und schreibe die Frage dort rein.
Und wo ist das Problem?
$aRecords[0] gibt doch die Anzahl der Zeilen zurück.
#include <file.au3>
Dim $aRecords
If Not _FileReadToArray("error.log",$aRecords) Then
MsgBox(4096,"Error", " Error reading log to Array error:" & @error)
Exit
EndIf
For $x = $aRecords[0]-50 to $aRecords[0]
Msgbox(0,'Record:' & $x, $aRecords[$x])
Next
Oder schau Dir mal dieses Beispiel an: TreeView-(Un)Checked-Example
Das darf keine Funktion in dem Install-Script sein, sondern ein zweites, kompiliertes Script, was Du dann mit ShellExecute aufrufst (vor dem Unzip-Befehl).
In diesem zweiten Script wartest Du dann einfach auf das öffnen des Fensters (WinWait) und schließt es (WinClose) danach Exit.
Es "crasht" wenn das Array nicht mehr ausreicht, also bei mehr als 10.000 Verzeichnissen.
Einfach das Array entsprechend größer dimensionieren.
Edit: Ich hab das Script noch etwas angepasst (sieht IMHO besser aus):
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
$gui = GUICreate("Treeview", 640, 480)
Global $id = 0, $dir[100000], $path = "c:\"
$tree = GUICtrlCreateTreeView(5, 5, 630, 450)
GUICtrlSetFont(-1, 9, 400, 0, 'Courier New')
$dir[$id] = GUICtrlCreateTreeViewItem($path, $tree)
$status = GUICtrlCreateLabel('', 0, 460, 640, 20)
GUISetState(@SW_SHOW)
AdlibEnable('PleaseWait', 100)
searchdir($path, $id)
GUICtrlSetData($status, ' Sortiere...')
AdlibDisable()
ReDim $dir[$id + 1]
GUICtrlSetState($dir[0], $GUI_EXPAND)
__GUICtrlTreeView_Sort($tree)
GUICtrlSetData($status, ' Fertig. (' & $id & ' Verzeichnisse)')
While 1
$g = GUIGetMsg()
If $g = -3 Then Exit
WEnd
Func PleaseWait()
GUICtrlSetData($status, ' Please wait...' & $id)
EndFunc
Func searchdir($d, $i)
Local $f, $n, $s
$f = FileFindFirstFile($d & "*")
While 1
$n = FileFindNextFile($f)
If @error Then ExitLoop
$s = DirGetSize($d & $n)
If $s > -1 Then
$id += 1
$sSize = StringFormat("%.3f", $s / 1024 / 1024, 3) & " MB"
$dir[$id] = GUICtrlCreateTreeViewItem(StringFormat("[%16s]", $sSize) & " - " & $n, $dir[$i])
searchdir($d & $n & "\", $id)
EndIf
WEnd
EndFunc ;==>searchdir
; aus dem engl. Forum
Func __GUICtrlTreeView_Sort($hWnd)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $hItem, $i_Recursive = 1
$hItem = _GUICtrlTreeView_GetFirstItem($hWnd)
While $hItem <> 0
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd, 'uint', $TVM_SORTCHILDREN, 'wparam', $i_Recursive, 'lparam', $hItem)
$hItem = _GUICtrlTreeView_GetNext($hWnd, $hItem)
WEnd
EndFunc ;==>__GUICtrlTreeView_Sort
Achso, das Fenster kommt vom AntiVirus und Du willst das per Script schließen?
Dazu musst Du vor dem Unzippen ein zweites Script starten, was nur auf dieses Fenster wartet,es dann schließt und sich anschließend selbst beendet.
Also Dein bisheriges Script startet vor dem _Unzip-Befehl ein zweites Script. So sollte das eigentlich klappen.
Das Problem mit der "1. Ebene" scheint ein Bug zu sein. Im engl. Forum habe ich eine Funktion gefunden, bei der das behoben wurde.
Dann geht es auch so:
#include <TreeViewConstants.au3>
#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
$gui = GUICreate("Treeview")
Global $id = 0, $dir[9999], $path = "c:\Programme\AutoIt3\"
$tree = GUICtrlCreateTreeView(0, 0, 481, 353)
$dir[$id] = GUICtrlCreateTreeViewItem($path, $tree)
GUISetState(@SW_SHOW)
searchdir($path, $id)
ReDim $dir[$id + 1]
GUICtrlSetState($dir[0], $GUI_EXPAND)
__GUICtrlTreeView_Sort($tree)
MsgBox(0, 0, 'Bin fertig')
While 1
$g = GUIGetMsg()
If $g = -3 Then Exit
WEnd
Func searchdir($d, $i)
Local $f, $n, $s
$f = FileFindFirstFile($d & "*")
While 1
$n = FileFindNextFile($f)
If @error Then ExitLoop
$s = DirGetSize($d & $n)
If $s > -1 Then
$id += 1
$sSize = StringFormat("%.3f", $s / 1024 / 1024, 3)
$dir[$id] = GUICtrlCreateTreeViewItem(StringFormat("[%13s]", $sSize) & " MB - " & $n, $dir[$i])
searchdir($d & $n & "\", $id)
EndIf
WEnd
EndFunc ;==>searchdir
; aus dem engl. Forum
Func __GUICtrlTreeView_Sort($hWnd)
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $hItem, $i_Recursive = 1
$hItem = _GUICtrlTreeView_GetFirstItem($hWnd)
While $hItem <> 0
DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd, 'uint', $TVM_SORTCHILDREN, 'wparam', $i_Recursive, 'lparam', $hItem)
$hItem = _GUICtrlTreeView_GetNext($hWnd, $hItem)
WEnd
EndFunc ;==>__GUICtrlTreeView_Sort
Das GUICtrlCreatePic nur einmal (am Anfang) erstellen und dann mit GUICtrlSetImage die Bilder austauschen.