Проверьте, заблокирован ли буфер обмена или перехватите исключение - PullRequest
0 голосов
/ 16 апреля 2020

Я сделал несколько попыток, чтобы решить эту проблему, и несколько поисков в Google, чтобы найти решение, которое подойдет, но ничего не кажется правильным.

Методы User32 позволят вам заблокировать или разблокировать буфер обмена, но я просто хочу проверить, разблокирован ли он. Я не хочу, чтобы мое приложение мешало другим приложениям, использующим буфер обмена. Обычно это блокируется офисом, поэтому я сейчас проверяю эти приложения.

Единственная причина, по которой мне нужно это сделать, заключается в том, что, несмотря на попытку / отлов, мое приложение по-прежнему падает и выполняет не выбрасывайте ни одно исключение здесь или в моем основном методе (см. выдержку ниже).

Так что мне нужно предложение о том, как проверить буфер обмена, заблокирован он или нет, или как на самом деле перехватить исключение, когда буфер обмена заблокирован.

Второй поток:

private static string GetCurrentText()
        {
            try
            {
                if (!Process.GetProcessesByName("winword.exe").Any() && !Process.GetProcessesByName("excel.exe").Any() && !Process.GetProcessesByName("powerpnt.exe").Any() && !Process.GetProcessesByName("msaccess.exe").Any() && Clipboard.ContainsText())return Clipboard.GetText(); 
                else return "";
            }
            catch { return ""; }
        }

Основной поток:

 try
                {
                    Application.ThreadException += Application_ThreadException;
                    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
                    Application.Run(new frmMain());
                }
                catch (Exception e)
                {
                    clsDeBugNotification.displayError(e);
                }
...