AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zurück
Thema durchsuchen
Ansicht
Themen-Optionen

GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zurück

Ein Thema von LokutusvB · begonnen am 11. Aug 2009 · letzter Beitrag vom 15. Aug 2009
Antwort Antwort
Seite 1 von 3  1 23      
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#1

GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zurück

  Alt 11. Aug 2009, 13:43
Hallo,

und schon wieder ein anderes Problem.

Ich benötige die Position eines Fensters, um es ein wenig auf dem Desktop zu verschieben. Aber egal, was ich anstelle, ich komme als Position immer "0" zurück. Das handle der externen Anwendung stimmt, daran kann es nicht liegen. Kann die fremde Anwendung das irgendwie verhindern, das ich die Position nicht festellen und verändern kann?

Ich habe folgendes probiert:
Delphi-Quellcode:
// Position auslesen und ändern
tw1Plct.length := SizeOf(tWindowPlacement);
if GetWindowPlacement(twhandle, @tw1Plct) then begin
 //ShowMessage('Links: ' + IntToStr(tw1Plct.rcNormalPosition.Left));
 //ShowMessage('Oben: ' + IntToStr(tw1Plct.rcNormalPosition.Top));
 //ShowMessage(IntToStr(tw1Plct.ptMinPosition.y));
 tw1Plct.rcNormalPosition.Left := tw1Plct.rcNormalPosition.Left + 50;
 tw1Plct.rcNormalPosition.Left := tw1Plct.rcNormalPosition.Top + 50;
 SetWindowPlacement(twH1, @tw1Plct);
end;
Selbst das geht nicht:
GetWindowRect(twhandle , tw1Rect); für tw1Rect.left top right usw. bekomme ich ständig eine 0. Woran kann das liegen?
MFG
LokutusvB
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 13:54
Woher weißt du, dass das Handle für das Fenster stimmt? Und was sagt MSDN-Library durchsuchenGetLastError:
Zitat:
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#3

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 14:01
GetLastError sagt nix, daran habe ich auch schon gedacht und probiert. Ein Fehler wird hier nicht "geworfen".

Das das Handle stimmt, zeigt mir der Rest meiner Anwendung, ich kann das Fenster z.B. in den Vordergrund setzen, Abfragen ob es im Vordergrund ist und wieder suchen lassen. Zumindest gehe ich so davon aus, daß das Handle stimmt. Deswegen bin ich hier jetzt auch total ratlos .
MFG
LokutusvB
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 14:07
Was heißt "ein Fehler wird nicht geworfen"? Die Funktion gibt einen Fehlerwert zurück, da wird nichts "geworfen". Wie ist denn der Rückgabewert von der Funktion?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#5

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 14:13
Ich habe folgendes probiert:
Delphi-Quellcode:
if GetWindowPlacement(twHandle, @tw1Plct) then begin
  //ShowMessage('Links: ' + IntToStr(tw1Plct.rcNormalPosition.Left));
  //ShowMessage('Oben: ' + IntToStr(tw1Plct.rcNormalPosition.Top));
  //ShowMessage(IntToStr(tw1Plct.ptMinPosition.y));
  tw1Plct.rcNormalPosition.Left := tw1Plct.rcNormalPosition.Left + 50;
  tw1Plct.rcNormalPosition.Left := tw1Plct.rcNormalPosition.Top + 50;
  SetWindowPlacement(twHandle, @tw1Plct);
end else GetLastError;
Oder ist das verkehrt? Und hier wurde nichts angezeigt, keine Fehlermeldung.
MFG
LokutusvB
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 14:16
Hmpf, debug dochmal richtig. Geht er denn in den if-Zweig auch rein? Und GetlastError ist eine Funktion die den letzten gesetzten Fehlercode zurückgibt, wenn du den nicht auswertest, wir dir da wohl auch nichts angezeigt werden können:
SysErrorMessage(GetLastError);
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#7

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 14:21
Ja, deswegen sind dort auch die ShowMessages auskommentiert, die habe ich schon zu Debug-zwecken genutzt.
Führe ich direkt nach dem SetWindowPlacement(twHandle, @tw1Plct); ein SysErrorMessage(GetLastError); aus, wird nichts angezeigt, kein Fehler. Was könnte ich noch prüfen?
MFG
LokutusvB
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 11. Aug 2009, 22:55
Eventuell, um auch den unwahrscheinlichen Fall noch auszuschließen, dass da immer noch irgendwo ein kleines Mißverständnis vorliegt: Ein SysErrorMessage(GetLastError) so ganz allein kann sich auch gar nicht bemerkbar machen, weil es nämlich nur die Rückgabe eines Strings ist. Ganz richtig müsste es also so heißen (natürlich):

Delphi-Quellcode:
if GetWindowPlacement(AHandle, @AWindowPlacement) then
begin
.
.
.
end
else showMessage(SysErrorMessage(GetLastError));
So würde dir u.a. dann auch angezeigt werden, wenn die übergebene Handle-Variable keine gültige Handle beinhaltet.
  Mit Zitat antworten Zitat
LokutusvB

Registriert seit: 18. Jul 2006
277 Beiträge
 
Delphi XE6 Enterprise
 
#9

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 12. Aug 2009, 08:24
Stimmt, habe ich ganz übersehen.

Das Problem bleibt trotzdem .

Jetzt sagt er mir nach dem SetWindowsplacement im True-Fall in der If-Anweisung, daß der Vorgang erfolgreich beendet wurde. Wieso sind dann die Punkte immer noch 0 bzw. Min / Max -1?
MFG
LokutusvB
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: GetWindowPlacement/GetWindowRect gibt als Pos immer 0 zu

  Alt 12. Aug 2009, 09:21
hast Du event. mehr Handles und hier nur das falsche genommen?

Außerdem, die PSDK erzählt bzgl. dieser Api-Funktionen immer von einem Rückgabewert =0 oder >0 und nichts von True oder False. Unter Umständen könnte hier ein Wert von z.B. 40 o. 5341009 nicht korrekt als True interpretiert werden. Das ist jetzt zwar einen reine Spekulation meinerseits aber in so einer Situation muss man eben einfach mal alles überhaupt nur mögliche kurz auschecken. Also anstatt

if GetWindowPlacement(HNotePad, @AWindowPlacement) then...

prüf doch auch mal auf

if integer(GetWindowPlacement(HNotePad, @AWindowPlacement)) > 0 then...

Ansonsten kann es eigentlich nur noch mehr an deinem Window liegen. Ist das irgendwie ein spezielles? Gemäß der PSDK und dem was da unter Remarks bzgl. der WINDOWPLACEMENT Structure steht könnte dann das Rückgabe-Ergebnis u.U. ein anderes sein als das erwartete. Du hast sie zwar oben schon erwähnt, aber im Zweifelsfall würde ich hier immer die einfachere GetWindowRect-Funktion nehmen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:38 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