Hiho,
in der suche hab ich leider nur beiträge gefunden, wo gesagt wurde, dass es nicht geht.
aber evtl ist es ja mittlerweile schon integriert worden oder jmd hat es anders lösen können... weiß jmd was?
Hiho,
in der suche hab ich leider nur beiträge gefunden, wo gesagt wurde, dass es nicht geht.
aber evtl ist es ja mittlerweile schon integriert worden oder jmd hat es anders lösen können... weiß jmd was?
hi
es geht
nent sisch _winapi_atachconsole oder so...wieso bin ich der einzige, der das weiß ?!
grez
Hallo,
jetzt würde mich mal interessieren wie Du mit _WinAPI_AttachConsole einen Text in einer DosBox ausgibst!?
z.B. so: Verwendet die Console, aus der es aufgerufen wurde, sonst erzeugt es eine neue.
#include<WinAPI.au3>
Global $aResult, $hConsole
if not _WinAPI_AttachConsole() then
$ret = DllCall("Kernel32.dll", "long", "AllocConsole")
If $ret = 0 Then Exit MsgBox(0, 'EXIT', "No Console allocated!")
endif
$hConsole = _WinAPI_GetStdHandle(1)
$hConsoleIn = _WinAPI_GetStdHandle(0)
if $hConsole = -1 then
MsgBox(0, "Error", "GetStdHandle failed")
Exit
endif
_WinAPI_WriteConsole($hConsole, "Bitte Name eingeben: ")
$test = DllStructCreate("char[10000]")
$read = 500
_WinAPI_ReadFile($hConsoleIn,DllStructGetPtr($test),DllStructGetSize($test),$read)
MsgBox(0, '', DllStructGetData($test,1))
if not _WinAPI_WriteConsole($hConsole, "Hello World" & @CRLF) then
MsgBox(0, "Error", "WriteConsole Failed")
endif
_WinAPI_WriteConsole($hConsole, "PAUSE: ENTER druecken")
_WinAPI_ReadFile($hConsoleIn,DllStructGetPtr($test),DllStructGetSize($test),$read)
Exit
Funktioniert das bei dir?
coole sache.
also wenn ich das teil compile und per cmd aufrufe, kommt "Bitte Name eingeben" ... das sieht doch richtig aus =)
danke.
muss jetzt nur gucken, wie man das anständig in andere scripte einbindet *g*
Ja funktioniert, wenn es kompiliert ist!
Nicht schlecht @progandy, mich hätte nur interessiert ob @maycontainnuts es auch hinbekommen hätte, es gehört ja etwas mehr dazu wie nur _WinAPI_AttachConsole aufzurufen.
hi
jo..es gehört schon mehr dazu als nur winapi_atach_console aber ich hatte in Errinerung, das da in der Hilfe nen Beispiel dazu gegebe war...
grez
auf jeden fall vielen dank ... soviel code scheint es ja nicht zu sein, um das funktionierend in ein script einzubinden.
geil dass das endlich möglich ist =)
muss ich alle script neuschreiben =/
Hi,
man muss aber vorsichtig sein. Die Dinge werden als Befehle interpretiert, oder? Sprich wenn das Skript aus einer DOSBOX aufgerufen wird, es erscheint der Satz : Gib deinen Namen ein: wenn man hier nun zufällig den Namen einer exe im Ordner eingibt, dann wird diese gestartet!
Bestätigung?
Mega
ist korrekt
EDIT: wenn ich jetzt per _WinAPI_WriteConsole etwas an das CMD-fenster schicke, schreibt er das auch schön da rein, aber ...
man muss danach manuell enter drücken, um danach wieder befehle eingeben zu können, bzw, man kann zwar befehle eingeben, aber der pfad ist in der aktiven cmd-linie nicht zu sehen.
kann man da was gegen machen? oder einfach controlsend enter an das fenster?
Man muss noch MakeCUI verwenden, damit man eine ConsoleApp erstellt.:
[autoit]#AutoIt3Wrapper_Change2CUI=y
[/autoit]
ins Skript einfügen (Wenn man den AutoIt3Wrapper hat)
Hallo
Jo, mit der Beta version kann man direkt Kompelierte AutoIt scripts als CUI Programm erstellen. Also Consolenprogramme die mit ConsoleWrite("bla") schreiben können.
Dafür brauchst du neuste Beta und am besten den neusten AutoIt3Wrapper den es bei SciTe gibt. Alles einfach links inder leiste Downloaden.
Mfg Spider
Bei mir gehts auch mit Stable ??
Zum lesen aus ser Console braucht man aber nach wie vor die Funcs von oben
Hier hab ich das ganze mal in UDFs verpackt
#AutoIt3Wrapper_Change2CUI=y
#include<WinAPI.au3>
Global $GLOBAL_hConsole,$GLOBAL_hConsoleIn
; Initialize the CMD Funcs
; Parameter: [Opt] $ExitOnFatal - If True, The App exits with Fatal error if an error occurs in this Function (Default: False)
; Return values: Success: 1
; Error: 0 and @error:
; 1 - Could not allocate Console -> no In or outuput-Handle
; 2 - GetStdHandle for Output failed -> No Output-Handle, too
; 3 - GetStdHandle for Input failed, but we have an Ouput-Handle
;Author: Prog@ndy
Func _CMD_STARTUP($ExitOnFatal=0)
if not _WinAPI_AttachConsole() then
$ret = DllCall("Kernel32.dll", "long", "AllocConsole")
If $ret = 0 Then
If $ExitOnFatal Then _WinAPI_FatalAppExit("Could not allocate Console")
Return SetError(1,0,0)
EndIf
EndIf
Global $GLOBAL_hConsole = _WinAPI_GetStdHandle(1)
if $GLOBAL_hConsole= -1 then
If $ExitOnFatal Then _WinAPI_FatalAppExit("GetStdHandle for Output failed")
Return SetError(2,0,0)
EndIf
Global $GLOBAL_hConsoleIn = _WinAPI_GetStdHandle(0)
if $GLOBAL_hConsoleIn = -1 then
If $ExitOnFatal Then _WinAPI_FatalAppExit("GetStdHandle for Input failed")
Return SetError(1,0,0)
EndIf
Return 1
EndFunc
; PASUES CMD, waits for ENTER
;Prog@ndy
Func _CMD_PAUSE()
_CMD_Write("PAUSE: ENTER drücken")
_CMD_READ()
EndFunc
;Writes Text to CMD
;Prog@ndy
Func _CMD_Write($text)
Local $temp = _WinAPI_WriteConsole($GLOBAL_hConsole, CharToOem($text))
Return SetError(@error,@extended,$temp)
EndFunc
;REads Text from CMD
;Prog@ndy
Func _CMD_READ()
Local $test = DllStructCreate("char[10000]")
Local $read = 5000
Local $temp = _WinAPI_ReadFile($GLOBAL_hConsoleIn,DllStructGetPtr($test),DllStructGetSize($test),$read)
If @error Then Return SetError(@error,@extended,$temp)
Return OemToChar(DllStructGetData($test,1))
EndFunc
;===============================================================================
; Name: OemToChar
; Description: Wandelt einen ASCII- in einen ANSI-String
; Parameter(s): $szSrc = String der umgewandelt werden soll
; Requirement(s): keine
; Return Value(s): bei Erfolg: umgewandelter String
; bei Fehler: "" und @error = 1
; Author(s): bernd670
;===============================================================================
Func OemToChar($szSrc)
;~ Private Declare Function OemToChar Lib "user32.dll" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Local $placeholder
For $i = 0 To StringLen($szSrc)
$placeholder &= " "
Next
Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "str", $szSrc, "str",$placeholder)
If IsArray($lRetVal) And $lRetVal[0] = 1 Then
Return SetError(0,0,$lRetVal[2])
EndIf
Return SetError(1,0,"")
EndFunc ;==>OemToChar
;===============================================================================
; Name: CharToOEM
; Description: Wandelt einen ANSI- in einen ASCII-String
; Parameter(s): $szSrc = String der umgewandelt werden soll
; Requirement(s): keine
; Return Value(s): bei Erfolg: umgewandelter String
; bei Fehler: "" und @error = 1
; Author(s): Prog@ndy
;===============================================================================
Func CharToOEM($szSrc)
Local $placeholder
For $i = 0 To StringLen($szSrc)
$placeholder &= " "
Next
Local $lRetVal = DllCall("user32.dll", "long", "CharToOem", "str", $szSrc, "str",$placeholder)
If IsArray($lRetVal) And $lRetVal[0] = 1 Then
Return SetError(0,0,$lRetVal[2])
EndIf
Return SetError(1,0,"")
EndFunc ;==>OemToChar
_CMD_STARTUP(True) ; IMPORTANT !!!!!
[/autoit] [autoit][/autoit] [autoit]_CMD_Write("Bitte Name eingeben: ")
$name = _CMD_READ()
MsgBox(0, '', $name)
_CMD_Write("Hallo, " &$name & @CRLF)
_CMD_PAUSE()
if not _CMD_Write("Hello World" & @CRLF) then
MsgBox(0, "Error", "WriteConsole Failed")
endif
//Edit: Startup-Funktion verbessert, thx to Fast2
@progandy: Schöne UDF aber [kleinkariert]dazu gleich ein paar Dinge die mir aufgefallen sind(nix großes): 1. Oben fehlt das #include-once und 2. Seit wann kann man das Change2CUI in ne UDF schreiben(gibt es da keine Probleme wenn das z. B. noch mal im Hauptscript steht?)[/kleinkariert]
Edit: Beim durchschauen sind mir noch eine Anregung gekommen: Ich würde anstatt MsgBoxen auszugeben lieber @Error setzen(bei _CMD_Startup()).
So, jetzt aber genug reingeredet
Ja, hast recht, habs geändert.
[kleinkariert]: Denk mal, es gibt Probleme, wenn im Hauptskript Change2CUI = False NACH dem include steht. Davor sollte es nicht stören. Außerdem verwendet das eigentlich keineer mit False. Entweder fehlt es oder steht mit y (Ja) drin
wie funzt das ganze jetzt oO
Zitat[kleinkariert]: Denk mal, es gibt Probleme, wenn im Hauptskript Change2CUI = False NACH dem include steht. Davor sollte es nicht stören. Außerdem verwendet das eigentlich keineer mit False. Entweder fehlt es oder steht mit y (Ja) drin
Das war leider falsch. #AutoIt3Wrapper_Change2CUI=y muss ins Hauptskript.
Von dem Script aus Samstag, 19. April 2008, 15:55 Zeile 1 - 100 (Was für eine schöne Zahl ) in ein Include packen. und includen. Jetzt mal ein Bsp im Anhang
//Edit: Version 1.5 gibt es hier:
Console.zip
Downloads Alte Version: 12
Hi,
geht aber auch teilweise ohne _WinAPI_...
[autoit]
Func _CMD_Write($szText)
ConsoleWrite($szText)
EndFunc
Nur ConsoleRead will nicht so richtig, obwohl es in der Hilfe so steht ..., aber ConsoleRead funzt nur mit der Text Konsole.
Gruß
Greenhorn