如何以编程方式移动Windows任务栏(取两个)

Joa*_*eia 6 c# shell automation taskbar

首先,我知道在SO中有一个类似的措辞问题,但它没有得到适当的回答,并且围绕它的大部分讨论落到了"你不应该这样做".

让我们从基础开始.为什么需要这样做.

我在一家公司工作,向我们的员工发放了几十台平板电脑上网本.如您所知,上网本的分辨率相对较低,屏幕空间非常非常重要.

当我们将上网本旋转到平板电脑模式时,我们使用它们进行书写,而肖像模式则更加舒适.问题是,当屏幕旋转时,任务栏与景观保持在相同的相对边缘.如果它在底部,则它在纵向上保持在底部.但是由于我们已经在横向的左边缘上使用它,我们最终得到的任务栏占据了可用屏幕的非常明显的百分比.

我已经有了用于侦听分辨率更改事件的结构,并且它正常工作,但是我看到的关于将消息传递到任务栏窗口的所有示例最终都无法移动它.就像被强行忽略一样.

有没有办法实现这个目标?我目前正在使用c#,但这不是一个明确的要求,我可以很容易地实现从c ++或vb的转换,而p/invokes并不可怕.

操作系统是Windows 7.

[编辑:我已经尝试过SHAppBarMessage,使用SETPOS,它在Windows 7上不起作用.我尝试过MoveWindow和SetWindowPos pinvokes,也不能在任务栏上的Windows 7上运行.对于其他窗户,它工作得很好.而且我确信我有正确的句柄,因为如果我使用ShowWindow pinvoke隐藏它,它真的隐藏了,虽然我不能回收未使用的空间用于其他任何东西.这些方法确实适用于XP,这就是它如此令人沮丧的原因.

非常感谢你的时间,Joao Correia

Llo*_*oyd 0

您是否尝试过使用 Shell_TrayWnd 作为类的 FindWindow(),然后使用 SetWindowPos 来移动窗口?

但不确定 Windows 将如何处理这个问题。

还有与 AppBar(任务栏是什么)相关的特定 API,请查看:

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