![]() |
Re: GetWindowModuleFileName gibt nichts zurück
GetModuleFilename funktioniert glaub ich nur wenn das handle zu deiner anwendung gehört, also du zum beispiel eine dll eingebunden hast. Wenn du an den dateinamen der Anwendung willst zu dem das Handle gehört musst du das anders machen.
[Edit]Hab grad mal die Suche bemüht und einen Beitrag gefunden den ich mal gepostet hab der genau das macht was du willst Hier der Link: ![]() [/Edit] |
Re: GetWindowModuleFileName gibt nichts zurück
Also, ich hab nun mal GetLastError zu meinen Überwachten "ausdrücken" hinzugefügt (funktionsaufrufe sind gestattet), und bin schritt für schritt durchgegangen, und GetLastError war *immer* 0
Da ist kein "fehler" da ... oder? :gruebel: :wiejetzt: :roll: @SirThornberry: Sollte dann da nicht zumindest ein Hinweis in der PSDK dazu stehen? Ich hab keinen gesehen ... |
Re: GetWindowModuleFileName gibt nichts zurück
Guck dir mal den ersten Parameter an:
Zitat:
Du müsstest also ![]() Enumerating All Modules For a Process To determine which processes have loaded a particular DLL, you must enumerate the modules for each process. The following sample code uses the ![]()
Code:
#include <windows.h>
#include <stdio.h> #include "psapi.h" void PrintModules( DWORD processID ) { HMODULE hMods[1024]; HANDLE hProcess; DWORD cbNeeded; unsigned int i; // Print the process identifier. printf( "\nProcess ID: %u\n", processID ); // Get a list of all the modules in this process. hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); if (NULL == hProcess) return; if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) { char szModName[MAX_PATH]; // Get the full path to the module's file. if ( GetModuleFileNameEx( hProcess, hMods[i], szModName, sizeof(szModName))) { // Print the module name and handle value. printf("\t%s (0x%08X)\n", szModName, hMods[i] ); } } } CloseHandle( hProcess ); } void main( ) { // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return; // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); // Print the name of the modules for each process. for ( i = 0; i < cProcesses; i++ ) PrintModules( aProcesses[i] ); } |
Re: GetWindowModuleFileName gibt nichts zurück
wenn du mal anstelle des notepadhandles das handle der eigenen Anwendung nimmst wirst du sehen das dein Beispiel funktioniert. Daraus hab ich das einfach mal vermutet das es daran liegt das es kein Handle ist das zur eigenen Anwendung gehört. Wenn du eine DLL in dein programm einbindest und in der dll dein source mit dem handle der hostanwendung ausführst sollte das auch funktionieren... naja, wie schon geschrieben hab ich den link zu funktionierendem source schon gepostet.
|
Re: GetWindowModuleFileName gibt nichts zurück
Zitat:
|
Re: GetWindowModuleFileName gibt nichts zurück
Zitat:
ok, da wohl niemand ne idee hat woran das liegen könnte ... muss ich wohl doch wieder zur längeren Methode greifen ... :-| ... trotzdem danke für eure Ratschläge, Tipps & Bemühungen! ciao, Philipp [edit]man seid ihr schnell ... ich wollte es schon aufgeben (hab die letzen posts nimmer gesehen) ... ^^ ... ok, danke[/edit] |
Re: GetWindowModuleFileName gibt nichts zurück
Hab mal schnell den Code rausgesucht den ich in meinem X-Spy verwend und bissi angepasst...
Delphi-Quellcode:
@w3seek: jain.. es ist ein Module-Handle.. das PSDK sagt dazu:
function GetWindowModule(Window: HWND): String;
var dwProcessID : DWord; Process : hProcess; Module : hModule; Path : array [0..MAX_PATH] of Char; begin GetWindowThreadProcessID(Window, @dwProcessID); Module := GetClassLong(Window, GCL_HMODULE); if (Module = 0) and (GetLastError <> 0) then Result := '(Unavailable)'; else begin Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, dwProcessID); if Process <> 0 then begin if GetModuleFileNameEx(Process, Module, Path, MAX_PATH) > 0 then begin GetLongPathName(Path, Path, MAX_PATH); Result := String(Path) end else Result := '(Unavailable)'; CloseHandle(Process); end else Result := '(Unavailable)'; end; end; Zitat:
|
Re: GetWindowModuleFileName gibt nichts zurück
es ist definitv kein handle :P weder ein user/gdi object, noch ein kernel handle. es ist einfach ein pointer zur base adresse des moduls. nichts mehr und nichts weniger ;)
|
Re: GetWindowModuleFileName gibt nichts zurück
bei mir geht das so:
Code:
var
lProcessID: dWord; lHandle: THandle; begin GetWindowThreadProcessId(WindowHandle, @lProcessID); SetLength(Buffer, MAX_PATH); lHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, True, lProcessID); if GetModuleFileNameEx(lHandle, 0, PChar(Buffer), MAX_PATH) > 0 then SetLength(Buffer, StrLen(PChar(Buffer))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz