Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么sendkey不';不能在其他应用程序中工作_C#_.net_String_Clipboard_Drag - Fatal编程技术网

C# 为什么sendkey不';不能在其他应用程序中工作

C# 为什么sendkey不';不能在其他应用程序中工作,c#,.net,string,clipboard,drag,C#,.net,String,Clipboard,Drag,我编写了一个程序,它使用全局热键存储用户拖动的文本,并在用户按下crtl+shift+w时读取文本。 但是,当拖动的文本出现在其他应用程序(如firefox、adobe reader等)中时,该程序无法工作。 下面是挂接键方法中的代码: 它的作用是将剪贴板的文本存储到字符串中,并发送crtl+c键(用于存储(或抓取)拖动的文本),然后将文本存储到另一个字符串中,然后将备份(ed)文本恢复到剪贴板中 有什么想法吗?谢谢。SendKeys是微软应该(但不能)将其从.NET中剔除的一个vb6缺陷。许多

我编写了一个程序,它使用全局热键存储用户拖动的文本,并在用户按下crtl+shift+w时读取文本。 但是,当拖动的文本出现在其他应用程序(如firefox、adobe reader等)中时,该程序无法工作。 下面是挂接键方法中的代码:

它的作用是将剪贴板的文本存储到字符串中,并发送crtl+c键(用于存储(或抓取)拖动的文本),然后将文本存储到另一个字符串中,然后将备份(ed)文本恢复到剪贴板中


有什么想法吗?谢谢。

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);
        }