AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WndProc bei Programmen im Hintergrund

WndProc bei Programmen im Hintergrund

Ein Thema von UliBru · begonnen am 4. Jul 2013 · letzter Beitrag vom 8. Jul 2013
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 02:22
RegisterWindowMessageA('MYSHELLHOOK'); 'MYSHELLHOOK' ist auch nicht so toll. Da gibt es bestimmt einige. Nimm eine GUID und du bist auf der sicheren Seite.

Ich würde noch prüfen, ob RegisterShellHookWindow nicht fehl geschlagen ist.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 8. Jul 2013 um 02:25 Uhr)
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 07:24
Nimm eine GUID und du bist auf der sicheren Seite.

Ich würde noch prüfen, ob RegisterShellHookWindow nicht fehl geschlagen ist.
Danke. Mit GUID bin ich einverstanden.

Müsste denn ein optimierter Code nicht in etwa so aussehen?
Delphi-Quellcode:
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if shellHookWindowRegisteredSuccessfully then
    DeregisterShellHookWindow(Handle);
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  ShellHookMessage := RegisterWindowMessageA(myGUID);
  if ShellHookMessage <> 0 then
    shellHookWindowRegisteredSuccessfully := RegisterShellHookWindow(Handle);
  if not shellHookWindowRegisteredSuccessfully then
    MachIrgendeineFehlerbehandlung;
end;
Ansonsten, wenn RegisterShellHookWindow fehlschlägt, dann findet ja schlichtweg das WndProc mit Message.Msg = ShellHookMessage nicht statt. MachIrgendeineFehlerbehandlung dient dann nur dazu, den Anwender gezielt zu informieren.

Eine generelle Frage, vermutlich einen eigenen Thread wert: man findet x Beispiele, welche die Funktionsergebnisse von API-Aufrufen nicht auswerten. Was ist besser: trotzdem auswerten und das Programm mit Fehlerauswertungen aufblähen oder doch auch ab und zu das Ignorieren von Funktionsergebnissen zulassen? Klar ist, dass das erstere das sicherere Verfahren ist.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#3

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 07:54
Was ist besser: trotzdem auswerten und das Programm mit Fehlerauswertungen aufblähen oder doch auch ab und zu das Ignorieren von Funktionsergebnissen zulassen?
Es geht ja nicht in erster Linie um Fehlermeldungen, sondern darum, dass man ggf. mit einer Funktionsrückgabe (z.B. einem Handle) weiterarbeitet. Da wäre es doch sinnvoll, erst zu prüfen, ob diese Daten auch gültig sind. Was man im Fehlerfall tut, hängt ja vom Einzelfall ab, evtl. kann man das auch kaltlächelnd ignorieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 08:06


Das Handle in RegisterShellHookWindow(Handle) ist kein Rückgabewert sondern ein Eingabewert, hier also das Handle des Programms (ich glaube Self.Handle wäre in diesem Fall dasselbe). Der Rückgabewert der API-Funktion ist boolean und zeigt lediglich an, dass die Registrierung erfolgreich war.
Siehe auch http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Der eigentlich verwendete Rückgabewert ist im gegebenen Fall die Variable ShellHookMessage, die in WndProc verwendet wird.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#5

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 08:13
Erst kündigst Du eine generelle Frage an, und dann beziehst Du Dich doch auf das spezifische Problem?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
UliBru

Registriert seit: 10. Mai 2010
155 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 08:40
Sorry, hab das mit dem 'Handle' missverstanden und insofern wieder auf die Ausgangsfrage bezogen.

Meine Frage hinsichtlich sorgfältiger Überprüfung von Funktionsergebnissen könnte man insofern auch splitten hinsichtlich
- Rückgabewerte, welche als Ergebniswerte weiterverwendet werden. So z.B. ein zurückgegebenes Handle (Beispiel CreateFileMapping)
- Rückgabewerte, welche anzeigen, dass der Funktionsaufruf ordnungsgemäß ablief oder nicht, also boolean oder Fehlerkonstanten/-listen (mir fällt spontan z.B. TASIOError ein)

Im ersteren Fall wäre eine Fehlerauswertung vermutlich immer sinnvoll, im letzteren scheint dagegen häufiger darauf verzichtet zu werden.
Er wollte so richtig in Delphi einsteigen. Nun steckt er ganz tief drin ...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#7

AW: WndProc bei Programmen im Hintergrund

  Alt 8. Jul 2013, 08:48
Es kommt eben auf den spezifischen Einzelfall an. Wenn ich z.B. mit GetWindowThreadProcessId die ProzessId ermitteln möchte, ist mir die Rückgabe (also die ThreadId) wurscht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:13 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