Prozessname: Einfacheren Name des Prozesses erfassen?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von Tombi »

Da die Pbosl ja nicht will....

Habe momentan folgenden Code:

Code: Alles auswählen

Procedure.s GetWindowName(hwnd)
    Buffer.s = Space(1000)
    GetWindowText_(hwnd,@Buffer,1000)
    ProcedureReturn Buffer
EndProcedure
Funktioniert prima:

Code: Alles auswählen

Debug "FENSTER: "+GetWindowName(GetForegroundWindow_())

Nun ist mir aber immer aufgefallen, das der Name des Programmtitels ausgegeben wird.
Hier gerade würde es heißen bei Firefox:
"PureBoard Post a new topic - Mozilla Firefox"

Nun fände ich es aber schöner, wenn ich eine andere Ausgabe bekomme.
Hier wäre es schön, nur "Mozilla Firefox" oder "Firefox" zu erfassen.

Da kam mir die Idee, statt dem Programmtitel den Dateinamen zu erfassen.
Hier sollte es dann "firefox.exe" sein.

Nun meine Frage: Wie erfasse ich diesen Dateinamen eines Prozesses ohne Pbosl? ^^

MFG,
Tombi
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von RSBasic »

@Tombi
Du könntest den Pfad eines Fensters mit diesem Code ermitteln: http://www.rsbasic.de/index.php?option= ... &Itemid=59
Anschließend brauchst du nur den Namen der Datei mit GetFilePart() ermitteln.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von Tombi »

Funktioniert prima.
Danke dir =)
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von edel »

"Im nächsten Kapitel lesen Sie dann, wie Sie Speicherlecks erfolgreich verhindern können."

@RSBasic
Mal im Ernst, du solltest deine Schnipsel besser pruefen. Anfaenger wie
Tombi, kopieren den Code und wundern sich dann, wenn ihre Programme ueber 1GB Ram brauchen.
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von Tombi »

edel hat geschrieben:"Im nächsten Kapitel lesen Sie dann, wie Sie Speicherlecks erfolgreich verhindern können."

@RSBasic
Mal im Ernst, du solltest deine Schnipsel besser pruefen. Anfaenger wie
Tombi, kopieren den Code und wundern sich dann, wenn ihre Programme ueber 1GB Ram brauchen.
Schön das du es gerade erwähnst.
Hab mich gerade schon gewundert, warum die Auslagerungsdatei 4 GB anzeigt, statt nur ein paar MB :mrgreen:

Jemand einen besseren Vorschlag? ^^
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von Jilocasin »

Der Vorschlag ist gut, man müsste ihn nur auch "im Sinne des Erfinders" benutzen.

Ich hoffe mal das ist so etwas sicherer:

Code: Alles auswählen

Procedure.s GetProcessFilenameByWindowHandle(*hWnd)
  Protected ModuleEntry.MODULEENTRY32
    ModuleEntry\dwSize = SizeOf(MODULEENTRY32)
  
  Protected PID.l ; LPDWORD = pointer zu 32-bit unsigned integer, deshalb ".l" (Also bitte nicht stänkern von wegen ".i")
  Protected Result.s = ""
  
  GetWindowThreadProcessId_(*hWnd, @PID)
  If PID
    *hSnapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE, PID)
    If *hSnapshot <> #INVALID_HANDLE_VALUE
      If Module32First_(*hSnapshot, @ModuleEntry) = #True
        Result.s = PeekS(@ModuleEntry\szExePath)
      EndIf
      
      CloseHandle_(*hSnapshot)
    EndIf
  EndIf
  
  ProcedureReturn Result
EndProcedure

Debug GetProcessFilenameByWindowHandle(GetForegroundWindow_())
;Debug GetProcessFilenameByWindowHandle(FindWindow_(0, "Firefox ... oder irgendwas"))
Das anschließende GetFilePart() könnte man sich ersparen, wenn man statt "szExePath" "szModule" nimmt, das (soweit ich weiß) gleich nur den Dateinamen beinhaltet. :D
Bild
Tombi
Beiträge: 369
Registriert: 05.03.2008 22:05

Re: Prozessname: Einfacheren Name des Prozesses erfassen?

Beitrag von Tombi »

Funktioniert prima ;)

:bounce:
Bild Bild Bild
Intel Pentium 4 630 (3 GHZ)
Antworten