Script - Windows start - Registry - Infobereich

  • Hallo zusammen,
    ich habe ein problem, ich bekomme es einfach nicht hin. Ich habe auch schon die Suche und in der Hilfe nachgesehen, aber leider nichts gefunden. Und zwar wie schreibe ich das am besten, wenn das Programm (Scirpt) mit dem Windows startet, ohne dass sich das GUI-Fenster öffnet, sondern nur in das Infobereich.
    Ich hatte es so geschieben, aber es funktioniert leider nicht, da ich es vorher nur mit dem Autostart Ordner gemacht hatte.
    Ich möchte es jetzt mit dem Regitry machen.

    Mit Autostart (Funktioniert):

    Spoiler anzeigen
    [autoit]

    If @StartupDir = @ScriptDir Then
    GUISetState(@SW_HIDE)
    Else
    GUISetState(@SW_SHOW)
    EndIf

    [/autoit]

    Mit Registry (Funktioniert leider nicht):

    Spoiler anzeigen
    [autoit]

    If "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" = @ScriptDir Then
    GUISetState(@SW_HIDE)
    Else
    GUISetState(@SW_SHOW)
    EndIf

    [/autoit]

    Bitte schnell um Hilfe. Danke im Vorraus.

  • wie soll das auch funktionieren?

    [autoit]

    If "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" = @ScriptDir Then
    GUISetState(@SW_HIDE)
    Else
    GUISetState(@SW_SHOW)
    EndIf

    [/autoit]

    Kann ja nicht! HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run wird nie @Scriptdir sein ;)
    Soll in der Registry nachgesehen werden ob eine Gui gezeigt werden soll oder nicht? Oder was soll das bringen?

    also wenn dann so irgendwie:

    [autoit]

    If regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "hier kommt der value wert") = @ScriptDir Then
    GUISetState(@SW_HIDE)
    Else
    GUISetState(@SW_SHOW)
    EndIf

    [/autoit]

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Der_Doc

    Danke für den Tipp, das werde ich mir merken.

    franzp:

    Das geht leider auch nicht.

    Wieß keine wie das geht, oder überhaupt was ich meine?
    Ich will das sich das Programm bei Windows start nur im Infobereich (Taskleiste) öffnet und nicht das Hauptfenster auf dem Desktop.

  • naja du musst halt deine GUI einfach nach dem erzeugen auf Hide setzen und ein TrayMenu erstellen o.O? Schau dir doch mal die Hilfe zu einem Traymenu an

  • Das weiß ich und den Traymenu habe ich schon eingebaut, ich weiß wie ein Traymenu funktioniert bzw. wie man den einbaut.
    Aber wenn ich es so mache wie du es sagst, dann schließt sich jedes mal das Fenster in die Trayleiste wenn ich es selber (per Hand) öffne bzw. starte.
    Beim Autostart habe ich es ja so gehabt, wenn ich das Programm selber starte dann öffnet es sich ganz normal. Wenn es sich mit Windows startet dann startet das Programm nur in der Trayleiste ohne das Fenster (GUI).

    Weiß keiner wie es geht?

  • Mach einen Parameter für AutoRun :)
    AutoRun installieren:

    [autoit]

    RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
    "MyAutoApp", "REG_SZ", _
    '"' & @ScriptFullPath & '" /min' )

    [/autoit]


    zum testen:

    [autoit]

    If $CMDLINE[0] And $CMDLINE[1] = "/min" Then
    MsgBox(0,"","minimized")
    Else
    MsgBox(0,"","show")
    EndIf

    [/autoit]
  • Hallo und danke ersmal für die Antwort.

    @progandy

    Wieso das "/min", was soll das für eine Bedeutung haben?
    Und das mit CMDLINE kapiere ich auch noch nicht ganz.

  • bei and- bedingungen wird die 2. nur ausgewertet, wenn die erste True ist ;) Daher kann man beides in eine Zeile schreiben.

  • Müsste das

    [autoit]

    If $CMDLINE[1] = "/min" Then
    MsgBox(0,"","minimized")
    Else
    MsgBox(0,"","show")
    EndIf

    [/autoit]


    nicht auch funktionieren, denn wenn das False ist nützt es mir ja auch nichts das es irgend einen anderen Parameter (an Position 1) gibt

  • Nochmals Danke für die Erkärung von $CMDLINE.

    Ich hätte da aber noch eine frage. Wieso das "/min" am schluss hin? Reich es nicht wenn da @ScriptFullPath steht? Weil wo ich das gesehen habe mit den haufen " ' ' " ' kapiere ich das nicht.

  • Mit /min beim Programmaufruf teilst du dem Script mit das er die GUI nicht anzeigen und sich gefälligst ins Tray verpieseln soll. Und wenn du das Script normal aufrufst (ohne Parameter /min) dann soll er die GUI anzeigen.


    Zitat

    Weil wo ich das gesehen habe mit den haufen " ' ' " ' kapiere ich das nicht.


    Wo meinst du ?

  • @mehrsolala

    Erstmal danke für deine Antwort.
    Was ich mit denen Anfürungszeichen meine? Hier:

    Zitat

    Die haufen Zeichen, ich weiß nicht warum so viele mehr nicht. Wie soll das ganze dan aussehen? Also damit meine ich, wie es als Zeichen aussehen soll, z.B.

    Zitat

    ...\Test Programm.exe" /min


    EDIT: Ok ich weiß jetzt was er damit meint.
    Es soll ja danach z.B. so aussehen: "C:\Programm\Test\Test.exe" /min.
    Und die stehenden zeichen nach dem "C:\..." also wie hier im Beispiel das /min ist das ein Parameter,Oder? - wenn ich das richtig verstanden habe.

    4 Mal editiert, zuletzt von Mehmex (9. Januar 2009 um 10:03)

  • Damit soll das "-Zeichen mit in den Pfad geschrieben werden. Bei mir sieht der Pfad in der Registry dann besispielsweise so aus:

    Zitat

    "C:\Dokumente und Einstellungen\adminhostname\Desktop\Autoit\Scripts\others\temptest3.au3" /min

  • Ja. Ich habe mir nochmal die Hilfe angeschaut bei $CMDLINE und mit eure Infofmationen zusammen gefügt. Jetzt verstehe ich das ganze. Ich habe sogar Code geschrieben der die Parameter in ein MsgBox ausgibt.

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "Parameter", "Anzahl der Parameter: " & $cmdline[0] & " Parameter 1: " & $cmdline[1] & " Prameter 2: " & $cmdline[2])

    [/autoit]

    Bloß noch eine Verknüpfung auf dem Desktop erstellen und unter Eigenschaften->Ziel ganz am schluss nach die Anfürungszeichen zwei Parameter eingeben z.B. -min -console und abspeichern. Und als letztes starten und er zeigt dir die Parameter an.

    Eine Letzte Frage an euch. Muss also $cmdline[0] immer dabei stehen, also mit einer 0 in der Klammer? Weil ich habe es bemerkt wo ich das Programm nur mit einer $cmdline[1] für das erste Parameter starten wollte und er startete er nicht.
    Wenn ich das so weit verstanden habe überprüft die $cmdline[0] ob es eine Parameter besteht, wenn ja wird die $cmdline[1] ausgeführt bzw. gelesen. Wie der @progandy schon geschrieben hatte, nur wenn $cmdline[0] True ist, also Wahr, wird dann die $cmdline[1] ausgeführt.

    10 Mal editiert, zuletzt von Mehmex (9. Januar 2009 um 11:09)


  • Eine Letzte Frage an euch. Muss also $cmdline[0] immer dabei stehen, also mit einer 0 in der Klammer? Weil ich habe es bemerkt wo ich das Programm nur mit einer $cmdline[1] für das erste Parameter starten wollte und er startete er nicht.
    Wenn ich das so weit verstanden habe überprüft die $cmdline[0] ob es eine Parameter besteht, wenn ja wird die $cmdline[1] ausgeführt bzw. gelesen. Wie der @progandy schon geschrieben hatte, nur wenn $cmdline[0] True ist, also Wahr, wird dann die $cmdline[1] ausgeführt.


    in $CMDLINE[0] steh die Anzahö der Parameter. Angenommen, due willst auf $CMDLINE[1] zugreifen.
    Wenn kein Parameter übergeben wird, dann bricht AutoIt ab, da es CMDLINE[1] nicht gibt. Daher erst testen, ob die Parameternummer, die man abfragen möchte auch existiert ;)