2015-10-09 7 views
0

Я работаю над приложением, которое одним нажатием кнопки очистит как буфер обмена, так и буфер обмена.Очистка/освобождение офисного буфера обмена с использованием C# Interop

Я попытался System.Windows.Forms.Clipboard.Clear() и следующие

static class WinAPI 
{ 
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
    static extern bool OpenClipboard(System.IntPtr WinHandle); 
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
    static extern bool EmptyClipboard(); 
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
    static extern bool CloseClipboard(); 
    public static void ClearClipboard() 
    { 
     if (OpenClipboard(System.IntPtr.Zero)) 
     { 
      EmptyClipboard(); 
      CloseClipboard(); 
     } 
    } 
} 

Оба они кажутся понятными только системный буфер. Есть ли способ распространить это на буфер обмена в офисе.

ответ

2

Вы можете скопировать одно пространство в буфер обмена, если другие методы являются неприятными?

0

Вы можете попробовать представленные решения here. Он предназначен для VBA, но вы можете легко преобразовать код в C#.

Сообщите мне, если вам нужна помощь.

2

Per this question, ответ, кажется, «нет, не чисто»:

Там не было никакой поддержки VBA для работы с буфером обмена Office, после Excel 2000. SendKeys является слоеное, но это единственный способ ,

«SendKeys» - это «решение», в котором вы отправляете необходимые нажатия клавиш или оконные сообщения - при условии, что один из них запущен, если нет, вам нужно будет запустить его. Есть и другие способы сделать это, например AutoIt. К сожалению, все эти решения являются хрупкими и подвержены разрыву между версиями Office, поскольку они опираются на внутренние детали имен окон и их появления. Прежде чем вы это сделаете, убедитесь, что вы готовы принять бремя обслуживания.

Более подходящий подход, вероятно, говорит, кто хочет, чтобы это приложение не могло быть сделано, потому что Microsoft хочет, чтобы управление буфером обмена оставалось у конечного пользователя - или, альтернативно, что есть уже кнопка для очистки буфера обмена и он существует в Office (Alt, H, FO показывает его в моей версии). Это не всегда работает, но когда это делает, это экономит вам массу работы.

Смежные вопросы