我正在尝试使用非活动或后台应用程序窗口的定期(重复)屏幕截图。我有窗口矩形,但如果用户更改窗口矩形,那么我将获得与大小更改相对应的黑色阴影的屏幕截图。我可以在拍摄屏幕截图之前每次都获得一个矩形,但它会使我的代码变慢,所以我想阻止用户调整窗口大小或者当窗口重新调整大小时是否有任何事件触发器?我正在使用Java
JNA
。有什么建议?感谢
答案 0 :(得分:2)
您可以调用frame.setResizable(false)
来禁用调整窗口大小。你也可以这样做:
frame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
// Update rectangle
}
}
(假设此框架为java.awt.Frame
或javax.swing.JFrame
)
答案 1 :(得分:0)
我做了同样的事情来记录使用SWT组件的应用程序的截屏视频。 有一个听众可以完成这项工作:
public class ShellControlsListener implements ControlListener {
@Override
public void controlMoved(ControlEvent e) {
// You will need to retrieve new coordinates
}
@Override
public void controlResized(ControlEvent e) {
// Do you work here: retrieve new bounds
}
}
我认为你可以使用awt / swing这种听众。
检索窗口坐标和边界不是2~4 FPS的真正问题。我能够使用java.awt.Robot以25 FPS进行记录和编码。 (与Robot.createScreenCapture(java.awt.Rectangle)相比,检索窗口边界很快。
如果你真的需要表演,你只需要在移动或调整窗口大小时检索边界;没有必要设置窗口不可调整大小(如果您不想使用屏幕截图进行视频制作,因为在这种情况下,所有屏幕截图都应具有相同的尺寸)。