如何解决在鼠标事件后解析剪贴板内容的优雅方式
我正在尝试找到一种优雅的方法来解析 C# 中鼠标事件后的剪贴板内容。
我目前正在 C# WinForm 中为游戏“PathOfExile”创建一个工具,该工具基本上可以执行以下操作:
On mouse down over an item
if the item contain any desirable mod
disable the mouse//suppress the mouse click
为此,我使用“mousekeyhook”和“WindowsInput”创建了一个小型 winform 项目,以捕获鼠标/键事件并发送 ctrl+c。
在 PathOfExile 中,当您在光标位于某个项目顶部时发送“Ctrl+C”,该项目的所有属性都会被复制到剪贴板。
我希望不必对工具进行多线程处理,因为该过程应该如下工作:
Mouse down
send ctrl+c
copy the clipboard content
Analyze the clipboard
continue with the mouse events,or suppress the mouse down
在执行上述操作时,我在剪贴板中遇到了一些问题,我没有收到来自最新的“CTRL+C”的信息。看起来我正在接收“以前的”剪贴板信息。另外,当我订阅“OnMouseDownExt”时,我似乎无法再打开 Chrome...但这可能是 mousekeyhook 插件的问题。
这是我的一段代码:
private IKeyboardMouseEvents m_Events;
private WindowsInput.InputSimulator iSim = new InputSimulator();
private void SubscribeGlobal()
{
Unsubscribe();
Subscribe(Hook.GlobalEvents());
}
private void Subscribe(IKeyboardMouseEvents events)
{
m_Events = events;
m_Events.MouseDownExt += OnMouseDownExt;
}
private void Unsubscribe()
{
if (m_Events == null) return;
m_Events.MouseDownExt -= OnMouseDownExt;
m_Events.dispose();
m_Events = null;
}
private void OnMouseDownExt(object sender,MouseEventExtArgs e)
{
// Send the CTRL+C
iSim.Keyboard.ModifiedKeystroke(VirtualKeyCode.CONTROL,VirtualKeyCode.VK_C);
string strClipboard = "Clipboard empty";
for (int i = 0; i < 10; i++)
{
try
{
if (Clipboard.ContainsText())
{
strClipboard = Clipboard.GetText();
Clipboard.Clear();
break;
}
}
catch (Exception ex)
{
Log(ex.ToString());
//fix for OpenClipboard Failed (Exception from HRESULT: 0x800401D0 (CLIPBRD_E_CANT_OPEN))
//https://stackoverflow.com/questions/12769264/openclipboard-Failed-when-copy-pasting-data-from-wpf-datagrid
//https://stackoverflow.com/questions/68666/clipbrd-e-cant-open-error-when-setting-the-clipboard-from-net
System.Threading.Thread.Sleep(10);
}
}
Log(strClipboard);
}
private void Log(string text)
{
if (Isdisposed) return;
textBoxLog.Text = text;
}
如果您遇到过类似问题,请告诉我。
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。