减少访问剪贴板和SendKeys.SendWait()的thread.sleep时间

时间:2014-04-29 14:51:47

标签: c# clipboard sendkeys thread-sleep

我需要使用热键将模板应用于现有的text / html内容。

首先我得到text / html然后我处理这个文本/ html来添加和删除我的text / html。

我是使用剪贴板和热键完成的。

    wait 1(){ while (Win32Api.GetOpenClipboardWindow() != IntPtr.Zero)
               {
                   Thread.Sleep(100);
               }
            }

      wait 2(){       
            do
            {
                Thread.Sleep(200);
            }
            while (Win32Api.GetOpenClipboardWindow() != IntPtr.Zero);
             }

............................................... .................................

     Stopwatch sw = new Stopwatch();
     sw.Start();
            wait1();
            //Save Existing Clipboard Data
            clipboardData = Clipboard.GetDataObject();
            Clipboard.Clear();
            //ToDo: Try to reduce both the sleep time
            Thread.Sleep(300);
            SendKeys.SendWait("^a");
            Thread.Sleep(500);
            SendKeys.SendWait("^x");
            wait2();
          //here is code to get clipboard text/html and add and stripoff 
          //text/html **newdata** is text/html after my core logic.
            wait2();
            Clipboard.SetDataObject(newdata, true);
            wait2();
            SendKeys.SendWait("^v");
            wait2();
            SendKeys.SendWait("^{HOME}");
            wait1();
            Clipboard.Clear();
            wait2();
            Clipboard.SetDataObject(clipboardData, true, 2, 200);
    sw.Stop();
    var time = sw.ElapsedMilliseconds; //gives above 7000ms(7sec)

这里我睡觉线程100ms用于访问剪贴板。

和sendWait(“^ a”)Ctrl + A和Ctrl + X我睡眠时间为300毫秒和500毫秒。

当我改变/减少线程休眠时间时,它不能正常工作(模板未应用)。 我使用stopWatch知道时间经过然后它给出了7000毫秒(7秒)。

当我们手动执行Ctrl + A和Ctrl + X以及Ctrl + V时,它会在第二个或最长2秒内快速完成

是否有任何最简单的方法可以减少时间或以任何方式进行不同的编码。

1 个答案:

答案 0 :(得分:1)

如果减少睡眠时间,剪切代码将无法工作,这里是通过使用切割发送密钥一次又一次地使其工作的工作方式如下所示

SendKeys.SendWait("^x");
SendKeys.SendWait("^x");

现在它会将内容剪切到你的系统剪贴板,剩下的代码要粘贴使用^ v发送键工作正常。