AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetModuleHandle / hInstance

Ein Thema von bayo · begonnen am 23. Aug 2003 · letzter Beitrag vom 23. Aug 2003
Antwort Antwort
bayo

Registriert seit: 19. Aug 2003
Ort: ch
15 Beiträge
 
Delphi 5 Enterprise
 
#1

GetModuleHandle / hInstance

  Alt 23. Aug 2003, 20:47
Hallo zusammen...

ähm.. irgendwie stehe ich schon wieder an

Ich möchte an die WNDCLASS-Struktur der Klasse eines bestimmten Fensters kommen, das sicht nicht in meiner Anwendung befindet! Die funktion GetClassInfo erwartet als Parameter das Handle zu dem Module / Instanz, das die Klasse erzeugte (hInstance). Die einzige Möglichkeit, die ich gefunden habe, um an ein soches Handle zu kommen, ist die funktion GetModuleHandle!? Das ist auch schon meine erste Frage.. gibt es evtl eine andere Möglichkeit an dieses handle zu kommen? Die Funktion GetModuleHandle erwartet wiederum als Parameter den Modul Name, den ich folgendermassen erhalte:

Delphi-Quellcode:
  function GetModuleName(wndHandle: THandle): String;
  var
    winVersion: TOSVersionInfo;
    hProcess: THandle;
    processId: Cardinal;
    processEntry32: TProcessEntry32;
    b: Boolean;
  begin
    Result := '';
    winVersion.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
    GetVersionEx(winVersion);
    GetWindowThreadProcessId(wndHandle, @processId);
    if(winVersion.dwPlatformId = VER_PLATFORM_WIN32_NT) then begin
      hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, processId);
      if not (hProcess = INVALID_HANDLE_VALUE) then begin
        try
          SetLength(Result, 400);
          SetLength(Result, GetModuleFileNameEx(hProcess, 0, PChar(Result), Length(Result)));
        finally
          CloseHandle(hProcess);
        end;
      end;
    end else begin
      hProcess := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      if not (hProcess = INVALID_HANDLE_VALUE) then begin
        try
          processEntry32.dwSize := SizeOf(processEntry32);
          b := Process32First(hProcess, processEntry32);
          while b do begin
            if processEntry32.th32ProcessID = processId then begin
              result := String(processEntry32.szExeFile);
              Break;
            end;
            b := Process32Next(hProcess, processEntry32);
          end;
        finally
          CloseHandle(hProcess);
        end;
      end;
    end;
  end;
Wenn sich das Fenster in meiner Anwendung befindet funktioniert das auch! GetModuleHandle gibt mir mit dem ModuleName das selbe Handle zurück, wie die Konstance hInstance! Wenn sich das Fenster aber nicht in meiner Anwendung befindet, gibt GetModuleHandle 0 zurück, der ModuleName stimmt aber! Auf Msdn.com habe ich folgenden Text gefunden:

Zitat:
The GetModuleHandle function retrieves a module handle for the specified module if the file has been mapped into the address space of the calling process.
Ich denke, dass es nicht funktioniert, weil die Datei nicht in meinem Process "gemappt" ist aber... ich weiss nicht, wie ich das machen kann!?

Hat jemand von euch evtl. schon mal so etwas gemacht!

Vielen Dank für eure Hilfe und Grüsse.. Dominic
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: GetModuleHandle / hInstance

  Alt 23. Aug 2003, 21:01
Versuch mal GetWindowLong mit dem Flag GWL_HINSTANCE.

Nachtrag: Der Pfad eines Moduls ist nur innerhalb eines Prozesses eindeutig. Die Funktion parst durch die Speicherseiten und versucht zu ermitteln wo das Modul gemappt ist. Außerdem erscheint das logisch, wenn man sich vorstellt, daß WinWord.EXE auch 99 mal laufen kann ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz