dies aber ohne Globale Variable.
Meines Erachtens nicht möglich. Aber warum willst du unbedingt eine Globale Variable vermeiden.
dies aber ohne Globale Variable.
Meines Erachtens nicht möglich. Aber warum willst du unbedingt eine Globale Variable vermeiden.
Was ist denn Gobby, wenn ich mal fragen darf?
Sowas wie ein Workspace?
Guckst du: Gobby
Ich weiß nicht, welche Version du von TrueImage hast. Schau mal ob unter \Programme\Acronis die Datei "TrueImageCmd.exe" vorhanden ist. Falls ja - damit kannst du per Kommandozeilenaufruf Images erstellen. Das läßt sich gut automatisieren.
Acronis ist nicht für Send/Controlsend geeignet. Würde ich bei einem Imageprogramm eh tunlichst vermeiden.
Zumindest bei den Versionen, die mir vorliegen, werden keine Windows-Ctrl verwendet.
Immer wieder dasselbe.
Schau mal hier: Forenregeln
[Thread Closed]
Aber wie bekomme ich es hin, dass er dann wirklich am Speicherort eine TXT datei erstellt und den Inhalt des Edit-Fensters hineinschreibt?
Der FileSaveDialog gibt dir Pfad\Dateinamen zurück unter dem die Datei gespeichert werden soll.
Also:
; Pfad festlegen
$path = FileSaveDialog(...)
; Inhalt lesen und speichern
$inhalt = GUICtrlRead($edit)
$fh = FileOpen($path, 1) ; zum Schreiben öffnen
FileWrite($fh, $inhalt)
FileClose($fh)
Hi,
hier mal ein Skriptbsp., wie man ein eigenes Consolenfenster erstellt und in die Console schreibt bzw. aus ihr liest.
#cs
Funktioniert nur, wenn es kompiliert wird!
#ce
Local Const $FOREGROUND_BLUE = 0x1
Local Const $FOREGROUND_GREEN = 0x2
Local Const $FOREGROUND_RED = 0x4
Local Const $BACKGROUND_BLUE = 0x10
Local Const $BACKGROUND_GREEN = 0x20
Local Const $BACKGROUND_RED = 0x40
Local Const $BACKGROUND_INTENSITY = 0x80
Local Const $BACKGROUND_SEARCH = 0x20
Local Const $FOREGROUND_INTENSITY = 0x8
Local Const $FOREGROUND_SEARCH = 0x10
Local Const $ENABLE_LINE_INPUT = 0x2
Local Const $ENABLE_ECHO_INPUT = 0x4
Local Const $ENABLE_MOUSE_INPUT = 0x10
Local Const $ENABLE_PROCESSED_INPUT = 0x1
Local Const $ENABLE_WINDOW_INPUT = 0x8
Local Const $ENABLE_PROCESSED_OUTPUT = 0x1
Local Const $ENABLE_WRAP_AT_EOL_OUTPUT = 0x2
Local Const $STD_OUTPUT_HANDLE = -11
Local Const $STD_INPUT_HANDLE = -10
Local Const $STD_ERROR_HANDLE = -12
Local Const $INVALID_HANDLE_VALUE = -1
Global $hConsoleOutput, $hConsoleInput
[/autoit] [autoit][/autoit] [autoit]; Console starten und Handle für In / Out holen
If AllocConsole() Then
$hConsoleOutPut = GetStdHandle($STD_OUTPUT_HANDLE)
If $hConsoleOutPut = $INVALID_HANDLE_VALUE Then MsgBox(0, 'Fehler', "STDOUT-Handle nicht möglich")
$hConsoleInPut = GetStdHandle($STD_INPUT_HANDLE)
If $hConsoleOutPut = $INVALID_HANDLE_VALUE Then MsgBox(0, 'Fehler', "STDIN-Handle nicht möglich")
Else
MsgBox(0, 'Fehler', "Console konnte nicht erstellt werden!")
EndIf
; Titel setzen und Textattribute gelbe Schrift auf blauem Grund
SetConsoleTitle('Meine Test-Console')
If @error Then MsgBox(0, 'Fehler', 'Titel fehlgeschlagen')
SetConsoleTextAttribute($hConsoleOutPut, BitOR($FOREGROUND_RED,$FOREGROUND_GREEN,$FOREGROUND_INTENSITY,$BACKGROUND_BLUE))
If @error Then MsgBox(0, 'Fehler', 'Attribute fehlgeschlagen')
; Text in Console schreiben
ConsoleWriteLine("Hallo Welt!")
If @error Then MsgBox(0, 'Fehler', 'Schreibe Zeile fehlgeschlagen')
_ConsoleWrite("Bitte gib deinen Namen ein: ")
If @error Then MsgBox(0, 'Fehler', 'Schreiben fehlgeschlagen')
; Text aus Console in MsgBox verwenden
MsgBox(0, '', "Dein Name: " & ConsoleReadLine() )
; alles schließen
CloseHandle($hConsoleOutPut)
CloseHandle($hConsoleInPut)
FreeConsole()
#region - Console Funcs
[/autoit] [autoit][/autoit] [autoit]Func AllocConsole()
Local $ret = DllCall("kernel32", "long", "AllocConsole")
If $ret[0] = 0 Then Return SetError(1,0,0)
Return 1
EndFunc
Func FreeConsole()
DllCall("kernel32", "long", "FreeConsole")
EndFunc
Func CloseHandle($hObject)
DllCall("kernel32", "long", "CloseHandle", "long", $hObject)
EndFunc
Func GetStdHandle($nStdHandle)
Local $ret = DllCall("kernel32", "long", "GetStdHandle", "long", $nStdHandle)
If $ret[0] = 0 Then Return SetError(1,0,0)
Return $ret[0]
EndFunc
Func WriteConsole($hConsoleOutPut, $sText)
Local $lpBuffer = DllStructCreate("char[" & StringLen($sText) & "]"), $lpNumberOfCharsWritten = DllStructCreate('int')
DllStructSetData($lpBuffer, 1, $sText)
Local $ret = DllCall("kernel32", "long", "WriteConsoleA", "long", $hConsoleOutPut, "ptr", DllStructGetPtr($lpBuffer), _
"long", StringLen($sText), "ptr", DllStructGetPtr($lpNumberOfCharsWritten), "long", 0)
If $ret[0] = 0 Then Return SetError(1,0,0)
Return $ret[0]
EndFunc
Func ConsoleWriteLine($sInput)
_ConsoleWrite($sInput & @CRLF)
If @error Then Return SetError(1,0,0)
EndFunc
Func _ConsoleWrite($sInput)
WriteConsole($hConsoleOutPut, $sInput)
If @error Then Return SetError(1,0,0)
EndFunc
Func ReadConsole($hConsoleInPut, $ConsoleReadLine)
Local $lpBuffer = DllStructCreate("char[80]"), $lpNumberOfCharsRead = DllStructCreate('int')
DllStructSetData($lpBuffer, 1, $ConsoleReadLine)
Local $ret = DllCall("kernel32", "long", "ReadConsoleA", "long", $hConsoleInPut, "ptr", DllStructGetPtr($lpBuffer), _
"long", StringLen($ConsoleReadLine), "ptr", DllStructGetPtr($lpNumberOfCharsRead), 'long', 0)
If $ret[0] = 0 Then Return SetError(1,0,0)
Return DllStructGetData($lpBuffer, 1)
EndFunc
Func ConsoleReadLine()
Local $ZeroPos, $ConsoleReadLine = ''
For $i = 0 To 79
$ConsoleReadLine &= Chr(0)
Next
$ConsoleReadLine = ReadConsole($hConsoleInPut, $ConsoleReadLine)
$ZeroPos = StringInStr($ConsoleReadLine, Chr(0))
If $ZeroPos > 0 Then $ConsoleReadLine = StringLeft($ConsoleReadLine, $ZeroPos - 3)
Return $ConsoleReadLine
EndFunc
Func SetConsoleTitle($lpConsoleTitle)
Local $ret = DllCall("kernel32", "long", "SetConsoleTitleA", "str", $lpConsoleTitle)
If $ret[0] = 0 Then Return SetError(1,0,0)
Return 1
EndFunc
Func SetConsoleTextAttribute($hConsoleOutPut, $wAttributes)
Local $ret = DllCall("kernel32", "long", "SetConsoleTextAttribute", "long", $hConsoleOutPut, "long", $wAttributes)
If $ret[0] = 0 Then Return SetError(1,0,0)
Return 1
EndFunc
#endregion - Console Funcs
[/autoit]PS: Kommt mir bitte nicht mit irgendwelchen AGB's gewisser Paidmailer.
Ich möchte dass programm nur interessehalber schreiben und weil ich es als eine schöne Herausforderung ansehe
Wenn dich die AGB's der Anbieter genausowenig interessieren, wie unsere Forenregeln, muß dir auch klar sein, dass es von uns keine Hilfe geben wird!
[Thread Closed]
oder du schaust in die AutoIt-Hilfe:
Appendix -- CLSIDs of Special Folders
Alternativ kannst du das Control auf einem Child-Window erstellen und diesen Fenster durchscheinend darstellen.
[autoit]#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$GUImain = GUICreate('Main', 170, 200, -1, -1, Default, $GUI_WS_EX_PARENTDRAG)
GUICtrlCreatePic(@Systemdir & "\oobe\images\merlin.gif", 10, 10, 150, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$GUIEdit = GUICreate("", 150, 180, 10, 20, $WS_POPUP, $WS_EX_MDICHILD, $GUImain)
WinSetTrans($GUIEdit, "", 150)
$Edit = GUICtrlCreateEdit('', 0, 10, 170, 190)
GUISetState(@SW_SHOW, $GUIEdit)
GUISetState(@SW_SHOW, $GUImain)
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Alle anderen Fragen sind schon beantwortet. ![]()
Du brauchst Notepad nicht automatisieren, sondern kannst die Datei direkt umwandeln. Nicht getestet, aber sollte laufen:
#Include <WinAPI.au3>
Local $fh = FileOpen('UniCodeFile.txt', 32) ; Windows default mode UTF16 Little Endian
Local $strUC = FileRead($fh)
Local $len = StringLen($strUC) +1
FileClose($fh)
Local $tString = DllStructCreate("wchar[" & $len & "]")
DllStructSetData($tString, 1, $strUC)
Local $strANSI = _WinAPI_WideCharToMultiByte(DllStructGetPtr($tString))
FileWrite(@ScriptDir & '\meineANSI.txt', $strANSI)
Also die Registry-Befehle sind m.E. gut dokumentiert. Wenn es um das Verständnis bezüglich der Registry selbst geht, kannst du ja mal ein wenig googeln. Da findest du sicher gute Tuts.
Zum Thema Dll:
Ich habe mal im EN-Forum ein Tut dazu gesehen. Hab den Link aber nicht parat. Das war für den Anfang recht informativ.
Ansonsten kann ich dir zu diesem Thema nur raten: Üben, Üben, nochmals Üben. Programmiere einfach mal bestehende Funktionen nach, indem du die Dll-Calls verwendest (z.B. StringLower, StringUpper etc.). Hier findest du eine gute Übersicht mit den Dll: Windows API Referenz
Viel Erfolg, und wenn es irgendwo hakt - einfach fragen ![]()
Ah, da hatte ich mich vertan
FileInstall braucht ja die Quelle als reinen String. Das hier:
Func _Install ()
For $i = 1 To 10
DirCreate("C:\BS\PICCHANGE\" & $i)
FileInstall($i & ".bmp", "C:\BS\PICCHANGE\1\" & $arBild[$i-1] )
Next
EndFunc
geht also nicht (leider).
DirCreate kannst du in der Schleife laufen lassen, aber FileInstall mußt du dann doch für jede Datei einen Befehl schreiben.
Hi,
ist jetzt nicht getestet - aber ich hab dein Skript erst mal gewaltig gekürzt. Den Aufruf zum Wallpaper wechseln habe ich an AdlibEnable vergeben ![]()
Global Const $SPIF_SENDWININICHANGE = 0x2
Global Const $SPIF_UPDATEINIFILE = 0x1
Global Const $SPI_SETDESKWALLPAPER = 20
Global $arBild[10]
For $i = 0 To 9
$arBild[$i] = "C:\BS\PICCHANGE\" & $i+1 & "\bild.bmp"
Next
Global $pos = 0
#Include <Constants.au3>
$size = FileGetSize("C:\BS\PICCHANGE\1\" & $arBild[0])
If $size = 0 then _Install ()
Func _Install ()
For $i = 1 To 10
DirCreate("C:\BS\PICCHANGE\" & $i)
FileInstall($i & ".bmp", "C:\BS\PICCHANGE\1\" & $arBild[$i-1] )
Next
EndFunc
Opt("TrayMenuMode",1) ; Standard Traymenüeinträge (Script pausieren/beenden) werden nicht angezeigt.
[/autoit] [autoit][/autoit] [autoit]$E = TrayCreateMenu("Einstellungen")
$I = TrayCreateItem("Intervall", $E)
$B = TrayCreateItem("Bilder Tauschen", $E)
$AB = TrayCreateItem("About")
$EX = TrayCreateItem("Beenden")
TraySetState()
AdlibEnable('_chgWallpaper', 300000)
While 1
$msg = TrayGetMsg()
Switch $msg
Case $AB
Msgbox(64,"Über:","AutoIt3-Tray-Beispiel")
Case $EX
Exit
EndSwitch
WEnd
Func _chgWallpaper()
If $pos = 10 Then $pos = 0
DllCall("user32.dll", "int", "SystemParametersInfo", "uint", $SPI_SETDESKWALLPAPER, _
"uint", 0, "str", $arBild[$pos], "uint", BitOR($SPIF_SENDWININICHANGE,$SPIF_UPDATEINIFILE))
$pos += 1
EndFunc
Edit: Noch etwas gekürzt ![]()
Oder einfach in der SciTE-Config anpassen:
Bitte dran denken, die Funktionen der Listview-UDF erwarten das Handle, NICHT die ID. Auch wenn einige Funktionen mit der ID funktionieren, sollte man lieber gleich das Handle verwenden, erspart einiges an Fehlersuche.
dass ich bei einem Button halt erkennen muss, auf welchen Eintrag die Person geklickt hat.
Irgendwie verstehe ich kein Wort. Was denn für einen Button? Sehe in deinem Code keinen Button.
Falls du wissen willst, welches das markierte Item im Listview ist, kannst du den Index mit _GUICtrlListView_GetSelectedIndices holen und den Inhalt mit _GUICtrlListView_GetItemText.
Die kann man nicht kaufen^^
![]()
Gibts nur für seehr große Unternehmen![]()
OT:
Und die bekommen es geschenkt... ![]()
/OT
Mach es dir einfacher. Wandele die gewünschten Bilder in Icons.
Dann kannst du mit _GUICtrlToolbar_SetImageList() alle Icon laden und in deiner Toolbar verwenden.
Zwei Varianten:
Alle Aufrufe in einer Schleife ausführen und
1. Ergebnis umleiten in eine Datei, anhängend (BEFEHL /param >> ergebnis.txt) und anschließend alles auswerten, Log-File schreiben
oder
2. Ergebnis umleiten in eine Datei und sofort auswerten (würde ich bevorzugen, erleichtert das Regexen der Ausgabe), Log-File schreiben