2010-09-21 4 views
5

Zunächst einmal weiß ich, es gibt eine ähnlich formulierte Frage in SO, aber es wurde nicht richtig beantwortet, und die meisten der Diskussion um es fiel auf die "Sie sollten nicht tu das nicht ".Wie programmgesteuert verschieben Windows Taskleiste (nehmen Sie zwei)

Beginnen wir also mit den Grundlagen. Warum das nötig ist.

Ich arbeite an einer Firma, die ein paar Dutzend Tablet-Netbooks an unsere Arbeiter verteilt hat. Wie Sie wissen, haben Netbooks eine vergleichsweise niedrigere Auflösung, und Bildschirm-Immobilien sind sehr, sehr wichtig.

Wenn wir die Netbooks in den Tablet-Modus drehen, verwenden wir sie zum Schreiben, und der Hochformat-Modus ist dafür wesentlich komfortabler. Die Sache ist, wenn der Bildschirm gedreht wird, bleibt die Taskleiste auf der gleichen relativen Kante wie auf der Landschaft. Wenn es unten war, bleibt es unten im Hochformat. Aber da wir es bereits auf der linken Seite im Querformat verwenden, wird die Taskleiste einen sehr großen Prozentsatz des verfügbaren Bildschirms einnehmen.

Ich habe bereits die Struktur für das Abhören der Auflösung Änderungen Ereignis, und es funktioniert ordnungsgemäß, aber alle Samples, die ich im Hinblick auf die Übergabe von Nachrichten an das Taskleistenfenster gesehen habe schließlich scheitern es zu verschieben. Es ist so, als würde es gewaltsam ignoriert.

Gibt es eine Möglichkeit, dies zu erreichen? Ich benutze derzeit C#, aber das ist keine bestimmte Anforderung, ich kann leicht die Umwandlung von C++ oder Vb erreichen, und P/Aufrufe sind nicht beängstigend.

Das Betriebssystem ist Windows 7

[Edit: Ich habe bereits SHAppBarMessage versucht, mit SETPOS, es nicht auf Windows arbeiten 7. Ich habe Movewindow und SetWindowPos pinvokes versucht, auch nicht auf funktionieren Windows 7 auf der Taskleiste. Für andere Fenster funktioniert es gut. Und ich bin sicher, dass ich den richtigen Griff habe, denn wenn ich ShowWindow pinvoke benutze, um es zu verbergen, versteckt es sich wirklich, obwohl ich den ungenutzten Platz für irgendetwas anderes nicht zurückfordern kann. Diese Methoden haben die Arbeit an XP, das ist, warum die so frustrierend.]

Vielen Dank für Ihre Zeit, Joao Correia

+0

sorry für die schamlose/Beule, aber ich bin immer noch über diese stapfte. Ich denke sogar über einen anderen Ansatz nach. Verstecken Sie die Taskleiste vollständig, nachdem ich die Drehung erkannt habe, und zeigen Sie sie erneut an, wenn Sie zurück gedreht werden. ABER. Obwohl ich die Taskleiste und den Startknopf "orb" verstecken kann, kann ich den Platz für den Desktop-Bereich nicht zurückfordern. Es zählt immer die Taskleiste als vorhanden und lässt Fenster nicht über den Raum maximieren. –

+0

Hallo, ich wollte euch nur wissen lassen, dass es möglich ist, ich habe eine Lösung in Batch und VBScript veröffentlicht, also muss auch C# möglich sein, siehe http://StackOverflow.com/questions/12435503/change-windows-7- taskbar-location-automatisch-basierte-on-screen-shape-or-on-dock/14370485 # 14370485 – peter

Antwort

0

Haben Sie versucht, Findwindow() mit Shell_TrayWnd als die Klasse, und dann SetWindowPos verwenden um das Fenster zu move?

Nicht sicher, wie Windows dies übernehmen würde.

Es gibt auch spezifische API mit der AppBar ist zu tun (was die Taskleiste ist) finden Sie unter:

http://bytes.com/topic/c-sharp/answers/247701-moving-windows-takbar

+1

Ja, ich habe versucht FindWindow und das Argument, das Sie vorschlagen, das ist, was vom System ignoriert wird. Wenn ich es in einem anderen Fenster verwende, funktioniert es. Die Taskleiste ignoriert es. Wie für den Link vorgeschlagen, habe ich diesen genauen Code versucht. Es funktioniert auf XP, aber scheitert an 7, daher meine Notwendigkeit für diese Frage. –

+0

Ahh ich sehe, das ist interessant. – Lloyd

Verwandte Themen