Java 和 SetWindowDisplayAffinity

标签 java winapi screen-scraping jna

我正在使用 jna.extra.User32Extra 库,我必须更改 windowdisplayaffinity 值。 不幸的是,输出总是错误的,我不知道为什么,并且这段代码不起作用。我希望 WDA_MONITOR 在打印屏幕时使窗口变黑

public class Browser extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        StackPane pane = new StackPane();
        WebView view = new WebView();

        WebEngine engine = view.getEngine();
        engine.load("https://google.com");
        pane.getChildren().add(view);

        Scene scene = new Scene(pane, 1280, 720);
        stage.setTitle("Browser JAVA");        
        stage.setScene(scene);

        WinDef.HWND hWnd = User32.INSTANCE.FindWindow(null, "");
        boolean output = User32Extra.INSTANCE.SetWindowDisplayAffinity(hWnd, 1); 
        System.out.println("output "+output);//false

        stage.show();
    }

    public static void main(String[] args) throws IOException {
        Application.launch(args);
    }
}

最佳答案

也许您的窗口不是顶部窗口,如文档所示:

it returns FALSE when, for example, the function call is made on a non top-level window. https://learn.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowdisplayaffinity

你应该按照文档所说的去做:

To get extended error information, call GetLastError.

关于Java 和 SetWindowDisplayAffinity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55740104/

相关文章:

python selenium send_keys CONTROL, 'c'不复制实际文本

java - 读取网站的 HTML 代码

java - 停用组件,直到从 JComboBox 中选择一个元素

java - 不使用静态方法创建类单例

c++ - 在 Windows 中检测全屏应用程序退出

c++ - 陷阱 Windows 应用程序崩溃并刷新文件缓冲区

javascript - 屏幕抓取 JavaScript

java - 消费者从 Apache ActiveMQ Artemis 中的接收方法接收单个消息

java - 为什么在 Java 8 中向接口(interface)添加默认方法是一个不错的设计选择,有哪些替代方案

c++ - CreateProcess的第二个参数应该是什么?