Höhe der Taskleiste ermitteln (o. mit advapi Betriebssystem)
Übersicht BlitzBasic BlitzPlusGehe zu Seite Zurück 1, 2, 3 Weiter
ozzi789 |
Di, Nov 29, 2011 9:13 Antworten mit Zitat |
|
---|---|---|
Achso, nachdem ich den ersten Post gelesen habe, dachte ich es geht um das OS...
Schau mal dort vorbei http://winsharp93.wordpress.co...e-taskbar/ |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Thunder |
Di, Nov 29, 2011 16:34 Antworten mit Zitat |
|
---|---|---|
Sereyanne:
mpmxyz wollte darauf hinaus, dass unter BlitzMax ClientHeight(Desktop()) die Höhe des Desktops exklusive Taskleiste und GadgetHeight(Desktop()) die Höhe inklusive Taskleiste zurückgibt, woraufhin du mit GadgetHeight(Desktop())-ClientHeight(Desktop()) die Höhe der Taskleiste ermitteln könntest - das scheint aber bei BlitzPlus nicht zu funktionieren. Beide Funktionen geben denselben Wert zurück, nämlich den inklusive Taskleiste. Ich habe jetzt auch probiert den DesktopBuffer() zu aktivieren und GraphicsHeight() auszulesen, aber das gibt auch denselben Wert - d.h. du musst wahrscheinlich über die Windows API gehen. mfg Thunder |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
The Shark |
Di, Nov 29, 2011 19:53 Antworten mit Zitat |
|
---|---|---|
Andere Möglichkeit wäre, ein fenster zu erstellen, zu maximieren und dann die Position und Ausmaße auszulesen. So kann man gleich feststellen, wo sich die Taskleiste befindet. Man könnte ausprobieren, ob das ganze auch mit einem unsichtbare Fenster funktioniert, sonst blitzt halt kurz ein Fenster auf. | ||
Rette deine Freiheit |
Sereyanne |
Di, Nov 29, 2011 20:23 Antworten mit Zitat |
|
---|---|---|
ozzi789 hat Folgendes geschrieben: Achso, nachdem ich den ersten Post gelesen habe, dachte ich es geht um das OS...
Schau mal dort vorbei http://winsharp93.wordpress.co...e-taskbar/ Ja, im ersten Post ging es auch noch um das OS, aber ich musste feststellen, dass dieser Weg Käse ist . Danke für den Link, der ist ja wirklich klasse - leider hab ich davon keine Ahnung . Ist das C? C++? Kann mir das einer übersetzen Thunder hat Folgendes geschrieben: mpmxyz wollte darauf hinaus, dass unter BlitzMax ClientHeight(Desktop()) die Höhe des Desktops exklusive Taskleiste und GadgetHeight(Desktop()) die Höhe inklusive Taskleiste zurückgibt, woraufhin du mit GadgetHeight(Desktop())-ClientHeight(Desktop()) die Höhe der Taskleiste ermitteln könntest - das scheint aber bei BlitzPlus nicht zu funktionieren. Beide Funktionen geben denselben Wert zurück, nämlich den inklusive Taskleiste.
Genau diese Erfahrung habe ich auch schon gemacht The Shark hat Folgendes geschrieben: Andere Möglichkeit wäre, ein fenster zu erstellen, zu maximieren und dann die Position und Ausmaße auszulesen. So kann man gleich feststellen, wo sich die Taskleiste befindet. Man könnte ausprobieren, ob das ganze auch mit einem unsichtbare Fenster funktioniert, sonst blitzt halt kurz ein Fenster auf.
Diese Idee kam mir heute morgen auch schon. Gleich ausprobiert - funzt aber nicht. Meine Auflösung 1280x1024 wird einwandfrei angezeigt. Habe dann ein Fenster erstellt, maximiert - und der Debuglog spuckt als Höhe 1030 aus. Wie kann denn das Fenster größer sein als die Desktop-Auflösung???? Thunder hat Folgendes geschrieben: Ich habe jetzt auch probiert den DesktopBuffer() zu aktivieren und GraphicsHeight() auszulesen, aber das gibt auch denselben Wert - d.h. du musst wahrscheinlich über die Windows API gehen.
Und wie geht das? Mit der Win api bin ich noch nicht so vertraut. |
||
ozzi789 |
Di, Nov 29, 2011 22:46 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] win = CreateWindow ("TEST", 100,100,100,100,Desktop(),15)
MaximizeWindow win HideGadget win DebugLog "WINDOWHEIGHT "+(GadgetHeight(win)-8) DebugLog "WINDOWWIDTH "+(GadgetWidth (win)-8) DebugLog "SCREENHEIGHT "+(ClientHeight(Desktop())) DebugLog "SCREENWIDTH "+(ClientWidth(Desktop())) DebugLog "TASKBAR HEIGHT "+((ClientHeight(Desktop()))-(GadgetHeight(win)-8)) Delay(20000) End Funktioniert doch prächtig....! (Sofern ich Paint glauben schenken darf das meine Taskleiste wirklich 44px hoch ist) Die 8px die ich abziehe, keine Ahnung, so stimmts einfach 2 Dinge muss man noch ergänzen -Falls 2 Bildschirme angeschlossen sind, und die Taskleiste auf dem Sekundären liegt (funktioniert ab Win7) gibt ClientHeight(Desktop()) bloss die vom Primären aus) -> Gibt sicher ne Funktion die dir die Auflösungen beider geben kann -Falls die Taskleiste senkrecht ist, müsste man das mathematisch auch noch abfangen Ich verlange einen Orden! |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Sereyanne |
Mi, Nov 30, 2011 23:27 Antworten mit Zitat |
|
---|---|---|
ozzi789 hat Folgendes geschrieben: Ich verlange einen Orden!
Deinen Orden kannst du haben! Vielen Dank für die Mühe! Aaaaaaaber.............! Bei mir stimmts nicht, fürchte ich. Mein Debugger spuckt bei deinem Code aus: Zitat: WINDOWHEIGHT 992
WINDOWWIDTH 1288 SCREENHEIGHT 1024 SCREENWIDTH 1280 TASKBAR HEIGHT 32 Auflösung ist ja okay. Fenstergröße glaub ich jetzt einfach mal Aber hatten wir nicht gesagt, dass die Taskleiste in Win 7 48 Pixel hoch ist? mpmxyz hat Folgendes geschrieben: So bekomme ich hier als Ergebnis, dass die Windows 7-Taskleiste 48 Pixel hoch ist.
OK ich hab grad mal selber mit Paint nachgemessen. Ich komme auf 42, ist immer noch eine ziemlich große Differenz zu dem Ergebnis aus deinem Code. Man das kann doch nicht so schwer sein!! |
||
HolzchopfMeisterpacker |
Do, Dez 01, 2011 0:30 Antworten mit Zitat |
|
---|---|---|
Via Google nach "get hwnd taskbar" (einfach mal ins Blinde geraten) bin ich auf diese Seite der msdn gestossen, wo ich Zitat: To retrieve the size of the work area, call the SystemParametersInfo function with the SPI_GETWORKAREA value set. gelesen habe.
Diese Infos habe ich mal genommen und folgendermassen zusammengefasst für BlitzMax: [AUSKLAPPEN] SuperStrict Jetzt könnte man das ganze bestimmt noch schön in eine RECT-Struktur dingsen und so, aber darauf hatte ich keine Lust mehr. Ich hoffe, es ist das, was du suchst. mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
mpmxyz |
Do, Dez 01, 2011 16:00 Antworten mit Zitat |
|
---|---|---|
@Sereyanne
Ich habe auch nachgemessen: Meine Taskleiste hat eine Höhe von 48 px. Warum gibt es da unterschiedliche Größen? Mein Testcode ist übrigens: BlitzMax: [AUSKLAPPEN] SuperStrict MfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
ozzi789 |
Do, Dez 01, 2011 20:12 Antworten mit Zitat |
|
---|---|---|
Ich hab ne klassische Ansicht..
Der Code von Holzchopf ist natürlich sehr nice, kannst den external Call in ne decls pappen und verwenden |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Sereyanne |
Fr, Dez 02, 2011 22:10 Antworten mit Zitat |
|
---|---|---|
Holzchopf hat Folgendes geschrieben: Diese Infos habe ich mal genommen und folgendermassen zusammengefasst für BlitzMax
Dankeschön. Nur doof, dass wir hier im Bereich BlitzPlus sind - ich hab nämlich kein Max mpmxyz hat Folgendes geschrieben: Meine Taskleiste hat eine Höhe von 48 px.
Warum gibt es da unterschiedliche Größen? Das ist eine gute Frage! Ich habe Win 7 Ultimate. Gibts da Versionsunterschiede oder mach ich mit meinem Paint irgendwas falsch?? Bei mir bleiben es 42. ozzi789 hat Folgendes geschrieben: Der Code von Holzchopf ist natürlich sehr nice, kannst den external Call in ne decls pappen und verwenden
Haha.... dann mach mal bitte... ich kann das nicht |
||
ozzi789 |
Sa, Dez 03, 2011 17:18 Antworten mit Zitat |
|
---|---|---|
Weil es bald weihnachten ist...
Funktioniert für den primären Bildschirm. Code: [AUSKLAPPEN] Type sysparam
Field empty1 Field empty2 Field empty3 Field height End Type Local n.sysparam n = New sysparam SystemParametersInfo($30,0,n, 0) Print ClientHeight(Desktop())-n\height WaitKey End Und die user32.decls Code: [AUSKLAPPEN] .lib "user32.dll"
SystemParametersInfo%(uiAction%, uiParam%, pvParam*, fWinIni%) : "SystemParametersInfo" |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Sereyanne |
Sa, Dez 03, 2011 17:51 Antworten mit Zitat |
|
---|---|---|
ozzi789 hat Folgendes geschrieben: Weil es bald weihnachten ist...
Funktioniert für den primären Bildschirm. Haha... ja herrlich vielen Dank. Von mir aus kannst du auch gerne zwei Orden haben Nur irgendwas mach ich noch falsch. Hab deinen Code in die decls gepackt, den anderen Code ins Plus kopiert, und dann markiert der Debugger "SystemParametersInfo($30,0,n, 0) " --------------------------- Runtime Error --------------------------- User lib function not found --------------------------- OK --------------------------- edit Hey Leute, ich hab jetzt ne Idee. Hab mal n bisschen rumgespielt. Unter der Woche bin ich einfach zu nix gekommen, aber dafür jetzt Ich hab jetzt die Lösung dafür, warum ozzi 8 Pixel abziehen musste. Stichwort: Rand. Ich habe festgestellt, dass mein Fenster über maximizewindow 1000 Pixel groß ist. Bei einer Desktopauflösung von 1280*1024 ergibt das eine Taskleistengröße von 1024-1000=24 Pixel. Das kann nicht sein. Wenn ich das Fenster einfach nur erstelle ohne zu maximieren, und es dann mit der Maus bis an die Taskleiste ziehe, zeigt der Debugger einen Wert von 984. Jetzt haben wir eine Taskleistengröße von 1024-984=40 Pixel. OK, ich kam im Paint auf 42, diese geringe Abweichung lass ich jetzt mal gelten. Das würde bedeuten, dass der Rand des Fensters beim Maximieren und nicht Maximieren einen Unterschied von 16 Pixel ausmacht. Deswegen hat ozzi auch 8 Pixel abgezogen - nämlich 1 x den Rand. Probiert mal bitte folgendes und erstattet mir dann mal Bericht Code: [AUSKLAPPEN] desktophoehe=ClientHeight(Desktop())
desktopbreite=ClientWidth(Desktop()) win=CreateWindow("fenster",0,0,500,500,Desktop()) MaximizeWindow win Repeat WaitEvent Select EventID() Case $803 End End Select fensterbreite=GadgetWidth(win) fensterhoehe=GadgetHeight(win) DebugLog "desktop "+desktopbreite+" x "+desktophoehe DebugLog "fenster "+fensterbreite+" x "+fensterhoehe Forever End Der Code mag jetzt nicht der beste sein, aber ich denke, er zeigt das Problem mit dem Rand, wie ich oben beschrieben habe. Oder wie seht ihr das? |
||
ozzi789 |
Sa, Dez 03, 2011 19:09 Antworten mit Zitat |
|
---|---|---|
Wenn du das mit der decls richtig machst und deine IDE neustartet funktioniert das
Hat hier zumindest auf 2 PC's... |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
ozzi789 |
Mi, Dez 07, 2011 14:10 Antworten mit Zitat |
|
---|---|---|
Hats geklappt..? | ||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Sereyanne |
Mi, Dez 07, 2011 21:47 Antworten mit Zitat |
|
---|---|---|
Nee, danke der Nachfrage, aber ich kann die IDE so oft neustarten, wie ich will, der Fehler bleibt leider bestehen.
Warum äußert sich eigentlich keiner zu meinem Randproblem? Ich hab leider nur Win 7 zur Verfügung. Es würde mich freuen, wenn mein Code auch mal auf anderen Betriebssystemen getestet würde. Die Ergebnisse würden mich mal interessieren! |
||
ZEVS |
Mi, Dez 07, 2011 21:55 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] Building untitled2
Compiling:untitled2.bmx flat assembler version 1.69.14 (471646 kilobytes memory) 3 passes, 4597 bytes. Linking:untitled2.debug.exe Executing:untitled2.debug.exe DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 DebugLog:desktop 1152 x 834 DebugLog:fenster 1160 x 842 Process terminated WindowsXP Service Pack 2. Keine Veränderung an der Default-Taskleiste. BMax 1.45. Komischerweise ist das Fenster größer als der Desktop. Es gibt einen Breitenunterschied von 8px (woher auch immer) und einen Höhenunterschied von 8px, wobei meine Taskleiste nach GIMP 31px hoch ist. Meine Bildschirmauflösung beträgt 1152x864. ZEVS |
||
Sereyanne |
Mi, Dez 07, 2011 22:05 Antworten mit Zitat |
|
---|---|---|
ZEVS hat Folgendes geschrieben: Komischerweise ist das Fenster größer als der Desktop.
Es gibt einen Breitenunterschied von 8px (woher auch immer) und einen Höhenunterschied von 8px, wobei meine Taskleiste nach GIMP 31px hoch ist. Meine Bildschirmauflösung beträgt 1152x864. ZEVS Ja, genau das sage ich doch die ganze Zeit!!! Also stimmst du mir zu, dass man den Rand abziehen muss? |
||
ZEVS |
Mi, Dez 07, 2011 22:25 Antworten mit Zitat |
|
---|---|---|
Das ist es wohl. Das Fenster ist größer als der Bildschirm, k.A., was Windows hier macht. Auf jeden Fall ist der Rand gleich GadgetWidth-ClientWidth.
Die Sache wird witziger: Wenn ich das ganze mal mit B+ laufen lasse, dann bekomme ich für die Desktophöhe meine 864px raus. Zur Taskleiste: 864-842 = 22. Das sind mir 9px zu wenig, also unzureichend. Eine finale Formel kann wohl nur ein umfangreiches Debuggen (evtl. unter Einbeziehung von GadgetX/GadgetY) bringen. Obwohl die userlib-Methode einfach etwas für sich hat . ZEVS |
||
Sereyanne |
Mi, Dez 07, 2011 23:21 Antworten mit Zitat |
|
---|---|---|
ZEVS hat Folgendes geschrieben: Das ist es wohl. Das Fenster ist größer als der Bildschirm, k.A., was Windows hier macht
Du hast mich soeben auf eine Idee gebracht. Warum kann man denn das Fenster nicht mit den Client-Befehlen anstatt mit Gadget auslesen? Code: [AUSKLAPPEN] desktophoehe=ClientHeight(Desktop())
desktopbreite=ClientWidth(Desktop()) win=CreateWindow("fenster",0,0,0,0,Desktop()) MaximizeWindow win fensterbreite=[color=red]ClientWidth(win)[/color] fensterhoehe=[color=red]ClientHeight(win)[/color] taskleiste=desktophoehe-fensterhoehe DebugLog "desktop "+desktopbreite+" x "+desktophoehe DebugLog "fenster "+fensterbreite+" x "+fensterhoehe DebugLog "task "+taskleiste HideGadget win Repeat WaitEvent Select EventID() Case $803 End End Select Forever End Es scheint zu gehen. Mein Fenster ist jetzt endlich kleiner als der Desktop *rofl*. Aber warum ist meine Taskleiste jetzt 104 Pixel hoch?? Das erscheint mir jetzt doch recht viel. Was für Ergebnisse produziert dieser Code bei euch? |
||
ZEVS |
Do, Dez 08, 2011 17:58 Antworten mit Zitat |
|
---|---|---|
96...
Das liegt wohl an dem Fensterrahmen. Wenn ich als Style 0 angebe, habe ich eine Taskleistenhöhe von 0... Es ist zum Mäuse melken... ZEVS |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht BlitzBasic BlitzPlus
Powered by phpBB © 2001 - 2006, phpBB Group