Dos Box

  • Hi,

    mir war gerade langweilig und da hab ich ne kleine Dos Box gecoded. Einfach die Dos Befehle in das Input eintragen und auf Send klicken :D

    Mfg

    Spoiler anzeigen
    [autoit]

    #include "GuiConstants.au3"
    #include "Constants.au3"

    [/autoit] [autoit][/autoit] [autoit]

    GuiCreate("DOS Box", 800, 600,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

    [/autoit] [autoit][/autoit] [autoit]

    $ctrlEdit_Output = GUICtrlCreateEdit( "", 0, 0, 800, 575, _
    BitOR( $ES_READONLY, $WS_VSCROLL, $WS_HSCROLL, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL ))
    GUICtrlSetBkColor( $ctrlEdit_Output, 0x000000 )
    GUICtrlSetColor( $ctrlEdit_Output, 0xFFFFFF )
    GUICtrlSetFont( $ctrlEdit_Output, 9, 5000 )
    $ctrlInput_Input = GuiCtrlCreateInput( "", 0, 575, 720, 25)
    GUICtrlSetFont( $ctrlInput_Input, 9, 5000 )
    $ctrlButton_Send = GuiCtrlCreateButton("Send", 720, 575, 80, 25, $BS_DEFPUSHBUTTON )

    [/autoit] [autoit][/autoit] [autoit]

    GuiSetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $gMsg = GuiGetMsg()
    Switch $gMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $ctrlButton_Send
    $run = Run( @ComSpec & " /c " & GUICtrlRead( $ctrlInput_Input ), @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    GUICtrlSetData( $ctrlEdit_Output, GUICtrlRead( $ctrlEdit_Output ) & @CRLF & @CRLF & StdoutRead( $run ) )
    EndSwitch
    WEnd

    [/autoit]
  • Habs ausprobiert. Funktioniert einwandfrei. Kanns leider nicht verwenden, da ich ein DOS-Programm verwende und dazu hab ich noch Vista :(

    Edit: Die GUI funktioniert bei mir, aber die Befehle habe ich noch nicht ausprobiert

    Einmal editiert, zuletzt von AutoIt_Scriptor (3. Dezember 2006 um 16:49)

  • bei mir klappts nicht, wenn ich zb notepad eingebe tut sich nix oO


    €€doch jetzt :)

    Einmal editiert, zuletzt von huggy (3. Dezember 2006 um 16:47)

  • Hi,
    mich wundert, daß das Script bei Anderen ohne Probleme laufen soll..
    .. bei mir gehts erst nach einigen Änderungen

    Spoiler anzeigen

    ..allerdings läßt die Ausgabe noch zu wünschen übrig :D
    btw:
    Mein Beitrag zu peethewee's Geburtstag ;)
    Statt

    Code
    While 1
    ..
    Wend


    finde ich jetzt

    Code
    Do
    ..
    Until 0

    schöner(ist aber genauso endlos)..
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    2 Mal editiert, zuletzt von ytwinky (4. Dezember 2006 um 18:59)

  • Hallo,

    bei mir sieht man nichts , also die Schrift ist Schwarz genau wie der Hintergrund . Wenn ich auf Send klicke und danach die Box makiere geht es eine Zeile tiefer ( daher denke ich das der Text schon da ist nur das die Farbe falsch ist ) .

    Gruß XGolDenX

  • Hi,

    das kann eigentlich nicht sein, weil im Code ja bk color und schrift color komplett anders gesetzt werden ( 0xFFFFFF und 0x000000 ). Lad mal nen Screenshot hoch bitte

    Mfg

  • HI daniel

    :hm: bei funtzt iwie tracert net!
    aber sonst cooles script!

    mfg DJBasslord

    Einmal editiert, zuletzt von DjBasslord (11. März 2007 um 15:29)

  • Ich denke, dass das kommt weil du einen Befehl nutzt den es nicht gibt. Darum gibts nen Error und GuiCtrlSetData wird nicht ausgeführt

  • Zitat

    Original von daniel w.
    Ich denke, dass das kommt weil du einen Befehl nutzt den es nicht gibt. Darum gibts nen Error und GuiCtrlSetData wird nicht ausgeführt

    Ich hab den oberen Code und den anderen Code mit der do schleife versucht ( copy & paste ) . Also , kann da be mir nichts falsches sein -falls du mich meintestes .

  • Ich meine das was du in das Input eingibst.... In deinem Falle "Hallo" oder gibt es den Befehl neuerdings?

  • Ach , dort muss man cmd befehle eingeben X(

    Dachte wäre eine Art Chat des Selbstgespräch :schild4:

    Gruß XGolDenX

  • Hi,
    ich hatte auch mal Langeweile :D
    Deshalb habe ich der DosBox von daniel w. noch zwei Buttons spendiert, den Fokus auf
    das Eingabefeld gesetzt und die Ausgabe an die deutsche Sprache angepaßt..
    Eine richtige Konsole ist es allerdings immer noch nicht ;)
    Gruß
    ytwinky

    Spoiler anzeigen
    [autoit]


    #include "GuiConstants.au3"
    #include "Constants.au3"
    Const $ControlName="DOS Box(Neu)", $Paper=0xe0e0e0, $Pen=0x0;00000
    Dim $Run, $ctrlEdit_Output, $ctrlInput_Input, $ctrlButton_Send, $Msg, $s
    GuiCreate($ControlName, 800, 600, -1, -1, $WS_OVERLAPPEDWINDOW+$WS_CLIPSIBLINGS)

    [/autoit] [autoit][/autoit] [autoit]

    $ctrlEdit_Output=GUICtrlCreateEdit("", 0, 0, 800, 575, $ES_READONLY+$WS_VSCROLL+$WS_HSCROLL+$ES_AUTOVSCROLL+$ES_AUTOHSCROLL)
    GUICtrlSetBkColor(-1, $Paper)
    GUICtrlSetColor(-1, $Pen)
    GUICtrlSetFont(-1, 9, 5000)
    GUICtrlSetTip(-1, "Original von daniel w. mit Ergänzungen von ytwinky")
    $ctrlButton_Send=GuiCtrlCreateButton("Send", 680, 575, 40, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $btCmd=GuiCtrlCreateButton("Cmd", 720, 575, 40, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $btQuit=GuiCtrlCreateButton("Quit", 760, 575, 40, 25)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $ctrlInput_Input=GuiCtrlCreateInput("", 0, 575, 679, 25)
    GUICtrlSetFont(-1, 9, 5000)
    ControlFocus($ControlName, "", $ctrlInput_Input)
    GuiSetState()
    While 1
    Switch GuiGetMsg()
    Case $GUI_EVENT_CLOSE, $btQuit
    Exit
    Case $btCmd
    $Run=Run(@ComSpec &" /k")
    Case $ctrlButton_Send
    $Run=Run(@ComSpec &" /c " &GUICtrlRead($ctrlInput_Input), @ScriptDir, @SW_HIDE, $STDERR_CHILD+$STDOUT_CHILD)
    Sleep(200)
    $s=GUICtrlRead($ctrlEdit_Output) &@CRLF
    If $s=@CRLF Then $s=""
    GUICtrlSetData($ctrlEdit_Output, $s &@ScriptDir &">" &GUICtrlRead($ctrlInput_Input) &@CRLF &_ConvertIt(StdoutRead($Run)))
    Case Else
    ;-))
    EndSwitch
    Wend

    [/autoit] [autoit][/autoit] [autoit]

    Func _ConvertIt($Prt) ;Umlaute umformen, geht natürlich auch per WinAPI
    $Prt=StringReplace($Prt, Chr(154), "Ü")
    $Prt=StringReplace($Prt, Chr(129), "ü")
    $Prt=StringReplace($Prt, Chr(142), "Ä")
    $Prt=StringReplace($Prt, Chr(132), "ä")
    $Prt=StringReplace($Prt, Chr(153), "Ö")
    $Prt=StringReplace($Prt, Chr(148), "ö")
    Return $Prt
    EndFunc

    [/autoit]

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    Einmal editiert, zuletzt von ytwinky (15. März 2007 um 17:26)

  • Habe noch als Zeile 47 folgendes eingefügt:
    $Prt=StringReplace($Prt, Chr(225), "ß")

    So wird auch das "ß" ungewnandelt. Habe ja sonst für solche Sache eine Ascii.com, die das übernimmt.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hi,

    habe mir Eure DOS Box mal angeschaut und so erweitert, dass sie nun ziemlich vollwertig ist. Schaut Euch das Ding mal an und gebt Feedback!

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------
    Script Name.......: DOS Box
    Script Version....: 1.0
    Change Date.......: 2007-08-27

    [/autoit] [autoit][/autoit] [autoit]

    Author(s).........: Daniel Wahlmann <[email='danielwahlmann@web.de'][/email]>
    ytwinky (autoit.de)
    teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    Company...........: n/a
    URL...............: http://www.autoit.de/

    [/autoit] [autoit][/autoit] [autoit]

    Script File(s)....: DOSBox.au3 - This script.
    AutoIt Version....: 3.2.6.0
    Note(s)...........: n/a
    #ce ----------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #region - Including external files.
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #endregion - Including external files.

    [/autoit] [autoit][/autoit] [autoit]

    #region - Changing the operation of AutoIt functions/parameters.
    Opt("GUICloseOnESC", 0)
    Opt("MustDeclareVars", 1)
    Opt("RunErrorsFatal", 0)
    #endregion - Changing the operation of AutoIt functions/parameters.

    [/autoit] [autoit][/autoit] [autoit]

    main()

    [/autoit] [autoit][/autoit] [autoit]

    Func main()
    #region - Declaring local constants/variables.
    Local Const $S_APPTITLE = "DOS Box"
    Local Const $S_APPVERSION = "1.0"
    Local Const $HEX_BKCOLOR = 0x000000
    Local Const $HEX_COLOR = 0xC0C0C0

    [/autoit] [autoit][/autoit] [autoit]

    Local $s_osversion = "", $s_cmd = "", $s_directory = "", $s_stdout = ""
    Local $h_maingui = -1, $h_outputedit = -1, $h_cmdcombo = -1, $h_cmdbt = -1
    Local $i_suppresswarn = 0, $i_pid = 0
    #endregion - Declaring local constants/variables.

    [/autoit] [autoit][/autoit] [autoit]

    #region - Determining the current operating system.
    Switch @OSVersion
    Case "WIN_VISTA"
    $s_osversion = "Vista"
    Case "WIN_2003"
    $s_osversion = "Server 2003"
    Case "WIN_XP"
    $s_osversion = "XP"
    Case "WIN_2000"
    $s_osversion = "2000"
    Case "WIN_NT4"
    $s_osversion = "NT"
    Case "WIN_ME"
    $s_osversion = "Millenium"
    Case "WIN_98"
    $s_osversion = "98"
    Case "WIN_95"
    $s_osversion = "95"
    EndSwitch
    #endregion - Determining the current operating system.

    [/autoit] [autoit][/autoit] [autoit]

    #region - Creating the GUI.
    $h_maingui = GUICreate($S_APPTITLE & " v" & $S_APPVERSION, 656, 300, -1, -1)
    $h_outputedit = GUICtrlCreateEdit("Microsoft Windows " & $s_osversion & " [Version " & @OSBuild & "]" & @CRLF & _
    "(C) Copyright Microsoft Corp." & @CRLF & @CRLF & @ScriptDir & ">", 0, 0, 656, 282, $ES_AUTOVSCROLL + $ES_OEMCONVERT + $ES_MULTILINE + $ES_READONLY + $WS_VSCROLL + $WS_DISABLED)
    GUICtrlSetBkColor(-1, $HEX_BKCOLOR)
    GUICtrlSetColor(-1, $HEX_COLOR)
    GUICtrlSetFont(-1, 9, 400, 0, "Lucida Console")
    $h_cmdcombo = GUICtrlCreateCombo("", 0, 282, 601, 18, $CBS_AUTOHSCROLL + $CBS_OEMCONVERT)
    GUICtrlSetFont(-1, 9, 400, 0, "Lucida Console")
    $h_cmdbt = GUICtrlCreateButton("&Send", 606, 282, 50, 18, $BS_CENTER + $BS_DEFPUSHBUTTON + $BS_FLAT)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetState($h_cmdcombo, $GUI_FOCUS)
    GUISetState(@SW_SHOW, $h_maingui)
    #endregion - Creating the GUI.

    [/autoit] [autoit][/autoit] [autoit]

    #region - GUI SelectLoop.
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    GUIDelete($h_maingui)
    Exit (0)
    Case $h_cmdbt
    GUICtrlSetData($h_outputedit, @CRLF, GUICtrlRead($h_outputedit))
    GUICtrlSetState($h_cmdbt, $GUI_DISABLE)
    GUICtrlSetState($h_cmdcombo, $GUI_DISABLE)

    [/autoit] [autoit][/autoit] [autoit]

    $s_cmd = GUICtrlRead($h_cmdcombo)
    GUICtrlSetData($h_cmdcombo, $s_cmd & "|")

    [/autoit] [autoit][/autoit] [autoit]

    If StringLeft($s_cmd, 2) = "cd" Then
    $s_directory = StringTrimLeft($s_cmd, StringInStr($s_cmd, " "))
    If FileExists($s_directory) Then
    If FileChangeDir($s_directory) == 1 Then
    $i_suppresswarn = 1
    EndIf
    EndIf
    ElseIf StringLeft($s_cmd, 3) = "cls" Then
    $i_suppresswarn = 1
    GUICtrlSetData($h_outputedit, "")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $i_suppresswarn = 0 Then
    $i_pid = Run(@ComSpec & " /c " & $s_cmd, @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    While 1
    $s_stdout = StdoutRead($i_pid)
    If @error Then
    ExitLoop
    EndIf
    GUICtrlSetData($h_outputedit, _StringReplaceDOSChars($s_stdout), GUICtrlRead($h_outputedit))
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $s_stdout = StderrRead($i_pid)
    If @error Then
    ExitLoop
    EndIf
    GUICtrlSetData($h_outputedit, _StringReplaceDOSChars($s_stdout), GUICtrlRead($h_outputedit))
    WEnd
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $i_suppresswarn = 0
    GUICtrlSetData($h_outputedit, @CRLF & @WorkingDir & ">", GUICtrlRead($h_outputedit))
    GUICtrlSetState($h_cmdbt, $GUI_ENABLE)
    GUICtrlSetState($h_cmdcombo, $GUI_ENABLE)
    GUICtrlSetState($h_cmdcombo, $GUI_FOCUS)
    EndSwitch
    WEnd
    #endregion - GUI SelectLoop.
    EndFunc ;==>main

    [/autoit] [autoit][/autoit] [autoit]

    #cs ----------------------------------------------------------------------------
    UDF Name..........: _StringReplaceDOSChars
    UDF Version.......: 1.0
    Change Date.......: 2007-08-27
    UDF Description...: Replaces special characters for DOS-applications.

    [/autoit] [autoit][/autoit] [autoit]

    Author(s).........: ytwinky (autoit.de)
    Alina (autoit.de)
    teh_hahn <[email='sPiTsHiT@gmx.de'][/email]>
    Company...........: none
    URL...............: http://www.autoit.de/

    [/autoit] [autoit][/autoit] [autoit]

    Parameter(s)......: $s_string - Specifies the string to replace.
    Return Value......: Returns the cleaned up string.

    [/autoit] [autoit][/autoit] [autoit]

    AutoIt Version....: 3.2.6.0
    Note(s)...........: none
    #ce ----------------------------------------------------------------------------
    Func _StringReplaceDOSChars($s_string)
    $s_string = StringReplace($s_string, Chr(154), "Ü")
    $s_string = StringReplace($s_string, Chr(129), "ü")
    $s_string = StringReplace($s_string, Chr(142), "Ä")
    $s_string = StringReplace($s_string, Chr(132), "ä")
    $s_string = StringReplace($s_string, Chr(153), "Ö")
    $s_string = StringReplace($s_string, Chr(148), "ö")
    $s_string = StringReplace($s_string, Chr(225), "ß")

    [/autoit] [autoit][/autoit] [autoit]

    Return ($s_string)
    EndFunc ;==>_StringReplaceDOSChars

    [/autoit]


    ChangeLog:
    - Design an die XP-Eingabeaufforderung angepasst.
    - Sonderfälle wie "cd" und "cls" werden berücksichtigt.
    - Ausgabe zur Laufzeit.
    - Sperrung der GUI-Controls zur Laufzeit.
    - History der eingegebenen Commands.

    To-Do:
    Output muss noch disabled werden, sonst wird die Ausgabe zerschossen.