告诉Windows在哪个显示器上显示对话框

6 投票
1 回答
549 浏览
提问于 2025-04-16 20:10

我有一个程序,它可以在多个显示器上运行。这个程序在第二个显示器上显示一些特别的可视化内容。可是,有时候程序会用Windows的命令来把文件发送到回收站。问题是,当它这样做的时候,删除确认的对话框会出现在我的可视化内容上面。这就很麻烦,因为当鼠标在第二个显示器上时,我的程序会用鼠标钩子来捕捉所有的鼠标输入,这样用户就连点击确认对话框都做不到。

有没有办法告诉Windows只在特定的显示器上显示对话框呢?

我在用Python,不过如果需要调用C语言的Windows API函数,我也没问题。

1 个回答

2

你用什么函数把文件发送到回收站?如果你使用的是 SHFileOperation,你可以传递一个父窗口的句柄。也许可以在另一个显示器上创建一个看不见的 WS_EX_TOOLWINDOW 窗口。

我认为这个 API 会把那个窗口当作父窗口来处理,应该会相对于那个窗口居中,但我还没有试过。

根据你要支持的 Windows 版本,之前有一种功能可以创建“停靠”在屏幕边缘的桌面工具条。这会自动算入 GetMonitorInfo 返回的工作区域,应该能防止对话框覆盖这个区域。可能还有其他方法可以声明某个区域是“正在使用”的,从而标记这个空间为禁区,但我不知道,所以可能是不存在的……

你可以做一个比较粗糙的办法,就是自己去检测并移动对话框,但如果这是一个广泛使用或商业化的应用,这样做可能会适得其反。

撰写回答