Betriebssystem in Autoit

  • Hallo Autoitgemeinde,

    ich habe schon länger den Wunsch ein eigenes kleines Betriebssystem zu schreiben (manche werden bestimmt Lachen).
    Meine Frage: Ist es möglich dies mit Autoit zu machen?

    "Software is like Sex, it's best if it's free"
    Linus Thorvalds

    Einmal editiert, zuletzt von lordxilef (2. Juli 2009 um 21:51)

  • Ich denke eher nicht ,da Autoit ja ein Betriebssystem steuern soll :D Da müsstes du C* oder C++ nehmen und selbst dafür brauchst du eine menge Fach wissen .
    ( Irgentwer hat ma ausgerechnet das , wenn man alleine windows xp selber schreiben würde etwa 200 Jahre brauch ) also wer damit schon die Frage geklärt denk ich ma :)
    Edit : da war wohrl der gute peethebee schneller als ich :P

  • Eine art Minibetriebsystem auf Windows aufbauend (wie ein programm halt) wäre bestimmt möglich....

  • vielleicht sollte "man" sich einmal mit Grundlagen der Informatik beschäftigen :!::?:

    z.B. WAS ist ein Betriebssystem?

    Arten?
    Aufbau?
    Aufgaben?

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • Also was ich meine ist:

    1.Man startet das Programm.
    -> Es setzt sich wie ein Spiel komplett über den desktop (popup?)
    2. Dort sind "programme" (also eigendlich funktionen) die wenn man sie startet eine neue Gui aufrufen

    etc...

    ctec
    du brauchst mir nichts zu erzählen in Punkto Informatik
    Ich habe soviel wissen das selbst manche FiSis und IT-SE mit diversen Zertifikaten teils dumm aus der Wäsche gucken...

    • Offizieller Beitrag
    Zitat

    Eine art Minibetriebsystem auf Windows aufbauend (wie ein programm halt) wäre bestimmt möglich....

    +

    Zitat

    ctec
    du brauchst mir nichts zu erzählen in Punkto Informatik
    Ich habe soviel wissen das selbst manche FiSis und IT-SE mit diversen Zertifikaten teils dumm aus der Wäsche gucken...

    Öhmmm...
    Ein Betriebssystem kann nicht auf einem anderen aufbauen, weil es dann selbst keines mehr ist, würde ich mal sagen. Zumindest die Formulierung ist unglücklich ;). Man kann es vielleicht "Betriebssystemaufsatz" oder eben Shell nennen, aber mehr nicht. Der Charakter eines Betriebssystem ist gerade, dass es auf nackter Hardware laufen kann und keinen Untersatz braucht...

    peethebee

  • Um die Windows-Shell zu ersetzen (statt Desktop und Taskbar wird ein anderes Programm beim Windows-Start gestartet) kann man diesen Registry-Wert ändern:
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"

    Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <WinAPI.au3>

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

    Opt("GuiOnEventMode", 1)

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

    Global $aProgram[8][4]
    $aProgram[0][0] = 7
    $aProgram[1][0] = @WindowsDir & "\explorer.exe"
    $aProgram[1][1] = "Explorer"
    $aProgram[1][2] = @WindowsDir & "\explorer.exe"
    $aProgram[1][3] = 1
    $aProgram[2][0] = @WindowsDir & "\notepad.exe"
    $aProgram[2][1] = "Editor"
    $aProgram[2][2] = @WindowsDir & "\notepad.exe"
    $aProgram[2][3] = 1
    $aProgram[3][0] = @SystemDir & "\calc.exe"
    $aProgram[3][1] = "Rechner"
    $aProgram[3][2] = @SystemDir & "\calc.exe"
    $aProgram[3][3] = 1
    $aProgram[4][0] = @SystemDir & "\cmd.exe"
    $aProgram[4][1] = "Eingabeaufforderung"
    $aProgram[4][2] = @SystemDir & "\cmd.exe"
    $aProgram[4][3] = 1
    $aProgram[5][0] = "Shutdown"
    $aProgram[5][1] = "Ausschalten"
    $aProgram[5][2] = @SystemDir & "\shell32.dll"
    $aProgram[5][3] = 29
    $aProgram[6][0] = "Logoff"
    $aProgram[6][1] = "Abmelden"
    $aProgram[6][2] = @SystemDir & "\shell32.dll"
    $aProgram[6][3] = 46
    $aProgram[7][0] = "Deaktivate"
    $aProgram[7][1] = "Original wiederherstellen"
    $aProgram[7][2] = @SystemDir & "\shell32.dll"
    $aProgram[7][3] = 45

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

    If Not @Compiled Then
    MsgBox(0, "ACHTUNG!", "Script muß vorher als EXE compiliert werden")
    Exit
    EndIf

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

    If Not StringInStr(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"), @AutoItExe) Then
    _Enable()
    Exit
    EndIf

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

    If $CmdLine[0] <> 1 Then
    MsgBox(0, "Achtung", "Diese Shell wird beim nächsten Anmelden gestartet...")
    Exit
    EndIf

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

    Global $hDeskTop = GUICreate("Autoit Desktop", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP)
    GUISetBkColor(0x005500, $hDeskTop)
    GUISetState(@SW_SHOW, $hDeskTop)

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

    Global $hTaskBar = GUICreate("Autoit TaskBar", @DesktopWidth, 60, 0, @DesktopHeight - 80, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST))
    _WinAPI_SetLayeredWindowAttributes($hTaskBar, 0xABCDEF, 255)
    Global $hDummy = GUICtrlCreateDummy()
    For $i = 1 To $aProgram[0][0]
    GUICtrlCreateIcon($aProgram[$i][2], $aProgram[$i][3] - 1, @DesktopWidth / 2 - ($aProgram[0][0] * 24) + $i * 48 - 32, 5, 32, 32)
    GUICtrlSetOnEvent(-1, "_Start")
    GUICtrlSetTip(-1, $aProgram[$i][1])
    Next
    GUISetBkColor(0xABCDEF, $hTaskBar)
    GUISetState(@SW_SHOW, $hTaskBar)

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

    While 1
    Sleep(5000)
    WinSetOnTop($hTaskBar, "", 1)
    _WinAPI_RedrawWindow($hTaskBar)
    WEnd

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

    Func _Start()
    Local $iIndex = @GUI_CtrlId - $hDummy
    Switch $aProgram[$iIndex][0]
    Case "Shutdown"
    _Shutdown()
    Case "Logoff"
    _Logoff()
    Case "Deaktivate"
    _Disable()
    Case Else
    ShellExecute($aProgram[$iIndex][0])
    EndSwitch
    EndFunc ;==>_Start

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

    Func _Shutdown()
    If MsgBox(4, "Herunterfahren?", "Wollen Sie den Rechner herunterfahren?") = 6 Then Shutdown(1)
    EndFunc ;==>_Shutdown

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

    Func _Logoff()
    If MsgBox(4, "Abmelden?", "Wollen Sie sich abmelden?") = 6 Then Shutdown(0)
    EndFunc ;==>_Logoff

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

    Func _Enable()
    If MsgBox(4, "Aktivieren?", "Wollen Sie die Windows Shell ersetzen?") = 6 Then
    IniWrite(@ScriptDir & "\Reg.ini", "Winlogon", "Userinit", RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell"))
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", @AutoItExe & " Run")
    MsgBox(0, "Aktivieren?", "Beim nächsten Anmelden startet die Autoit-Shell")
    EndIf
    EndFunc ;==>_Enable

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

    Func _Disable()
    If MsgBox(4, "Deaktivieren?", "Wollen Sie die original Windows Shell wieder aktivieren?") = 6 Then
    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "Shell", "REG_SZ", IniRead(@ScriptDir & "\Reg.ini", "Winlogon", "Userinit", "explorer.exe"))
    MsgBox(0, "Deaktivieren?", "Beim nächsten Anmelden startet Windows wieder im originalen Zustand")
    EndIf
    EndFunc ;==>_Disable

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

    Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
    If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
    Select
    Case @error
    Return SetError(@error, 0, 0)
    Case $Ret[0] = 0
    Return SetError(4, _WinAPI_GetLastError(), 0)
    Case Else
    Return 1
    EndSelect
    EndFunc ;==>_WinAPI_SetLayeredWindowAttributes

    [/autoit]

    ACHTUNG! Ausführen auf eigene Gefahr!
    Falls etwas schiefgeht, muß man manuell und evtl. umständlich den Registry-Wert wieder auf "explorer.exe" setzen!

    lgE

  • Da sich doch einige Antworten häufen erläutere ich meine frage nochmal (genauer).

    Also ich wolte wissen ob es möglich ist ein komplett eigenständiges system zu schreiben, was dann durch grub oder ähnliche geladen wird und genauso funktioniert wie ein Betriebssystem welches wir auf dem Rechner haben. Denn alles in C und C++ und Assambler zu schreiben wäre mir zu aufwändig.


    Und mit dem einfacher meine ich halt Autoit kan komplexe Sachen in ein paar Zeilen unterbringen (antwort auf h0scHberT)


    mfg lordxilef

    "Software is like Sex, it's best if it's free"
    Linus Thorvalds

  • es vereinfacht auszudrücken : autoit ist nichts weiter als eine möglichkeit windows zu manipulieren somit ist es nicht in der Lage so komplexe aufgaben wie ein eigenständiges system zu verarbeiten, da es im grunde auf dem windows kernel und den verschiedenen integrierten funktionen aufbaut
    wenn du tatsächlich ein Richtiges Betriebssystem schreiben willst musst du eine andere sprache wählen welch eigenständig arbeiten kann ohne vorhandene Funktionen in einer windows umgebung zu nutzen

    MFG

  • Würde denn nicht soetwas wie ein Virtuelles Betribssystem gehn?
    Es gibt ja auch virtuelle Betriebssysteme zum runterladen.

    Denke schon, das soetwas machbar wäre, nur ein system, dass auf "nackter" Hardware läuft, ist mit AutoIt nicht machbar...

  • Und das Fazit aus diesen Projekten war? "Kein sinnvoller Shell-Ersatz möglich" oder "läuft super"?

    Eine eigene Oberfläche wäre vermutlich ziemlich Mediacenter tauglich.

  • ne benutzeroberfläche in autoit wäre gut umsetzbar, ich meine früher lief windows auch nur über dos, mach du dein system einfach auf windows aufbauend

    • Offizieller Beitrag

    Hallo

    Mit AutoIt kann man kein eigenes Betriebssystem Programmieren. AutoIt funktioniert ohne Windows nicht, da es auf Windows basiert.
    Mit den Teilen die ich oben verlinkt hab, wollt ich nur zeigen was möglich ist.
    Ob das jetzt das ist was du willst ist deine Sache ;)

    Mfg Spider

  • Danke dir GTASpider

    Da dies nun nicht möglich ist versuche ich mich mal an so einer Shell.

    Vielleicht wirds ja was.

    Habt ihr links von welchen die funktionieren?

    "Software is like Sex, it's best if it's free"
    Linus Thorvalds