[PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Lieber Keffi,

UPDATE zu den Fragen oder Anregungen Keffi:

Danke, mit dem Hinweis, Umgebungsvariable Verzeichnis der Anwendung.
Es war genau das, was ich eigentlich wollte. Falsche Variable wieder verwendet wie zuvor.

10:07 Uhr
Warum Punkt und Slash,
Ohne Punkt und Slash wird bei mir eine Datei erstellt: "prefsPM-AUT.prefs"
Was somit Falsch ist. mit Punkt und Slash wird das Verzeichnis resp. die Datei getrennt.

Vielleicht falsch, aber bei mir kommt genau der Effekt, dass Verzeichnisse und Dateien
ansonsten zusammengeschachtelt werden.

So ist dann Verzeichnis "pref" vorhanden und anschließend wird dort auch die Datei "PM-AUT.pref" erstellt.
Ich habe diesen Effekt bei einem anderen Source, den ich über diese Schleife ausgeführt hatte, festgestellt.

Ich weiß nicht, ob es ein Windows Problem ist oder ein Problem NUR bei mir.

10:07 Uhr
Auswertung:
Create pref
Create Directory

11:11 Uhr
bin leider noch nicht so weit um dass es mir "keinen" Fehler ausgibt im weitesten Sinn.
Auswertunf Verzeichnis vorhanden resp. wurde erstellt.

Ditto mit dre Datei.

Danke, bin ich gerade am Ball und versuche dies auch zu berücksichtigen.
UpDate wird n diesem Post berücksichtigt.....

Grüsse
Christian
Kiffi hat geschrieben: 17.12.2024 13:23
ChrigiGee hat geschrieben: 17.12.2024 13:07

Code: Alles auswählen

path$ = GetEnvironmentVariable(GetCurrentDirectory())

  If Right(path$, 1) <> ""
    path$ + ""
  EndIf
  path$ + "./prefs"
  CreateDirectory(path$)
  path$ + "./PM-AUT.prefs"
  If OpenPreferences(path$) = 0
    CreatePreferences(path$)
  EndIf
* Schau Dir bitte in der Dokumentation an, was GetEnvironmentVariable() macht.

* mal abgesehen davon, dass der GetEnvironmentVariable()-Parameter falsch ist: die GetCurrentDirectory() - Problematik hatten wir hier schon einmal

Diese Zeilen solltest Du Dir anschauen. Das bekommt man auch als Anfänger hin:
ChrigiGee hat geschrieben: 17.12.2024 13:07

Code: Alles auswählen

  If Right(path$, 1) <> ""
    path$ + ""
  EndIf

was macht der Punkt hier?
ChrigiGee hat geschrieben: 17.12.2024 13:07

Code: Alles auswählen

    path$ + "./prefs"
CreateDirectory() hat einen Rückgabewert. Der sollte auch ausgewertet werden.

CreatePreferences() hat einen Rückgabewert. Der sollte auch ausgewertet werden.

...
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von Kiffi »

ChrigiGee hat geschrieben: 18.12.2024 05:0910:07 Uhr
Warum Punkt und Slash,
Ohne Punkt und Slash wird bei mir eine Datei erstellt: "prefsPM-AUT.prefs"
Was somit Falsch ist. mit Punkt und Slash wird das Verzeichnis resp. die Datei getrennt.
bitte genau lesen. Ich fragte "was macht der Punkt hier?". Von einem Slash war nicht die Rede.
a²+b²=mc²
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo Keffi,

warum das es "ohne" Punkt auch nicht geht, kann ich beim besten Willen nicht beantworten.
Mir ist einfach aufgefallen, dass genau dieser Punkt noch fehlte, damit das ganze klappte.

Ich habe es neutral versucht, ich habe es nur mit Slash versucht und nur wenn der Punkt auch noch gesetzt war,
wurden Verzeichnis und Datei genau so erstellt wie überlegt.

Und mir kommt es wirklich vor wie bei 'nem Unix Derivat wo ./ ganz wichtig sind.
Ich aber ganz sicher weiß, dass ich auf einem Windows-PC arbeite. ....

./prefs erstellt das Verzeichnis dort wo in meinem Fall die Applikation ist
./PM-AUDT.pref erstellt die Datei

Nur PM-AUDT.pref wirds sehr speziell, es erstellt die Datei als prefsPM-AUDT.prefs
Dahingegen das Verzeichnis prefs erstellt wird, aber ohne Inhalt.

Herzlichen Dank, dass ich meiner Formulierung noch etwas hinzufügen durfte.

Ich hoffe die Frage zumindest Beantwortet zu haben, auch wenn ich nicht weiss warum es so ist
und ich diesbezügflich keine Logische Antwort geben kann.

Christian
Kiffi hat geschrieben: 18.12.2024 11:32
ChrigiGee hat geschrieben: 18.12.2024 05:0910:07 Uhr
Warum Punkt und Slash,
Ohne Punkt und Slash wird bei mir eine Datei erstellt: "prefsPM-AUT.prefs"
Was somit Falsch ist. mit Punkt und Slash wird das Verzeichnis resp. die Datei getrennt.
bitte genau lesen. Ich fragte "was macht der Punkt hier?". Von einem Slash war nicht die Rede.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von Axolotl »

Der Punkt steht bei Windows für das aktuelle Verzeichnis.
Das der Slash funktioniert ist der "neuen" Gutmütigkeit von Windows zuzuschreiben. Von Haus aus verwendet Windows den #PS$ ('\').
Siehe auch Hilfe:
OS-spezifische Pfadtrennzeichen sind verfügbar: #PS, #NPS, #PS$ ('\') und #NPS$ ('/').

Wie ich schon des öfteren geschrieben habe, ist das aktuelle Verzeichnis nicht konstant. Ich würde mich da nie drauf verlassen.
Du wirst den Unterschied erkennen, wenn du das folgende Beispielprogram (z.B. PureBasic_Compilation0.exe) über eine Verknüpfung startest und vor dem zweiten Starten einfach mal in den Verknüpfungseinstellungen den "Start in" Eintrag änderst.
Das aktuelle Verzeichnis kann nämlich irgendwo sein....

Code: Alles auswählen

currdir$ = GetCurrentDirectory()            : Debug currdir$ 
appdir$ = GetPathPart(ProgramFilename())    : Debug appdir$ 
MessageRequester("Wo bin ich?", "CurrDir ==> " + currdir$ + #CRLF$ + "APP Dir ==> " + appdir$) 
Aus meiner Sicht gibt es zwei Möglichkeiten (mehr oder weniger Windows konform) -- zur anschaulichen Darstellung habe ich die %EnvironmentVariable% verwendet. Geht aber auch mit z.B. GetUserDirectory()
1. Das Program wird unter %ProgramFiles% oder %ProgramFiles(x86)% installiert
=> Dann gehören die Daten in %APPDATA%\[<Company>\]<ProgramName>
2. Das Program is sozusagen Portable
=> Program kommt in einen beliebigen Ordner z.B.:: C:\PortableApps\[<Company>\]<ProgramName>
=> Da können dann auch die Daten stehen ggf. in einem Unterordner C:\PortableApps\[<Company>\]<ProgramName>\Data

Letzter Tipp:
Mit CreateDirectory() kann man immer nur ein nicht vorhandenes Verzeichnis anlegen. Passend zum Beispiel oben:
1. CreateDirectory("C:\PortableApps\MyCompany]")
2. CreateDirectory("C:\PortableApps\MyCompany\MyProgram")
3. CreateDirectory("C:\PortableApps\MyCompany\MyProgram\MyData")
Und der Rückgabewert sagt dir, ob die Erzeugung erfolgreich war.

Oder du nimmst eine API Funktion (die alles in einem Rutsch kann)

Code: Alles auswählen

; This function creates a file system folder whose fully qualified path is given by pszPath. If one or more of the intermediate folders do not exist, it creates them.

#ERROR_CANCELLED  = $000004C7   ; Guess this is the right one. 

Procedure CreateDirectories(Path$) 
  Protected result 

  result = SHCreateDirectory_(0, @Path$) 
  If result = #ERROR_SUCCESS                    : Debug #PB_Compiler_Procedure + "()  OK" 
  ElseIf result = #ERROR_BAD_PATHNAME           : Debug #PB_Compiler_Procedure + "()  The Path$ parameter was set to a relative path. "
  ElseIf result = #ERROR_FILENAME_EXCED_RANGE   : Debug #PB_Compiler_Procedure + "()  The path pointed to by pszPath is too long."
  ElseIf result = #ERROR_FILE_EXISTS            : Debug #PB_Compiler_Procedure + "()  The directory exists."
  ElseIf result = #ERROR_ALREADY_EXISTS         : Debug #PB_Compiler_Procedure + "()  The directory exists."
  ElseIf result = #ERROR_CANCELLED              : Debug #PB_Compiler_Procedure + "()  The user canceled the operation."
  EndIf 

  ProcedureReturn Bool(result = #ERROR_SUCCESS)   ; False or True 
EndProcedure
Oder du nutzt die Suche:
https://www.purebasic.fr/english/viewtopic.php?t=68073
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo lieber Axolotl,

Das mit der "Großzügigkeit" von Windows, wusste ich noch nicht.
Ich konnte leider das in dem Fall leider nicht plausibel erklären.
Meinen Schreibfähigkeiten und der Abrufbarkeit aus dem Gedächtnis geschuldet.

Da ich die letzte Zeit sehr viel mit mingw gemacht hatte, war mir unterdessen ./
präsenter im Gedächtnis als das Windows konforme .\

Und manchmal vermischen sich bei mir dann auch mitunter solche Sachen.

Was ich erwähnen möchte, ich bin auch nicht selber auf exakt diesen Code gekommen.
Ursprung liegt bei einem Code Beispiel vom lieben ts-soft.

Dort abgekupfert mit %APPDATA% klappte das ganze, genau in dem Fall nicht,
das das Verzeichnis und auch die Datei erstellen wird. So habe ich versucht
eine passende Lösung zu finden.

Meine Grundüberlegung war, wie Du vermutet hast, darin begraben, dass ich es portabel halten wollte.
Sodass kein "Müll" im %APPDATA% entsteht. Alles in der Überlegung zu dem Kollegen für den ich den
Makro Rekorder erstelle,,, Daten entstehen, wo er nicht haben möchte.

Nach Möglichkeit möchte ich auf ein SetUp verzichten, vorläufig. Was nicht heißt, dass es nicht doch noch
gekippt wird, mit meinem Vorhaben.

Dann werde ich schauen, dass ich es wesentlich besser Windows konform mäßig hinbekomme.
Auf die API möchte ich gerade nicht zurückgreifen und den anstrengenderen Weg versuchen.

Überlegung, wenn mein Code Beispiel annähernd klappt, dass es auch Austauschbar wäre zu einem anderen Projekt
ohne dass man extrem viel anpassen müsste. (Anwendungsname fest im Source verbaut für das Verzeichnis) wäre sowas
sehr hilfreich.

Suche German & English Forum, sind immer wieder lehrreich, absolut.
Manchmal klappt es mit der Suche nicht so ganz, wenn man die falsche Frage stellt.
MDI & Kindfenster Suche in meinem Fall führen in etwa in eine Sackgasse.

Dann werde ich mal versuchen, meine Fehlinterpretationen etwas Raum lassen und Anpassungen vornehmen.
Herzlichen Dank für die Informationen und einen Gedanken Schub in die Richtung zur Verbesserung.

Christian
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

ChrigiGee hat geschrieben: 19.12.2024 08:51
Meine Grundüberlegung war, wie Du vermutet hast, darin begraben, dass ich es portabel halten wollte.
Sodass kein "Müll" im %APPDATA% entsteht. Alles in der Überlegung zu dem Kollegen für den ich den
Makro Rekorder erstelle,,, Daten entstehen, wo er nicht haben möchte.

Nach Möglichkeit möchte ich auf ein SetUp verzichten, vorläufig. Was nicht heißt, dass es nicht doch noch
gekippt wird, mit meinem Vorhaben.
Na dann laß doch den Kollegen den Ordner/Pfad auswählen und speichere ihn in einer .prefs Datei.
Das Erstellen eines neuen Ordners kann er ja selber erledigen oder biete ihm mit PathRequester()
eine Auswahl an.
Zur Ausführung :
Zu Beginn deines Programms liest du die .prefs Datei. Ist dort ein Pfad hinterlegt, wird dieser benutzt,
andernfalls biete ihm mit dem PathRequester eine Auswahl an, die dann in die .prefs (oder wie sie heißen soll)
gespeichert wird. Mit ExamineDierectory() und DirectoryEntryName() kannst du ja noch zusätzlich die
Existenz überprüfen.
Ich mache das ziemlich oft besonders bei Fremdprogrammen, wo ich mit dem Explorer einen Ordner erstelle
und dann im Programm diesen einstelle, damit er beim nächsten Aufruf dann gefunden wird. Das ist ja oft
bei fremden Programmen die Standard-Vorgehensweise.
PB 6.10
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo lieber H.Brill ,

dass ich dem Kollegen überlasse bereits die prefs zu speichern, würde für mich wahrscheinlich bereits etwas kniffliger werden,
diese wieder zu öffnen resp. zu wissen, wo sie sind.

Und da der Kollege es mit Vermüllung und wo er Dateien Bedenken hat, wäre meine Idee noch im gleichen Verzeichnis wie
die Anwendung selber.

Auch wenn heute vieles in die %APPDATA% (User oder Computer) geht. Ich habe kurz gesprochen mit dem Kollegen,
danach war mir wieder klar, dass es sinnvoller ist. Seine Panik schüren, wo Daten hingeschrieben werden, möchte ich nicht zusätzlich befeuern.

Und für mich beim Test, ebenfalls einfacher, dann muss ich nicht zu sehr in der Ordnerstruktur herum switchen.


Liebe Grüsse aus Thailand
Chris
H.Brill hat geschrieben: 19.12.2024 11:51
ChrigiGee hat geschrieben: 19.12.2024 08:51
Meine Grundüberlegung war, wie Du vermutet hast, darin begraben, dass ich es portabel halten wollte.
Sodass kein "Müll" im %APPDATA% entsteht. Alles in der Überlegung zu dem Kollegen für den ich den
Makro Rekorder erstelle,,, Daten entstehen, wo er nicht haben möchte.

Nach Möglichkeit möchte ich auf ein SetUp verzichten, vorläufig. Was nicht heißt, dass es nicht doch noch
gekippt wird, mit meinem Vorhaben.
Na dann laß doch den Kollegen den Ordner/Pfad auswählen und speichere ihn in einer .prefs Datei.
Das Erstellen eines neuen Ordners kann er ja selber erledigen oder biete ihm mit PathRequester()
eine Auswahl an.
Zur Ausführung :
Zu Beginn deines Programms liest du die .prefs Datei. Ist dort ein Pfad hinterlegt, wird dieser benutzt,
andernfalls biete ihm mit dem PathRequester eine Auswahl an, die dann in die .prefs (oder wie sie heißen soll)
gespeichert wird. Mit ExamineDierectory() und DirectoryEntryName() kannst du ja noch zusätzlich die
Existenz überprüfen.
Ich mache das ziemlich oft besonders bei Fremdprogrammen, wo ich mit dem Explorer einen Ordner erstelle
und dann im Programm diesen einstelle, damit er beim nächsten Aufruf dann gefunden wird. Das ist ja oft
bei fremden Programmen die Standard-Vorgehensweise.
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
ChrigiGee
Beiträge: 125
Registriert: 18.07.2024 12:14
Computerausstattung: Lenovo ThinkPad i7, 32GB Ram, 1TB SSD
PB 6.11 LTS, proGUI, IceDesigner
Wohnort: Bern

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von ChrigiGee »

Hallo @all und einen schönen Nachmittag,

Bild

OK, sorry, beim Editieren des Posts habe ich leider die Grafik, welche im Zusammenhang steht,
leider jetzt nicht ersichtlich in der Vorschau.

Anstelle der handelsüblichen Buttons frage ich mich ober ich es ähnlich wie PB machen kann,
über SilkTheme.zip File.

Aber ich stehe auf dem Schlauch, müsste ich das ganze Design also 3D mittels CEGUI erstellen?
Ich habe es in einem Posting erwähnt, in diesem Beitrag.

Die GUI brauch jetzt nicht unbedingt im CEGUI Style daherzukommen.
Ich wollte eigentlich nur die Butten gegen eine Grafik Variante ersetzt haben
und auch nicht unbedingt die einzelnen Grafiken im Verzeichnis,
den mit gefällt der Ansatz aus PB und auch diverser Anwendungen die darauf aufbauen.

Oder hab ich da jetzt auch mit den Beispielen missverstanden?
Denn die eigentliche Hilfe von PB sagt hierzu nixx nur das SilkTheme verwendet
wird für die eigene Anwendung wo und wie ersetzen....

Liebe Grüsse
Chris

// Edit: Bild-Link repariert (Kiffi)
Wer nicht fragt, der nichts lernt.
Wer keine Fehler macht, kann sich nicht verbessern.
Das Mysterium, ein wandelndes Lexikon. :mrgreen:

Wer Fragen zu meinem Textstil hat oder sich wundert über mich,
der darf seelenruhig mich direkt ansprechen. Ich beiße noch nicht.
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: [PROJEKT] Patch Maker - erstellen Patch File für Anwendungen z.b.

Beitrag von H.Brill »

Ich wollte eigentlich nur die Butten gegen eine Grafik Variante ersetzt haben

Du kannst ja auch mit ButtonImageGadget() deine Buttons verschönern.
Da gibt es ja Unengen an Button-Bilder im Netz.
PB 6.10
Antworten