Autor |
Beitrag |
Namenlosnameless
      
Beiträge: 259
Erhaltene Danke: 6
Windows XP Home Edition, Windos Vista
C#
|
Verfasst: Di 04.01.11 14:48
Hallo
Ich will in meinen Sudoku Creator eine neue Funktion einbauen!
Das Programm kann Datein speichern und laden und benutz dafür *.sud - Datein. Ich würde gerne, mein Programm als Standartprogramm für diese *.sud Datein festlegen und auch das abgespeicherte Sudoku sofort sehen, sobald die Datei aufgerufen wird.
1.Frage: Muss ich mein Programm erst installieren, bevor ich es als Standartprogramm verwenden kann
2.Frage: Wie kann ich beim starten des Programmes prüfen, ob das Programm über einen Klick auf eine *.sud-Datei aufgerufen wurde, und diese dann mittels meinem Code für das laden von Datein anzeigen?
mfg Christoph Moderiert von Kha: Topic aus C# - Die Sprache verschoben am Di 04.01.2011 um 14:18
_________________ 1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 04.01.11 17:34
Für das Registrieren als Standardprogramm für ".sud"-Dateien, must du in die Registry schreiben (also installieren, da dafür Adminrechte benötigt werden).
Schau einfach mal mittels "regedit", wie das für andere Programme aussieht (unter HKEY_CLASSES_ROOT).
Und für das Abfangen in deinem Programm einfach den ersten Parameter auswerten (s.a. Programm mit Variable starten)
Dort steht dann der komplette Pfadname zu deiner ".sud"-Datei drin.
|
|
Namenlosnameless 
      
Beiträge: 259
Erhaltene Danke: 6
Windows XP Home Edition, Windos Vista
C#
|
Verfasst: Di 04.01.11 21:27
Danke fürs erste
okay das öffnen funktioniert!
Allerdings hab ich keinen Schimmer wie der Reg-Eintrag aussehen muss, damit das auch funktioniert! (Momentan hab ichs manuell eingestellt)
kannst du mir vlt ein bisschen genauere auskunft darüber geben, wie der Registryeintrag aussehen muss?
mfg Christoph
_________________ 1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
|
|
Th69
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 05.01.11 13:11
Hallo Christoph,
für Delphi hab ich hier im Entwickler-Forum Code dafür gefunden: www.delphi-forum.de/...trieren_96736,0.html (müßtest halt die passenden Registry-Methoden von .NET dir raussuchen -).
Unter dotnet-snippets.de/d...uepfung-SID1212.aspx habe ich zumindestens schon mal C#-Code dafür gefunden. Müßte dann in etwa so aussehen
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| string sExt = ".sud"; string sExtfile = "sudfile"; string sFileType = "Textdatei"; string sPath = Application.ExecutablePath;
RegistryKey FileKey = Registry.ClassesRoot.CreateSubKey(sExt); FileKey.SetValue("", sExtfile);
RegistryKey AppKey = Registry.ClassesRoot.CreateSubKey(sExtfile); AppKey.SetValue("", sFileType); AppKey.CreateSubKey(@"DefaultIcon").SetValue("", sPath); AppKey.CreateSubKey(@"Shell\Open\Command").SetValue("", sPath + " %1"); |
(alles "Ohne (Schieß-)Gewehr"  )
Und unter entwickler-forum.de/showthread.php?t=13726 noch eine kurze Beschreibung der nötigen Keys ('\Shell\Open\Command' ist dann der wichtige Eintrag).
Schau dir am besten mal mittels "Regedit" am Beispiel von ".txt"-Dateien das an:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| // mittels Export erzeugt [HKEY_CLASSES_ROOT\.txt] @="txtfile" "PerceivedType"="text" "Content Type"="text/plain"
[HKEY_CLASSES_ROOT\txtfile] @="Textdatei"
[HKEY_CLASSES_ROOT\txtfile\shell]
[HKEY_CLASSES_ROOT\txtfile\shell\open]
[HKEY_CLASSES_ROOT\txtfile\shell\open\command] @=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\ 00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\ 54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\ 00 // entspricht "%SystemRoot%\system32\NOTEPAD.EXE %1" |
(für dich unwichtige Keys habe ich weggelassen - auch "PerceivedType" und "Content Type" kannst du eigentlich weglassen, schaden aber auch nicht
Alternativ kannst du auch einfach bei dir die ".suo"-Datei mit deinem Programm verknüpfen (per Windows-Explorer) und dir dann die "RegEdit"-Einträge für ".suo" und "suofile" anschauen.
Viel Erfolg!
Zuletzt bearbeitet von Th69 am Do 06.01.11 12:32, insgesamt 1-mal bearbeitet
|
|
Namenlosnameless 
      
Beiträge: 259
Erhaltene Danke: 6
Windows XP Home Edition, Windos Vista
C#
|
Verfasst: Mi 05.01.11 21:17
Uff...
Habs wohl verabsäumt mich mit der Registry vertraut zu machen.
Ich versteh da wohl absolut nur Bahnhof, und werds fürs erste mal sein lassen, aber es hat keinen Sinn wenn ich versuche etwas zu machen, von dem ich absolut nix versteh!
vielen Dank für die Bemühungen
_________________ 1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
|
|
Trashkid2000
      
Beiträge: 561
Erhaltene Danke: 137
|
Verfasst: Mi 05.01.11 21:54
Den Code, den Th69 gepostet hat, funktioniert jedenfalls ohne Probleme. Jedenfalls auf einem WinXP 32 Bit, wie es mit anderen Systemen bzw. Architekturen aussieht, k.A.. Aber war die Dateiendung von Deinen Dateien nicht ".sud"? Das müsstest Du dann noch ändern. Wenn allerdings Dein Programm ein mehr oder weniger "portables App" sein soll (also es kann überall hin entpackt werden, ohne installiert zu werden), dann müsstest Du ja (sogar bei jedem Programmstart) prüfen, ob der Pfad noch aktuell ist, ansonsten den RegistryKey ändern. Und dann wäre die Verknüpfung auch erst ab dem 1. Programmstart verfügbar.
Und dann müsstest Du noch die Startparameter in Deinem Programm verarbeiten, also wenn einen Datei zum öffnen übergeben wurde, diese dann auch öffnen. Im Moment öffnet sich nur Dein Programm mit einem leeren Feld.
Marko
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 05.01.11 22:16
Trashkid2000 hat folgendes geschrieben : | dann müsstest Du ja (sogar bei jedem Programmstart) prüfen, ob der Pfad noch aktuell ist, ansonsten den RegistryKey ändern |
Da das Programm kaum immer mit Adminrechten gestartet werden wird, wird das ohnehin nicht funktionieren.
Die Einrichtung dieser Registryeinträge gehört in das Setup.
|
|
Namenlosnameless 
      
Beiträge: 259
Erhaltene Danke: 6
Windows XP Home Edition, Windos Vista
C#
|
Verfasst: Mi 05.01.11 23:41
aber wie schauts aus, wenn ich es mit einem Manifest starten lasse, das Adminrechte vergibt?
_________________ 1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 06.01.11 00:20
Wer ist schon so blöd und gibt einfach jedem Programm immer einfach Adminrechte?
Aber selbst wenn: Es nervt doch tierisch, wenn ich die bei jedem Start bestätigen muss.
Wenn, dann können die bei Bedarf angefordert werden. Aber wie gesagt: Sowas gehört in ein Setup.
|
|
|