У меня есть консольное приложение с «выходным типом» «приложения Windows» (для достижения безголового поведения, то есть без интерфейса пользователя, без консольного окна). Цель состоит в том, чтобы «очистить» текст в буфере обмена Windows, т. Е. Обрезать все начальные и конечные пробелы и удалить форматирование.Почему мое приложение, управляющее буфером обмена, ведет себя по-разному, когда выполняется за пределами Visual Studio?
Он отлично работает при отладке, но когда я запускаю его из проводника, он просто очищает содержимое буфера обмена.
Вот мой код:
[STAThread]
internal static void Main(string[] args)
{
var currentClipboardText = System.Windows.Clipboard.GetText();
// only if the clipboard has text; leave any other content intact.
if(!string.IsNullOrEmpty(currentClipboardText))
{
currentClipboardText = currentClipboardText.Trim();
var pattern = @"[\t\r\n\v\f\u2028\u2029]"; // match vert. whitesp & tabs
currentClipboardText = Regex.Replace(currentClipboardText, pattern, " ");
System.Windows.Clipboard.SetDataObject(currentClipboardText);
}
}
Пример ввода с форматированием в MS Word, копируется в буфер обмена:
После того как я запустить программу в dubugger (либо в "отладки" режим или режим «освобождения», не имеет значения), вот результат, вставленный обратно в Word из буфера обмена:
Если я делаю то же упражнение, но запускаю программу, дважды щелкнув по ней в проводнике Windows (т. в каталоге \bin\Debug
), там не осталось в буфер обмена, чтобы вставить в слово текст:
Какая разница здесь? Почему он не работает за пределами Visual Studio?
Интересно. Теперь я догадываюсь, что мой вопрос: почему * не * это ясно при отладке? –
@ adv12 - но это зависит от детского процесса, не так ли? –
Теперь с изменением приложение сбой при запуске из проводника. Все еще отлично работает от отладки VS. –