![]() |
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:
Ein und dasselbe Fenster mit ein und demselben Code/Programm funktioniert auf Vista einwandfrei, jedoch auf dem XP Home System meines Vaters nicht.
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; 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. |
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.
|
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).
|
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)
|
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? |
Re: Handle auf Vista unter XP nicht gefunden
Zitat:
|
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 |
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: |
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