ProgrammName, Verzeichnis und Process ID

Anfängerfragen zum Programmieren mit PureBasic.
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

ProgrammName, Verzeichnis und Process ID

Beitrag von der-sigi »

Hallo

ich habe jetzt schon eine ganze Weile gesucht, bin aber nicht fündig geworden und hoffe nicht, daß ich Tomaten auf den Augen habe.

Ich möchte gerne aktuelles

- Programmverzeichnis
- Programmname
- Prozess ID

ermitteln und im Programm verwenden. Wie mache ich das? Gibt es dafür Standard Konstanten, die man verwenden kann?

Danke für Eure Hilfe.

Sigi
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Unter PB3.94 sollte Dir die PBOSL_Processlib weiterhelfen.
Unter PB4 sehe einfach in der Process Lib nach
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo ts-soft

Danke für den Beitrag. Aber trotz langwierigem Suchen finde ich da nichts passendes. Zudem nur für KleinUndWeich, wenn ich das richtig sehe. So wie ich mitbekommen habe, bist du ein richtiger Guru und könntest mir sicher direkter auf den Weg helfen. Oder? ;)

Also mein Wunsch sind eigentlich Standardfunktionen für jede Programmiersprache, selbst Perl beherrscht das auf KleinUndWeich und Linux/Unix. Kann man das hier wirklich nirgends abfragen?

Viele Grüße
Sigi
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit PB4 geht das, ansonsten mußte die API des jeweiligen Betriebssystemes
benutzen. Da ich mit Linux nicht viel mache, kenne ich die entsprechenden
Funktionen dort nicht.

Hier mal aktuelles Verzeichnis Cross-Plattform
(aktuelles Verzeichnis muß nicht dem Programm-Verzeichnis entsprechen!)

Code: Alles auswählen

Procedure.s GetCurrentDir()
  Protected CurDir.s
  CurDir.s = Space(2048)
  CompilerIf #PB_Compiler_OS = #PB_OS_Linux
    getcwd_(CurDir, 2048)
  CompilerElse
    GetCurrentDirectory_(2048,CurDir)
  CompilerEndIf
  ProcedureReturn CurDir
EndProcedure

Debug GetCurrentDir()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

für PB 3.94 und Windows

Code: Alles auswählen

Procedure.s GetExeName()
  Prg.s = Space(#MAX_PATH+1)
  GetModuleFileName_(GetModuleHandle_(0), @Prg, #MAX_PATH)
  ProcedureReturn Prg
EndProcedure

Debug GetPathPart(GetExeName()) ; Programmpfad
Debug GetExeName() ; Programmname
Für die Prozess-ID wirklich am einfachsten die PBOSL_Processlib benutzen
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

Hallo ihr zwei!
Danke mal für die "erste Hilfe".

Ist ja mal ein Anfang, vor allem deine Lösung ts-soft. Das aktuelle Verzeichnis muß natürlich nicht das Programmverzeichnis sein, klar.

Ich hatte das wie folgt probiert, allerdings kommt da nicht das ganze Verzeichnis zurück, sondern auch nur der Punkt. Schade. ;)

[code]
If ExamineDirectory(0, ".", "")
debug DirectoryEntryName()
EndIf
[/code]

Aber das Programmverzeichnis und den Programmnamen hätte ich schon gerne, heul. Kann mir niemand helfen? Kann man deines DataMiner nicht auch so aufbohren wie das von ts-soft, damit es unter Linux rennt? ;)

Noch 'ne dumme Anfängerfrage zum Schluß: Wo finde ich denn die ganzen Befehle wie "getcwd_", "GetCurrentDirectory_", "GetModuleFileName_" und "GetModuleHandle_". Im CodeArchiv habe ich dazu leider nichts gefunden (Liste oder so). Dankeschön.

Viele Grüße
Sigi
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Die APIs zu Windows findeste in der Win32.hlp bzw. PSDK oder MSDN, zu
Linux API unter: http://lidn.sourceforge.net/ scheint aber gerade nicht zu gehen. Ansonsten findest Du weitere Links und Infos unter FAQ & Tuts
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Eric
Beiträge: 303
Registriert: 05.09.2004 09:50
Wohnort: Göttingen

Beitrag von Eric »

Für das Programmverzeichnis unter Linux hab ich hier was.
Für den Programmnamen einfach das GetPathPart durch GetFilePart ersetzen.
(Allerdings hat der Code anscheinend noch Probleme auf 64bit Systemen,
sobald ich das behoben hab, werde ich das noch in schöne Prozeduren packen /:-> )

ProzessID unter Linux ist eigendlich ganz einfach:

Code: Alles auswählen

Procedure GetPID()
  !mov eax,20
  !int 0x80
  ProcedureReturn
EndProcedure
El_Choni_work: cant't you just spit the binary data to sqlite, as you would spit a hamster into a microwave oven?
* Fangles falls off the chair laughing
Bild
der-sigi
Beiträge: 39
Registriert: 07.04.2006 12:22

Beitrag von der-sigi »

DANKE !!!!
für eure Hilfe.
Ihr seid echt klasse.
Antworten