AGB  ·  Datenschutz  ·  Impressum  







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

Hook Frage

Ein Thema von core · begonnen am 17. Mai 2007 · letzter Beitrag vom 17. Mai 2007
Antwort Antwort
core

Registriert seit: 26. Dez 2003
Ort: Wadgassen
29 Beiträge
 
#1

Hook Frage

  Alt 17. Mai 2007, 14:26
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 EazyFolder den standard Öffnen- und Speicherndialog??

mfg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Hook Frage

  Alt 17. Mai 2007, 14:31
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
core

Registriert seit: 26. Dez 2003
Ort: Wadgassen
29 Beiträge
 
#3

Re: Hook Frage

  Alt 17. Mai 2007, 15:48
Wenn ich jetzt z.B. GetOpenFileNameA Hooke funktioniert das auch:

Delphi-Quellcode:
{...}
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall;
begin
  result := GetOpenFileNameANext(OpenFile);
  MessageBoxA(0, 'Test', '', 0);
end;
{...}
Aber ich komm jetzt nicht drauf, wie ich etwas in dem Dialog selbst ändern könnte und darauf dann Zugriff hätte???
  Mit Zitat antworten Zitat
core

Registriert seit: 26. Dez 2003
Ort: Wadgassen
29 Beiträge
 
#4

Re: Hook Frage

  Alt 17. Mai 2007, 16:21
Das funktioniert auch soweit:

Delphi-Quellcode:
{...}
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;
{...}
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 ...
  Mit Zitat antworten Zitat
core

Registriert seit: 26. Dez 2003
Ort: Wadgassen
29 Beiträge
 
#5

Re: Hook Frage

  Alt 17. Mai 2007, 16:40
Mein nächster Ansatz wäre folgender gewesen:

Delphi-Quellcode:
{...}
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;
{...}
Also mit TWndClass eine eigene Fensterklasse erzeugen (Rest ist in einer zweiten Unit abgelegt) und
wc.hInstance von OpenFile.hInstance nehmen. Aber das ganze funktioniert so überhaupt nicht...
  Mit Zitat antworten Zitat
core

Registriert seit: 26. Dez 2003
Ort: Wadgassen
29 Beiträge
 
#6

Re: Hook Frage

  Alt 17. Mai 2007, 17:39
Und weiter gehts

Delphi-Quellcode:
function GetOpenFileNameACallback(var OpenFile: TOpenFilenameA): Bool; stdcall;
begin
  result := true;

  OpenFile.lpstrFile := pchar('C:\test.txt');
end;
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.
Von OpenFile bekomme ich ja auch den "hwndOwner" und die "hinstance"...
  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 06:35 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