exe name herausfinden

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

Silver_Knee

Betreff: exe name herausfinden

BeitragDo, Jan 10, 2008 2:08
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich möchte den namen meine Exe Herausfinden. ich hab sogar eine Idee: In BLitz3D kann man sich über Systemproperty die Hinst holen und mit der dürfte sich bestimmt auch der Prozessname anzeigen lassen. Leider konnte ich nicht den richtigen WinApi-Befehl finden. evtl weiß ihn einer von euch und ich kann mir stundenlange Suche sparen.

THX im vorraus

Artemis

BeitragDo, Jan 10, 2008 8:09
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Blitz3D? BlitzPlus? BlitzMax?
2. Wenn ja, warum im Smalltalk und nicht im entsprechenden Forum?

Silver_Knee

BeitragDo, Jan 10, 2008 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also B3D. Ich dachte hierbei geht es um ein allgemeines Programmierproblem und nicht speziell um Befehle von BlitzBasic. Hätte ich aber auch im Allgemein-Forum von BB Posten können. Da haste Recht. Nungut desalb frage ich ja wie ich mit zB der HINST, die ich mir ja mit SystemProperty("AppHInst") holen kann, den eigenen Prozessnamen herausfinden kann. Es geht nämlich darum den EXE-PACKER anzuwenden, nur soll der User die möglichkeit haben die EXE umzubenennen. Wäre ja blöd wenn dann die Dateien verloren gehen würden.
 

ChristianK

BeitragDo, Jan 10, 2008 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Funktion, die du brauchst, heißt GetModuleFileName ( aus der kernel32.dll ).

Hier die Userlib:

Zitat:
.lib "kernel32.dll"
api_GetModuleFileName%( module%, filename*, chars% )

Beachte, dass Filename kein String ist, sondern als Bank übergeben werden muss. GetModuleFilename schreibt den Dateinamen in "filename", aber Blitz-Strings können nicht per DLL geändert werden. Deshalb muss man den Umweg über Banks gehen.

Und ein Beispiel:

Code: [AUSKLAPPEN]
Local bank = CreateBank( 1023 )
api_GetModuleFileName( 0, bank, 1023 )

Local name$, byte

For i=0 To 1023
   byte = PeekByte( bank, i )
   If byte = 0 Exit
   
   name = name + Chr( byte )
Next

FreeBank bank

Print name

WaitKey
End

Als ersten Parameter kannst du 0 angeben, dann wird automatisch die eigene HINSTANCE verwendet.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

ungebildeter Neuling

BeitragSa, Feb 02, 2008 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider kommt bei mir immer "User lib function not found".
Obwohl ich des wie immer in die Userlib gemacht habe, kommt diese Meldung.
 

ChristianK

BeitragSa, Feb 02, 2008 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch's mal mit api_GetModuleFileNameA.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

ungebildeter Neuling

BeitragSa, Feb 02, 2008 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
dann kommt "function api_getmodulefilenamea not found"
 

ChristianK

BeitragSa, Feb 02, 2008 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst die .decls-Datei logischerweise auch anpassen.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

ungebildeter Neuling

BeitragSa, Feb 02, 2008 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann kommt wieder "User lib function not found"
 

ChristianK

BeitragSa, Feb 02, 2008 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, weil das "api_" vor dem Funktionsnamen nicht so in der DLL drin steht.
Mach es so:

Code: [AUSKLAPPEN]
.lib "kernel32.dll"
api_GetModuleFileName%( module%, filename*, chars% ) : "GetModuleFileNameA"

Im Quelltext schreibst du dann einfach "api_GetModuleFileName" ( ohne A ).
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

ungebildeter Neuling

BeitragSa, Feb 02, 2008 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, so funktionierts, vielen Dank Smile

hamZta

Administrator

BeitragSa, Feb 02, 2008 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Name des Programms wird eigentlich auch immer als erstes Start-Argument übergeben - warum also so komplizierte Wege einschlagen?
Blog.

Blitzcoder

Newsposter

BeitragSa, Feb 02, 2008 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
hamzta, ja, aber nicht bei bb. In CommandLine$() ist nur alles nach dem Dateinamen. Das geht so nur in Bmax über AppArgs[0], und natürlich in fast allen anderen Sprachen.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

hamZta

Administrator

BeitragSa, Feb 02, 2008 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh, das wusste ich nicht. Dann ziehe ich natürlich alles zurück Smile
Blog.

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group