【问题标题】:How to programmatically move windows taskbar (take two)如何以编程方式移动windows任务栏(取两个)
【发布时间】:2010-09-21 13:52:21
【问题描述】:

首先,我知道 SO 中有一个类似措辞的问题,但没有得到正确的回答,围绕它的大部分讨论都归结为“你不应该这样做”。

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

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

当我们将上网本旋转到平板模式时,我们将它们用于书写,而纵向模式则更舒适。问题是,当屏幕旋转时,任务栏与横向保持在相同的相对边缘上。如果它在底部,它会在纵向上停留在底部。但是由于我们已经在横向的左边缘使用了它,所以最终任务栏占据了可用屏幕的一个非常显着的百分比。

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

有什么方法可以实现吗?我目前用的是c#,但这不是一定的要求,我可以很容易地实现从c++或vb的转换,而且p/invokes并不可怕。

操作系统是windows 7。

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

非常感谢您的宝贵时间, 若昂·科雷亚

【问题讨论】:

  • 对无耻的 /bump 感到抱歉,但我仍然对此感到困惑。我什至在考虑另一种方法。在我检测到旋转后完全隐藏任务栏,并在旋转回来时再次显示。但。即使我可以隐藏任务栏和开始按钮“orb”,我也无法回收桌面区域的空间。它始终将任务栏视为存在,并且不会让窗口在空间上最大化。
  • 你好,只是想让你知道它可以做到,我发布了一个批处理和vbscript的解决方案,所以C#也必须是可能的,见stackoverflow.com/questions/12435503/…

标签: c# shell automation taskbar


【解决方案1】:

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

但不确定 Windows 会如何处理。

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

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

【讨论】:

  • 是的,我已经尝试过 FindWindow 和您建议的论点,这就是系统忽略的内容。如果我在任何其他窗口上使用它,它就可以工作。任务栏忽略它。至于建议的链接,我已经尝试过确切的代码。它适用于 XP,但在 7 上失败,因此我需要这个问题。
  • 啊,我明白了,这很有趣。
猜你喜欢
  • 2011-01-05
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多