C# 为什么sendkey不';不能在其他应用程序中工作
我编写了一个程序,它使用全局热键存储用户拖动的文本,并在用户按下crtl+shift+w时读取文本。 但是,当拖动的文本出现在其他应用程序(如firefox、adobe reader等)中时,该程序无法工作。 下面是挂接键方法中的代码: 它的作用是将剪贴板的文本存储到字符串中,并发送crtl+c键(用于存储(或抓取)拖动的文本),然后将文本存储到另一个字符串中,然后将备份(ed)文本恢复到剪贴板中C# 为什么sendkey不';不能在其他应用程序中工作,c#,.net,string,clipboard,drag,C#,.net,String,Clipboard,Drag,我编写了一个程序,它使用全局热键存储用户拖动的文本,并在用户按下crtl+shift+w时读取文本。 但是,当拖动的文本出现在其他应用程序(如firefox、adobe reader等)中时,该程序无法工作。 下面是挂接键方法中的代码: 它的作用是将剪贴板的文本存储到字符串中,并发送crtl+c键(用于存储(或抓取)拖动的文本),然后将文本存储到另一个字符串中,然后将备份(ed)文本恢复到剪贴板中 有什么想法吗?谢谢。SendKeys是微软应该(但不能)将其从.NET中剔除的一个vb6缺陷。许多
有什么想法吗?谢谢。SendKeys是微软应该(但不能)将其从.NET中剔除的一个vb6缺陷。许多可能的故障模式,每个人都忽略的一个是,当您使用调试器并启动VS提升(也称为“以管理员身份运行”)时,它无法工作。请改用UI自动化库。@HansPassant对不起,我不明白你说的话,英语不是我的母语。你能更简单地解释一下吗?谢谢与屏幕阅读器使用的内容相同。您可以在应用程序中处理诸如“活动文本选择”之类的事情,而不必依赖剪贴板。但这是一个广泛的主题,不容易在问答网站上的答案中涵盖。你也会认为剪贴板的内容是纯文本,可以通过复制内容、像现在一样滥用剪贴板以及将文本放回剪贴板来“恢复”而崩溃——如果剪贴板的当前内容(在你的代码运行之前)是图像吗?@Damien_The_unsiver这不是主要问题,你提到的问题可以解决,但主要是如何在这样的应用程序中抓取拖动的文本?再次感谢。
void hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
//System.Threading.Thread th;
string backup = Clipboard.GetText();
SpeechSynthesizer speaker = new SpeechSynthesizer();
speaker.SetOutputToDefaultAudioDevice();
string text = null;
SendKeys.SendWait("^{c}");
text = Clipboard.GetText();
//IDataObject format= Clipboard.GetDataObject();
// string[] str = format.GetFormats();
// MessageBox.Show(str[0]);
MessageBox.Show(text);
Clipboard.SetText(backup);
speaker.Speak(text);
}