栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

监视突出显示的文本

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

监视突出显示的文本

您可以使用JNA

Ctrl-C
在前台窗口上实际模拟(复制操作),然后读取剪贴板中的内容,之后,您只需要还原剪贴板中的内容即可。

这是一个简短的示例:

import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import com.sun.jna.Native;import com.sun.jna.platform.win32.User32;import com.sun.jna.platform.win32.WinDef.HWND;import com.sun.jna.win32.StdCallLibrary;public class Foo implements ClipboardOwner {    public interface CustomUser32 extends StdCallLibrary {        CustomUser32 INSTANCE = (CustomUser32) Native.loadLibrary("user32", CustomUser32.class);        HWND GetForegroundWindow();        void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);    }    public void lostOwnership(Clipboard clipboard, Transferable contents) {        // dummy: needed for `ClipboardOwner`    }    void controlC(CustomUser32 customUser32) {        customUser32.keybd_event((byte) 0x11 , (byte) 0, 0, 0);        customUser32.keybd_event((byte) 0x43 , (byte) 0, 0, 0);        customUser32.keybd_event((byte) 0x43 , (byte) 0, 2 , 0);        customUser32.keybd_event((byte) 0x11 , (byte) 0, 2 , 0);// 'Left Control Up    }    String getClipboardText() throws Exception {        return (String) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);    }    void setClipboardText(String data) throws Exception {        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(data), this);    }    String getSelectedText(User32 user32, CustomUser32 customUser32) throws Exception {        HWND hwnd = customUser32.GetForegroundWindow();        char[] windowText = new char[512];        user32.GetWindowText(hwnd, windowText, 512);        String windowTitle = Native.toString(windowText);        System.out.println("Will take selected text from the following window: [" + windowTitle + "]");        String before = getClipboardText();        controlC(customUser32); // emulate Ctrl C        Thread.sleep(100); // give it some time        String text = getClipboardText();        System.out.println("Currently in clipboard: " + text);        // restore what was previously in the clipboard        setClipboardText(before);        return text;    }    public static void main(String[] args) throws Exception {        Foo foo = new Foo();        Thread.sleep(2000); // take some time for you to select something anywhere        System.out.println(foo.getSelectedText(User32.INSTANCE, CustomUser32.INSTANCE));    }}

运行它时,您将有两秒钟的时间在任何应用程序中的某处选择一些文本,然后通常将其打印出来。

将从以下窗口中获取选定的文本:[java-突出显示的监视器文本-堆栈溢出-Google Chrome]

当前在剪贴板中:我正在为正在计划的项目集思广益

您不需要接受我的回答,只是向您展示我在上面的评论中所说的话。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/507718.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号