AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wo ist hier der (Denk-)Fehler? Aufruf von EnumWindowsProc
Thema durchsuchen
Ansicht
Themen-Optionen

Wo ist hier der (Denk-)Fehler? Aufruf von EnumWindowsProc

Ein Thema von ustra · begonnen am 5. Feb 2004 · letzter Beitrag vom 6. Feb 2004
Antwort Antwort
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

Re: Wo ist hier der (Denk-)Fehler? Aufruf von EnumWindowsPro

  Alt 5. Feb 2004, 23:02
Hallo Ustra,

falls Du es doch noch schön objectorientiert machen möchtest, und somit auch auf alle Methoden des Objectes zugreifen kannst. Hier nochmal die Lösung

viele Grüße
stoxx

Code:
unit Unit2;

interface

type Tmyclass = class;

    private
        enumpointer : Pointer;
        function EnumWinProc(WinHandle: HWND; lParam: LPARAM): boolean; StdCall;
    public

        constructor create; virtual;
        destructor destroy; override;
        procedure aufruf;

    end; // von Tmyclass

implementation



function MakeProcInstance(M: TMethod): Pointer;
begin
  // allocate memory
  GetMem(Result, 15);
  asm
    // MOV ECX,
    MOV BYTE PTR [EAX], $B9
    MOV ECX, M.Data
    MOV DWORD PTR [EAX+$1], ECX
    // POP EDX
    MOV BYTE PTR [EAX+$5], $5A
    // PUSH ECX
    MOV BYTE PTR [EAX+$6], $51 
    // PUSH EDX
    MOV BYTE PTR [EAX+$7], $52
    // MOV ECX,
    MOV BYTE PTR [EAX+$8], $B9 
    MOV ECX, M.Code
    MOV DWORD PTR [EAX+$9], ECX
    // JMP ECX
    MOV BYTE PTR [EAX+$D], $FF
    MOV BYTE PTR [EAX+$E], $E1
  end;
end;

//////////////////////////////////////////////////////////////////////////////////

procedure FreeProcInstance(ProcInstance: Pointer);
begin
  // free memory
  FreeMem(ProcInstance, 15);
end;

//////////////////////////////////////////////////////////////////////////////////

constructor Tmyclass.create;
var t : Tmethod;
begin
inherited create;
 t.Code := @Tmyclass.enumwinproc;
 t.Data := self;
 enumpointer := makeProcInstance(t);
end;   // von create

//////////////////////////////////////////////////////////////////////////////////

destructor Tmyclass.destroy;
begin
 FreeProcInstance(enumPointer); // aufräumen
 inherited destroy;
end; /// von free

//////////////////////////////////////////////////////////////////////////////////


function Tmyclass.EnumWinProc(WinHandle: HWND; lParam: LPARAM): boolean; StdCall;
begin

  ... Code

end;   // von enumwindowsprocedure




//////////////////////////////////////////////////////////////////////////////////

  // Aufruf //
procedure Tmyclass.aufruf;
begin
 EnumWindows(enumpointer,0);
end;

end.
  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 04:29 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