java 监控ctrl v_在每个人面前停止Ctrl-V(粘贴)操作以拦截和更改剪贴板内容

我正在尝试停止剪贴板的正常粘贴操作,而我正在处理和更新剪贴板内容 .

我在c#中编写了一个应用程序来实现一堆全局复制粘贴操作(目前仅用于文本格式) . WM_CLIPBOARDUPDATED事件很好地拦截了复制操作,我将剪贴板的内容推送到堆栈中 .

主要的问题是当我的键盘钩子检测到由Ctrl-V启动的粘贴操作时,当我想将堆栈弹回到剪贴板时,但是当我的功能完成时,系统的粘贴操作就完成了 .

举一个例子来说明,如果我复制了5个文本字符串并且堆栈已正确填充 . 我打开一个word文档并按Ctrl-V(粘贴)操作 . 当我的应用程序正在处理并即将通过从我的堆栈弹出来更改剪贴板的内容 . 粘贴操作已经通过与我的函数并行的其他东西完成了 .

我使用了时间延迟,锁定和取消注册键盘监听器,但没有任何效果 .

我想让我的应用程序成为第一个获取Ctrl-V然后更改剪贴板内容的应用程序,以便其他应用程序和进程只获得我在剪贴板上粘贴的内容 .

粘贴操作拦截的代码如下

private int KbHookProc(int nCode, IntPtr wParam, IntPtr lParam)

{

if (nCode >= 0)

{

var hookStruct = (KbLLHookStruct)Marshal.PtrToStructure(lParam, typeof(KbLLHookStruct));

// Quick and dirty check. You may need to check if this is correct. See GetKeyState for more info.

bool ctrlDown = GetKeyState(VK_LCONTROL) != 0 || GetKeyState(VK_RCONTROL) != 0;

if (ctrlDown && hookStruct.vkCode == 0x56) // Ctrl+V

{

if (clipBoardStack.Count > 0)

{

lock (this)

{

localChange = true;

RemoveClipboardFormatListener(this.Handle); // Remove our window from the clipboard's format listener list.

System.Threading.Thread.Sleep(200);

Clipboard.SetText(clipBoardStack.Pop());

AddClipboardFormatListener(this.Handle);

System.Threading.Thread.Sleep(200);

}

}

}

}

// Pass to other keyboard handlers. Makes the Ctrl+V pass through.

return CallNextHookEx(_hookHandle, nCode, wParam, lParam);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值