【问题标题】:Finding the IntPtr of the TaskBar查找任务栏的 IntPtr
【发布时间】:2013-04-17 01:10:12
【问题描述】:

之前,我向this question 询问了有关将用户返回到他们正在使用的上一个窗口的问题,但我找到了解决方案,但这又产生了另一个问题。确定前一个窗口的函数有时会起作用(如果发生了一组我无法随意重新创建的事件,而是随机发生)。在某些时候,它会退回 2 个窗口,有时会退回 1 个窗口。这样做是因为任务栏先挡道,然后是窗口。

所以,为了解决这个问题,我决定我应该继续浏览以前的窗口,直到我到达一个不是任务栏的窗口,但是,我不知道如何确定任务栏的 IntPtr。

我试过了:

IntPtr taskBarWnd = FindWindow("Shell_TrayWnd", null);

但它似乎不起作用。如果我打电话给MessageBox.Show(taskBarWnd.ToInt64().ToString()),我会得到 131258,但是当我这样做时:

IntPtr thisWnd = GetForegroundWindow();
IntPtr lastWnd = GetWindow(thisWnd, 2);

它正在引用任务栏,但是当我调用上面相同的 MessageBox 函数时,它返回 131260(如果图标在隐藏图标区域内,则返回 65774)。

有没有人知道我是否可以尝试确定我计算的lastWnd 是否是任务栏?我不希望有一些东西来检查 IntPtr 是否彼此接近而不是相等。

【问题讨论】:

  • 我不确定,但也许你可以尝试检查窗口是否属于“explorer.exe”进程,类似的,因为如果我不是任务栏是由这个进程管理的错了(我已经有一段时间没有深入研究那种东西了)
  • 啊,听起来不错。不过,我怎么会发现这一点(快速的谷歌搜索收效甚微,但我认为这归结为不知道正确的词)
  • 啊,没关系,明白了:)
  • IntPtr 我确定你的意思是window handle
  • 我确定我可能会这样做,我只是不知道这是它的正确名称

标签: c# intptr taskbar


【解决方案1】:

我现在无法检查,因为这是我的 iPad,但我很确定任务栏窗口都使用自定义窗口类,所以你应该能够调用 GetClassName 并从结果中找出你的句柄指的是什么到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2011-11-02
    相关资源
    最近更新 更多