Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Handle auf Vista unter XP nicht gefunden (https://www.delphipraxis.net/114754-handle-auf-vista-unter-xp-nicht-gefunden.html)

TonyR 30. Mai 2008 17:26


Handle auf Vista unter XP nicht gefunden
 
Hi Leute,

Ich hoffe, dass ist keine dumme Anfängerfrage aber ich schließe ein Fenster mit folgendem Code:
Delphi-Quellcode:
procedure TForm1.button1click(Sender: TObject);
var h: Thandle;
begin
h:=Findwindow(nil,'Fenstername');
if h<>0 then
  PostMessage(h, WM_SYSCOMMAND, SC_CLOSE, 0);
end;
Ein und dasselbe Fenster mit ein und demselben Code/Programm funktioniert auf Vista einwandfrei, jedoch auf dem XP Home System meines Vaters nicht.
Es scheitert übrigens am finden des Handles, also das PostMessage wird auf jenem XP System gar nicht ausgeführt.
Ich habe das Programm mit Delphi 6 unter Vista kompiliert.

Danke schonmal für eure Hilfe.

DeddyH 30. Mai 2008 17:38

Re: Handle auf Vista unter XP nicht gefunden
 
Versuch es mal mit WinSpy, irgendeinen Grund muss es ja haben, dass das Fenster nicht gefunden wird.

SirThornberry 30. Mai 2008 17:48

Re: Handle auf Vista unter XP nicht gefunden
 
Ist das Fenster eventuell minimiert? Vielleicht existiert es ja zu dem Zeitpunkt wirklich nicht (Die Klasse zwar schon aber da eventuell noch nichts angezeigt wurde das Fenster eben nicht).

erich.wanker 30. Mai 2008 17:49

Re: Handle auf Vista unter XP nicht gefunden
 
in deiner Unit steht ja:

Code:
type
  TForm1 = class(TForm)
...

var
  Form1: TForm1;

...ich würde da reinschreiben:


Code:
type
  TMein_Programm = class(TForm)
...

var
  Mein_Programm : TMein_Programm ;

und finden kannst dann das Fenster mit:

Code:
FindWindow('TMein_Programm ', nil)

TonyR 30. Mai 2008 17:53

Re: Handle auf Vista unter XP nicht gefunden
 
Ich will ja ein externes Fenster schließen .....

Das Fenster ist vom BorderStyle ein Dialog.
Wenn ich paar mal auf den Button klick oder Periodisch erneut nach dem fenster Suche (es öffnet sich in den Vordergrund, wie ein Popup) passiert ja auch nichts,
wie gesagt auf meinem Vista funktionierts ...

PS: Wie muss man Win-Spy benutzen?

DeddyH 30. Mai 2008 18:02

Re: Handle auf Vista unter XP nicht gefunden
 
Zitat:

Zitat von TonyR
PS: Wie muss man Win-Spy benutzen?

Starten, "Fokus folgen" und das Fenster anklicken. Anschließend kannst Du über "Tools - Code Generator" den entsprechenden Delphi-Code generieren lassen.

erich.wanker 30. Mai 2008 18:06

Re: Handle auf Vista unter XP nicht gefunden
 
..vieleicht hab ich dich mißverstanden..

Wenn das Fenster ein´s von deinen ist.. dann lieg ich mit meiner Antwort richtig... ;-)

Wenn das Fenster von einer anderen Anwendung (Word, Excel Acrobat ect..) ist,
dann würd ich, wenn das Fenster den Focus hat:


Code:
var
SelfId : DWord;
ThreadId: DWord;
Attached: Boolean;
Fokus : HWnd;

begin


SelfId := GetCurrentThreadId;
ThreadId := GetWindowThreadProcessId(GetForegroundWindow, nil);

Attached := False;
if (ThreadId <> 0) and (ThreadId <> SelfId) then
Attached := AttachThreadInput(SelfId, ThreadId, True);

if Attached xor (ThreadId = SelfId) then
try
Fokus := GetFocus;
SendMessage(Fokus, WM_WassAuchImmer...



Wenn das Fenster von einer anderen Anwendung (Word, Excel Acrobat ect..) ist,
dann würd ich, wenn das Fenster NICHT den Focus hat:


Code:
function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
     NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;








(c) by diversen Newsgroupusern ...


HTH

Erich

Helmi 30. Mai 2008 18:07

Re: Handle auf Vista unter XP nicht gefunden
 
Hallo,

ich will ja niemanden für dumm verkaufen, aber vielleicht
gibt es unter XP das Fenster mit dem im Code angegebenen
Caption-Text einfach nicht.



vorsichtshalber mal in Deckung geh :mrgreen:

TonyR 30. Mai 2008 19:34

Re: Handle auf Vista unter XP nicht gefunden
 
Helmi :lol:

Hi Erich, also danke für deine Mühe, ich probier's nochmal mit dem Durchsehen aller Windows (deine zweite Variante) ...

Und seh mir mal WinSpy an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 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