Seite 1 von 1

ProgrammName, Verzeichnis und Process ID

Verfasst: 07.04.2006 12:29
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

Verfasst: 07.04.2006 13:21
von ts-soft
Unter PB3.94 sollte Dir die PBOSL_Processlib weiterhelfen.
Unter PB4 sehe einfach in der Process Lib nach

Verfasst: 10.04.2006 19:55
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

Verfasst: 10.04.2006 20:13
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()

Verfasst: 10.04.2006 20:27
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

Verfasst: 11.04.2006 20:04
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

Verfasst: 11.04.2006 20:26
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

Verfasst: 12.04.2006 00:01
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

Verfasst: 12.04.2006 22:10
von der-sigi
DANKE !!!!
für eure Hilfe.
Ihr seid echt klasse.