【问题标题】:Tell windows which monitor to display dialogs on告诉窗口在哪个监视器上显示对话框
【发布时间】:2011-06-23 20:14:52
【问题描述】:

我有一个使用多个显示器的程序。该程序在第二个监视器上显示特殊的可视化。在某一时刻,该程序使用 Windows shell 函数将文件发送到回收站。但是,当它这样做时,删除确认对话框出现在我的可视化之上。这尤其成问题,因为当鼠标在第二台显示器上时,我的程序使用鼠标钩子捕获所有鼠标输入,因此用户甚至无法单击确认对话框。

是否有可能以某种方式告诉 Windows 只在特定显示器上放置对话框?

我正在使用 python,但如果我必须调用 C WinAPI 函数,这应该不是问题

【问题讨论】:

    标签: python windows winapi pywin32 multiple-monitors


    【解决方案1】:

    您使用哪个功能将文件发送到回收站?如果你使用SHFileOperation,你可以传递一个父 HWND。或许在另一台显示器上让它成为一个不可见的 WS_EX_TOOLWINDOW 窗口。

    我希望 API 将该窗口视为父窗口,并将相对于该窗口居中,但我还没有尝试过。

    根据您所针对的 Windows 版本,过去可以创建“停靠”到屏幕两侧的桌带。这会自动计入GetMonitorInfo 作为rcWork 返回的区域中,并且应该防止对话框与该空间重叠。 可能还有另一种方式来声明一个区域“正在使用”,以声明空间禁区的方式,但我不知道它,所以它可能不存在......

    您可以做的丑陋和粗暴的事情是自己轮询并移动对话框,但如果这是任何一种广泛部署或商业应用程序,可能弊大于利。

    【讨论】:

    • 我会试试的。 SHFileOperation 会删除文件,还是将其移至回收站?我使用的是 Tim Golden 的 winshell 包:timgolden.me.uk/python/winshell.html,但我可以尝试直接 API 函数。
    • 愚蠢的我,原来在 Tim Golden 模块中有一个不要求确认的选项。这并不能解决长期问题,但除了删除文件之外,我没有任何问题。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多