![]() |
Hook Frage
Hallo!
Habe diese Frage schon in einem anderen Thread gestellt, möchte aber gerne einen eigenen erstellen, da ich zu diesem Thema nicht viel in Foren gefunden habe. Ist es eigentlich möglich, über einen Hook ein neues Fenster, oder ein zusätzliches Ausgabefeld in einer fremden Anwendung zu erstellen? Sozusagen die fremde Form zu erweitern. Wie erweitert z.B. dieses Tool ![]() mfg |
Re: Hook Frage
ja, es ist möglich. Dafür wird einfach der Funktionaufruf abgefangen welcher den Dialog erstellt und es werden bestimmte aufrufparameter angepasst etc.
Das erweitern funktioniert dann gleichermaßen wie es auch in eigenen Anwendungen funktioniert. |
Re: Hook Frage
Wenn ich jetzt z.B. GetOpenFileNameA Hooke funktioniert das auch:
Delphi-Quellcode:
Aber ich komm jetzt nicht drauf, wie ich etwas in dem Dialog selbst ändern könnte und darauf dann Zugriff hätte???
{...}
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall; begin result := GetOpenFileNameANext(OpenFile); MessageBoxA(0, 'Test', '', 0); end; {...} |
Re: Hook Frage
Das funktioniert auch soweit:
Delphi-Quellcode:
Ich hab jetzt in allen Dialogen zum Test den Filter auf "Alle Dateien|*.*" gesetzt. Ich müsste ja nun an dieser Stelle den aufgerufenen GetOpenFileNameA Dialog mit meinem ersetzen, nur wie ... :gruebel:
{...}
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall; var test: hwnd; begin OpenFile.lpstrFilter := PChar('Alle Dateien|*.*'); result := GetOpenFileNameANext(OpenFile); test := OpenFile.hWndOwner; MessageBoxA(0, Pchar(IntToStr(test)), 'Hooked...', 0); end; {...} |
Re: Hook Frage
Mein nächster Ansatz wäre folgender gewesen:
Delphi-Quellcode:
Also mit TWndClass eine eigene Fensterklasse erzeugen (Rest ist in einer zweiten Unit abgelegt) und
{...}
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall; var test: hwnd; begin OpenFile.lpstrFilter := PChar('Alle Dateien|*.*'); result := GetOpenFileNameANext(OpenFile); test := OpenFile.hWndOwner; MessageBoxA(0, Pchar(IntToStr(test)), 'Hooked...', 0); //neu wc.hInstance := OpenFile.hInstance; wc.hbrBackground := GetSysColorBrush(COLOR_3DFACE); wc.hCursor := LoadCursor(0, IDC_ARROW); RegisterClassEx(wc); CreateWindowEx(WS_EX_TOOLWINDOW, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU or WS_MINIMIZEBOX, Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), WindowWidth, WindowHeight, 0, 0, hInstance, nil); SetForegroundWindow(nhwnd); end; {...} wc.hInstance von OpenFile.hInstance nehmen. Aber das ganze funktioniert so überhaupt nicht... |
Re: Hook Frage
Und weiter gehts :shock:
Delphi-Quellcode:
Bei dieser Variante wird der OpenDialog nicht mehr aufgerufen und der Dateiname immer auf "C:\test.txt" gesetzt. Ich müsste jetzt wissen, wie ich nach dem "result := true" eine eigene Form erzeuge. Den neuen Dateinamen von meiner Form könnte ich dann ja an "OpenFile.lpstrFile" übergeben.
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall;
begin result := true; OpenFile.lpstrFile := pchar('C:\test.txt'); end; Von OpenFile bekomme ich ja auch den "hwndOwner" und die "hinstance"... :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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