Wie kopiere ich mein script in die Windows Registry?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Dienstag 3. Januar 2006, 11:55

Ich habe mir ein kleines Python Programm geschrieben und möchte nun, dass sich dieses - wenn ich es so in meinem Einstellungsmenü festlege - automatisch zusammen mit Windows startet.
Deshalb möchte ich, dass mein Programm automatisch eine Verknüpfung in die Windows Registry erstellt, damit ich das nicht manuell machen muss.
Ich hab bis jetzt nichts dazu gefunden. Kann mir jemand helfen?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 3. Januar 2006, 12:19

Reicht nich eine Verknüpfung in Autostart?

In der Registry gibt es meherere Orte, wo Autostart-Programme zu finden sind:
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
Auf dir Registry kannst du aus Python aus mit _winreg zugreifen, aber die Standardwarnung gilt dennoch: damit kann man sein System zerschließen, wenn man wichtige Sachen aus versehen verstellt.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Dienstag 3. Januar 2006, 14:18

Ok, stimmt, ist vielleicht sicherer, wenn ich nur eine Verknüpfung in Autostart erstelle.
Gibt es da schon fertige Funktionen oder Beispiel-Scripts dafür? Hab bis jetzt eigentlich nichts gefunden.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 3. Januar 2006, 14:55

Anonymous hat geschrieben:Gibt es da schon fertige Funktionen oder Beispiel-Scripts dafür?
Es gibt dafür mehrere Möglichkeiten, für beide brauchst du pywin32 (formerly known as win32all).

Also:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Dienstag 3. Januar 2006, 15:46

Ok, danke, das hilft mir schon weiter.
Hab jetzt allerdings noch ne ziemliche Dummy-Frage :oops:
also ich hab zum ersten mal aus meinem Python script eine ausführbare .exe-Datei gemacht und ich darf sie ja nicht einfach in Autostart kopieren, sondern muss eine Verknüpfung erstellen.
Hmm, jetzt frag ich mich, wie man das macht ...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 3. Januar 2006, 15:49

Kathrin hat geschrieben:also ich hab zum ersten mal aus meinem Python script eine ausführbare .exe-Datei gemacht und ich darf sie ja nicht einfach in Autostart kopieren, sondern muss eine Verknüpfung erstellen.
Hmm, jetzt frag ich mich, wie man das macht ...
Naja, an sich dürftest du auch die EXE in Autostart kopieren.. ist aber unüblich, stimmt.

Was meinst du mit, "wie man eine Verknüpfung macht"? Per Hand oder mit Python? Für eine Python-Lösung habe ich dir einige Links gegeben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Dienstag 3. Januar 2006, 17:27

Ich denke eine Verknüpfung kann man auch per Hand erstellen. IMHO ist es nur eine Text-Datei mit der Endung .lnk.... Wie so eine Aussieht, weiß ich aber jetzt nicht...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 3. Januar 2006, 17:47

Das Format einer .lnk-Datei ist binär, also würde ich vom "per Hand erstellen" Abstand nehmen.

Zum Anlegen per Hand, Du ziehst ein Icon mit der rechten Maustaste in den passeden (Autostart) Ordner und wärlst dort "Verknüpfung hier erstellen". Alternativ auch in den Ordner rechtsklicken und dort unter "Neu" -> "Verknüpfung" auswählen und vom Assistenten (auch als Wizard bekannt :roll: ) durch die Dialoge leiten lassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Dienstag 3. Januar 2006, 18:08

also ich habs jetzt hinbekommen mit Hilfe von winshell eine Verknüfung zu erstellen (Danke schonmal!)
... Problem ist nur, dass mein Programm nicht mehr komplett läuft, wenn ich es im autostart ausführe.
Ich habe meine exe-Datei mit py2exe erstellt und nun einen Ordner in dem alle benötigten Dateien sowie die exe-Datei selbst enthalten sind. Muss ich da beim Verknüpfen etwas besonders beachten? Wenn ich manuell eine Verknüpfung erstelle, muss ich ja auch nur eine Verknüpfung zur exe-Datei erstellen und mein Programm läuft.
Kann mir jemand sagen warum es mit winshell nicht klappt?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 3. Januar 2006, 18:16

Anonymous hat geschrieben:Wenn ich manuell eine Verknüpfung erstelle, muss ich ja auch nur eine Verknüpfung zur exe-Datei erstellen und mein Programm läuft. Kann mir jemand sagen warum es mit winshell nicht klappt?
Hi!

Wenn du manuell eine Verküpfung erstellst, dann wir automatisch der Ordner des verknüpften Programmes zum Arbeitsordner. Vielleicht kannst du mit "winshell" der Verknüpfung auch den Arbeitsordner (=ausführen in) übergeben.

Schau dir mal mit

Code: Alles auswählen

dir(winshell.CreateShortcut)
an, ob es eine Möglichkeit dafür gibt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 3. Januar 2006, 18:26

Hier ein Auszug aus der MSDN-Library: Vorsicht Visual Basic Script.

Code: Alles auswählen

         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com"
         oUrlLink.Save
Zumindest interessant, wenn man den Shortcut mit dem Windows Scripting Host erstellt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Mittwoch 4. Januar 2006, 13:33

Danke für die Hilfe!

Habs jetzt folgendermaßen hinbekommen, falls es jemanden interessiert:

Code: Alles auswählen

import winshell
autostartDirectory = winshell.startup (1)

winshell.CreateShortcut (
 Path=os.path.join (autostartDirectory, "myProg.exe.lnk"),
 Target=r"c:\tests\myProg.exe",
 Icon=(r"c:\tests\myProg.exe", 0),
 Description="Link to myProg.exe",
 StartIn="c:\tests"
Jetzt suche ich nur noch nach einer Möglichkeit meinen Link wieder zu löschen (vielleicht auch mit winshell)

MfG,
Kathrin!
Zuletzt geändert von Kathrin am Mittwoch 4. Januar 2006, 16:39, insgesamt 1-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 4. Januar 2006, 13:40

Kathrin hat geschrieben:Jetzt suche ich nur noch nach einer Möglichkeit meinen Link wieder zu löschen (vielleicht auch mit winshell)
Hi Kathrin!

So ein Link ist ja nur eine einfache Datei. Dateien kannst du mit

Code: Alles auswählen

os.remove()
löschen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Mittwoch 4. Januar 2006, 13:56

das hab ich mir eigentlich auch so gedacht, hat aber nicht geklappt.
(Normalerweise verwende ich auch os.remove)

OK, dann weiß ich wenigstens, dass es doch so funktionieren müsste ... vielleicht hat sich ein blöder Syntx-Fehler oder so reingeschlichen.

Danke!

:D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 4. Januar 2006, 14:05

Kathrin hat geschrieben: OK, dann weiß ich wenigstens, dass es doch so funktionieren müsste ... vielleicht hat sich ein blöder Syntx-Fehler oder so reingeschlichen.
Hi Kathrin!

So sollte es eigentlich funktionieren:

Code: Alles auswählen

os.remove(os.path.join(autostartDirectory, "myProg.exe.lnk"))
Hast du vielleicht ".lnk" vergessen?

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten