AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinden?
Thema durchsuchen
Ansicht
Themen-Optionen

DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinden?

Ein Thema von Delphi-Laie · begonnen am 11. Mär 2010 · letzter Beitrag vom 1. Dez 2013
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Re: DLL-Funktionen in Lazarus/FP einbindbar / wie einzubinde

  Alt 21. Mär 2010, 18:21
Tausend Dank für Euer Engagement!

Nun, die Sache ließ mir keine Ruhe. Hier das vorläufige Ergebnis:
Ich benutze die beiden Funktionen (die erste stammt weitgehend von Luckie(s Programm „WinInfo“)) zur Ermittlung des Exe-Dateinamens eines Vordergrundfensters:

Delphi-Quellcode:
  function GetExeStringFromProcID_Processsnapshot(PID:DWORD):string;
  var hProcSnap:THandle;
  pe32:TProcessEntry32;
  begin
  hProcSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap<>INVALID_HANDLE_VALUE then
    begin
    pe32.dwSize:=SizeOf(TProcessEntry32);
    if Process32First(hProcSnap,pe32) then
      begin
      if pe32.th32ProcessID=PID then
        begin
        result:=ExtractFileName(pe32.szExeFile);//ohne Extraktion wird unter ME (jedes 9.x?) der gesamte Pfad zurückgeliefert
        CloseHandle(hProcSnap);
        exit
        end;
      while Process32Next(hProcSnap,pe32)do if pe32.th32ProcessID=PID then
        begin
        result:=ExtractFileName(pe32.szExeFile);
        break
        end
      end;
    CloseHandle(hProcSnap)
    end;
  end;
und (Luckies obige Funktion diente auch hier als Vorlage)

Delphi-Quellcode:
  function GetExeStringFromProcID_Modulsnapshot(PID:DWORD):string; //stdcall;
  var hModuleSnap:THandle;
  me:TModuleEntry32;
  begin
  hModuleSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);
  if hModuleSnap<>INVALID_HANDLE_VALUE then
    begin
    me.dwSize:=SizeOf(TModuleEntry32);
    if Module32First(hModuleSnap,me) then
      begin
      if uppercase(ExtractFileExt(me.szExePath))='.EXEthen
        begin
        result:=ExtractFileName(me.szExePath);
        CloseHandle(hModuleSnap);
        exit
        end;
      while Module32Next(hModuleSnap,me) do if lowercase(ExtractFileExt(me.szExePath))='.exethen
        begin
        result:=ExtractFileName(me.szExePath);
        break
        end
      end;
    CloseHandle(hModuleSnap)
    end
  end;
Benutze ich die unit „jwatlhelp32“, scheinen sie überhaupt nicht zu funktionieren. In erster Funktion sind alle „32.th32ProcessID“ gleich 0, was natürlich falsch ist (nur der Systemprozeß hat die Nr. 0). Die „me.szExePath“ liefern verstümelte Resultate, z.B. „er.exe“ beim „explorer.exe“ oder „rus.exe“ bei „lazarus.exe“.

Unter Windows 32 Bit, mit Lazarus 32 Bit compiliert, funktioniert aber alles tadellos! Die Funktion „CreateToolHelp32SnapShot“ funktioniert allerdings auch in der 32-Bit-Version unter Windows 64 Bit, wie ich anhand meines Programmes „Prozesse“ (auch hier im Forum abgelegt) feststellen konnte.

Setze ich Lazarus (64 Bit) die unit „tlhelp32“ von Delphi 2.0 vor, scheint jetzt wenigstens der Modulschnappschuß zu funktionieren (weiß nicht, ob ich vorhin die gleiche Unit oder doch „jwatlhelp32“ benutzte, der Prozeßschnappschuß immer noch nicht. Jedenfalls sind die Ergebnisse völlig inkonsistent, so daß ich allmählich einen Fehler im Free-Pascal-Compiler vermute.

Alles Rumgemache, die Variablentypen „DWORD“ und auch „THandle“ mit „Int64“ auszutauschen, auch, einen „Int64“, auch als Konstante schon an die Funktionen zu übergeben, brachten leider auch keinen Erfolg.

Zum Glück funktioneren die Hooks unter Windows 64 Bit. Diese Hooks sind allerdings der Grund, daß ich kein 32-Bit-Compilat unter Windows 64 Bit benutzen 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 13:52 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