Я сделал несколько попыток, чтобы решить эту проблему, и несколько поисков в 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);
}