我做了我的研究,没有找到有用的结果。
这是交易,我正在写一个'新'剪贴板,它像堆栈而不是'区域'。而且我在Java中勇敢或愚蠢地执行此操作。到目前为止,在我的测试中,看看这是否可行,我已设法创建此堆栈行为。我得到的唯一问题是,有时,主要是当我粘贴堆栈的顶部(弹出操作)时,它不会弹出或由于某些其他原因它会粘贴两次。
实施例: 如果我复制这三个字:卡洛斯,卢卡斯,伊斯特伍德 堆栈剪贴板在粘贴时表现如下:Eastwood,Eastwood,Lucas,Carlos
我正在使用JNativeHooks来读取系统按键并确定用户何时粘贴。 我认为正在发生的事情是系统在我的代码之前粘贴......好吧,无论如何这里是代码(这是一个测试,解释了为什么它被严重评论):
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.Transferable;
import java.util.Stack;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.NativeInputEvent;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
public class Test3 implements NativeKeyListener {
Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
Stack<Transferable> clipStack = new Stack<>();
public static void main(String[] args) {
try {
GlobalScreen.registerNativeHook();
} catch (NativeHookException ex) {
System.err
.println("There was a problem registering the native hook.");
System.err.println(ex.getMessage());
System.exit(1);
}
Test2 t2 = new Test2();
// Construct the example object and initialze native hook.
GlobalScreen.getInstance().addNativeKeyListener(t2);
}
@Override
public void nativeKeyPressed(NativeKeyEvent ev) {
// Copy
if (ev.getKeyCode() == NativeKeyEvent.VK_C
&& NativeInputEvent.getModifiersText(ev.getModifiers()).equals(
"Ctrl")) {
// Clip the pop
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
clipStack.push(sysClip.getContents(null));
System.out.println("Ctrl+C : Stack(" + clipStack.size() + ")");
}
// Paste
if (ev.getKeyCode() == NativeKeyEvent.VK_V
&& NativeInputEvent.getModifiersText(ev.getModifiers()).equals(
"Ctrl")) {
// Clip the pop
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (clipStack.size() > 1) {
sysClip.setContents(clipStack.pop(), null);
} else
sysClip.setContents(clipStack.peek(), null);
System.out.println("Ctrl+V : Stack(" + clipStack.size() + ")");
}
}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
}
}
答案 0 :(得分:0)
我的想法和你建议的一样。
复制并粘贴与ctrl+c
和ctrl+v
不同的组合键,您甚至可以绕过使用系统剪贴板。只需按下选定的文本,然后将文本直接弹出到应用程序中的文本指针,当然,只有特定应用程序才能使用此堆栈行为。
系统会保留自己的最新剪辑副本,并且会在您的sysClip.setContents(clipStack.pop(), null)
粘贴操作中获得重复。
我对禁用系统行为没有太多想法。你可以对此进行研究。但是你可以通过改变组合键来确保它是唯一的问题。