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

6
我有一个程序,它使用多个显示器。该程序在第二个显示器上显示特殊的可视化效果。在某个时刻,该程序使用Windows shell函数将文件发送到回收站。然而,在执行此操作时,删除确认对话框会出现在我的可视化效果之上。这是一个问题,因为当鼠标在第二个显示器上时,我的程序使用鼠标钩子来捕获所有鼠标输入,因此用户甚至无法点击确认对话框。
是否可能告诉Windows仅在特定显示器上放置对话框?
我正在使用Python编程语言,但如果必须调用C WinAPI函数,那也不应该成为问题。
1个回答

2
你使用哪个函数将文件发送到回收站?如果你使用的是SHFileOperation,你可以传递一个父HWND,也许在另一个监视器上创建一个不可见的WS_EX_TOOLWINDOW窗口。
我预计API会将该窗口视为父窗口,并相对于该窗口居中,但我尚未尝试过。
根据你所针对的Windows版本,以前可以创建“停靠”到屏幕侧面的桌面工具栏(desk bands)。这会自动纳入由GetMonitorInfo返回的rcWork区域并防止对话框与此空间重叠。可能还有另一种方法来声明一个区域被“使用”,从而声明该区域不可用,但我不知道是否存在这样的方法...
丑陋和粗糙的做法是对话框自行轮询和移动,但如果这是任何种类的广泛部署或商业应用程序,那么这很可能会带来更多的伤害。

我会试一下。SHFileOperation是删除文件还是将其移动到回收站?我之前使用的是Tim Golden的winshell包:http://timgolden.me.uk/python/winshell.html,但我可以尝试直接使用API函数。 - jmite
我真笨,原来在Tim Golden模块中有一个选项可以不要求确认。这并不能解决长期问题,但除了删除文件之外,我没有遇到任何问题。感谢你的答复! - jmite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接