AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Minimize einer anderen Application blocken
Thema durchsuchen
Ansicht
Themen-Optionen

Minimize einer anderen Application blocken

Ein Thema von Shrek_III · begonnen am 19. Dez 2004 · letzter Beitrag vom 19. Dez 2004
Antwort Antwort
Shrek_III

Registriert seit: 15. Dez 2004
Ort: Handewitt
25 Beiträge
 
Delphi XE5 Enterprise
 
#1

Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 00:23
So, ich hab jetzt schon seit fast zwei Tagen vergeblich gesucht und wohl einfach nicht die richtigen Schlagworte gefunden - könnte natürlich evtl. auch sein, daß das Thema hier bisher noch nicht bearbeitet wurde...

Ausgangssituation:

Eine selbstgeschriebene Delphi-Applikation soll das automatische Minimize eines anderen Programms (Diablo II) unterdrücken. Für alle, die es nicht kennen: Diablo II im Fenstermodus [ -w ] gestartet minimiert sich sofort, wenn es nicht mehr den Fokus besitzt und verschwindet damit in die Taskleiste. Dieses Verhalten möchte ich aus meinem Programm heraus unterbinden, handle, ProcessID oder ähnliches von D2 zu bekommen ist kein Problem, aber das Minimieren zu verhindern habe ich bisher nicht hinbekommen.


eigene Lage:
Windows 2000
Delphi 2005 - Architekt (was aber wohl denke ich mal egal sein dürfte)


Feindlage:
Diablo II (auf DirectX basierend <- vielleicht gibt das ja nochmal einen Hinweis)


Auftrag:
Schalten Sie das automatische Minimize ab.


Unterstützung:
Hoffentlich aus dem Forum - auch wenn dies mein 1st Post ist.


Melde mich ab
So long fellas

Shrek_III
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#2

Re: Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 00:29
Zitat von Shrek_III:
Diablo II im Fenstermodus [ -w ] gestartet minimiert sich sofort, wenn es nicht mehr den Fokus besitzt und verschwindet damit in die Taskleiste.
Fenster subclassen und WM_KILLFOCUS abfangen.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Shrek_III

Registriert seit: 15. Dez 2004
Ort: Handewitt
25 Beiträge
 
Delphi XE5 Enterprise
 
#3

Re: Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 11:59
Auch wenn ich es gerne so hätte, aber ich glaube, daß dem Problemchen nicht so einfach beizukommen ist...

Zitat:
GWL_WNDPROC
Sets a new address for the window procedure.

Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.
MSDN-Library durchsuchenSetWindowLong

Also habe ich auch mit meinem Code
Code:
function EditD2Window (hD2Win, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
var
  messagefound : boolean;
begin
  messagefound := false;
  CASE uMsg of
    WM_KILLFOCUS: begin
                    messagefound := true;
                  end;
  end;
  if messagefound = false then Result := CallWindowProc(@OldWinProc,hD2Win,uMsg,wParam,lParam)
  else result := 0;
end;


...
begin
  ...
  OldWinProc := SetWindowLong (GeneralD2Handle, GWL_WNDPROC, Integer (@EditD2Window));
end;
wenig Chancen.


oder mache ich da grundsätzlich etwas falsch?!?
So long fellas

Shrek_III
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 13:15
Zitat von Shrek_III:
Zitat:
GWL_WNDPROC
Sets a new address for the window procedure.

Windows NT/2000/XP: You cannot change this attribute if the window does not belong to the same process as the calling thread.
MSDN-Library durchsuchenSetWindowLong

Also habe ich auch mit meinem Code wenig Chancen.
Also wenn das nur für dich sein soll, dann erstelle eine DLL mit der SubClass Routine und injiziere diese mit den Funktionen die bei Madshi's madCollection mit dabei sind. Das ist der einfachste Weg.


Edit: Oder versuche mit SetWindowsHookEx die Windows Message abzufangen.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Shrek_III

Registriert seit: 15. Dez 2004
Ort: Handewitt
25 Beiträge
 
Delphi XE5 Enterprise
 
#5

Re: Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 16:35
Hallo,
erstmal nochmals Danke für Deine Antwort, ich versuche es zunächst mit dem SetWindowsHookEx.

Beim Stöbern in diesem Forum habe ich da auch einen Beitrag von Dir gefunden...

Code zum Thema abfangen von WM_CLOSE bzw. WM_QUIT


daraus habe ich dann folgendes gemacht:

Code:
 

function EditD2Window (Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  Msg: PMsg;
begin

  if Code = HC_ACTION then
  begin
    Msg := PMsg(lParam);
    if Msg^.message = WM_KILLFOCUS then
    begin
      Msg^.message := WM_COMMAND;
      Msg.wParam := WM_NULL;
      Msg.lParam := 0;
      Result := 1;
      Exit;
    end;

  end;

  Result := CallNextHookEx(MsgHook, Code, wParam, lParam);
end;



begin
...
  ProcId := GetWindowThreadProcessId (GeneralD2Handle, ProcId);
  MsgHook := SetWindowsHookEx (WH_GETMESSAGE, @EditD2Window, 0, ProcId);
...
end;
wobei GeneralD2Handle definitiv das richtige Handle und ProcId die richtige ProzessId zu meinem D2-Fenster ist.

Funktionieren will das Ganze aber dennoch nicht - irgendwelche Verbesserungsvorschläge?
So long fellas

Shrek_III
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Minimize einer anderen Application blocken

  Alt 19. Dez 2004, 21:47
Zitat von Shrek_III:
Beim Stöbern in diesem Forum habe ich da auch einen Beitrag von Dir gefunden...
Das Beispiel war auf die eigene Anwendung bezogen.

Zitat:
Funktionieren will das Ganze aber dennoch nicht - irgendwelche Verbesserungsvorschläge?
Egal ob du dich für's Subclassen oder für einen Hook entscheiden tust, das erstellen einer DLL bleibt dir wohl nicht erspart.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  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 14:24 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