Natknąłem się na to pytanie, co dokładnie jest prośbą to samo: Prevent actions to be added to the word undo redo OR Remove actions from the undo redo CommandBarComboBox
Jak @Manu podkreślić, że samo pytanie zadano również nad pod adresem MSDN, gdzie odpowiedź brzmiała:
Metoda UndoClear opróżnia listę. To najlepsze, co możesz zrobić.
Istnieje również podobne pytanie na tutaj Word VSTO override CTRL+Z/CTRL+Y co sugeruje trasę Microsoft.Office.Interop.Word.UndoRecord
lub MessageHooks w Addins.
Po dalszych badań zauważyłem świetny pomysł na końcu tego wątku: MSDN Draw my own squigglies on Word document gdzie można śledzić swoje działania, a następnie przejść obok nich w cofania i ponawiania operacji.
Oto doskonały przykład kodu "transakcyjne cofanie/ponawianie" Can I create an undo transaction in Word or Excel? (VSTO).Można to zrobić sam sposób w VSTO z wyjątkiem jednego dużego problemu, jak zauważył Dirk Vollmar w swojej odpowiedzi:
nie sądzę, że nadpisywanie wbudowanych komend Słowo jest możliwe przy użyciu VSTO sam, choć
Nadpisałem kilka wbudowanych poleceń w VSTO, używając zdarzeń przechwytywania klawiatury, aby przechwycić polecenia: How to perform .Onkey Event in an Excel Add-In created with Visual Studio 2010? Jednak nie jestem pewien, czy można odtworzyć Wstążkę, aby przechwytywać polecenia przycisku. Dokładniej, Cofnij i Ponów są wbudowanymi galeriami w interfejsie Wstążki i nie możesz nic zrobić z wbudowaną galerią Wstążki. Oraz w wersjach jak 2010 przyciski Undo/Redo są na pasku tytułowym - i nie można add/edit buttons on the title bar using VSTO:

Więc jeśli dotyczy odłowu polecenia przycisk (wszyscy, których znam używa Ctrl + Z & Y), można wstrzyknąć kod VBA, aby uzyskać dostęp do EditUndo
i EditRedo
wydarzeń, np:
VB._VBComponent vbModule = VBProj.VBE.ActiveVBProject.VBComponents.Add(VB.vbext_ComponentType.vbext_ct_StdModule);
String functionText = "Public Sub EditUndo() \n";
functionText += "MsgBox \"Undo Happened\"\n";
functionText += "End Sub";
vbModule.CodeModule.AddFromString(functionText);
Główny problem z tym podejściem jest zaufanie musi być udzielona.
Inna odpowiedź w tym samym QA Can I create an undo transaction in Word or Excel? (VSTO) jest Mike Regan, który odpowiedział na 3 miesiące po Dirk. Użył ukrytego dokumentu i umieścił go w prawdziwym dokumencie, kiedy jest potrzebny, aby dowolna ilość akcji VSTO była jednym cofnięciem.
Nadal nie rozwiązuje problemu zapobiegania zapisywaniu akcji w historii cofania.
Próbowałem klucza rejestru w celu ograniczenia UndoHistory 0 i przywrócić go z powrotem do 100 (w celu wyłączenia Historia dodając akcję), ale wydaje się jej tylko dla programu Excel https://support.microsoft.com/en-gb/kb/211922
Być może nieudokumentowany klucz reg do całkowitego wyłączenia historii Cofnij/Ponów, ale byłby to tylko odczyt przy uruchamianiu programu Word. Myślałem, że klucz UndoHistory zawierający numer zostanie odczytany przed każdym Undo/Redo, ale nie ma szczęścia w tym podejściu.
To nie jest łatwy do rozwiązania problemem istnieją duże ograniczenia, więc to może być łatwiej:
a) Przyjmij, że czar/Grammer sprawdzania Add-In jest ujęte w wykazie Undo/Redo (Pokonać).
b) Sprawdź, gdzie linia/tekst znajduje się na ekranie i wyświetl przezroczystą etykietkę wskazującą problem. Jest to o wiele trudniejsze niż się wydaje i jest mniej niż idealna, tu są dwa wielkie odpowiedzi, aby poprowadzić Cię w tej metodzie: Detecting text changes in Word 2016 from VSTO add-in lub znacznie prostsze podejście do wykrywania pozycji XY Od tego Microsoft wątku e-mail: https://groups.google.com/forum/#!topic/microsoft.public.word.vba.general/pKq4PsqD3cM
//position dialog relative to word insertion point (caret)
int left = 0;
int top = 0;
int width = 0;
int height = 0;
MSWord.Range r = Globals.ThisDocument.Application.Selection.Range;
MSWord.Window w = Globals.ThisDocument.ActiveWindow;
w.GetPoint(out left, out top, out width, out height, r);
frmPopUp newForm = new frmPopUp();
newForm.SetDesktopLocation(left + width + 2, top - newForm.Height + height);
c) Przechwytywanie zdarzeń Undo/Redo tylko za pomocą klawiatury za pomocą Transactional Undo/Redo's i pozwala użytkownikom zobaczyć atomowe Undo/Redo za pomocą przycisków. Byłoby niezwykle podejrzanie usunąć przyciski Cofnij/Ponów, co spowoduje stertę Gdzie jest mój przycisk Cofnij? skrzynie pomocnicze. Więc nie rób tego, jeśli jesteś ciekawy, można szybko dostosować dostęp do narzędzi z pliku ".qat". Ref: https://support.microsoft.com/en-us/kb/926805
d) Użyj myszki i sprawdź, kiedy kliknięto przyciski Cofnij/Ponów. Oto kod do podpięcia myszy, pamiętaj, że nie będzie to przyjemne z produktami antywirusowymi firmy i nie polecam: https://blogs.msdn.microsoft.com/andreww/2009/02/24/message-hooks-in-add-ins/ lub https://github.com/gmamaladze/globalmousekeyhook.
e) Spróbuj przechwytywać wiadomości surowe okna, np Excel CustomTaskPane with WebBrowser control - keyboard/focus issues tylko uważaj jak na mój komentarz odwołującego BUG: Cant choose dates on a DatePicker that fall outside a floating VSTO Add-In Pompy że wiadomość w Urzędzie czasami wykazywać dziwne zachowanie.
Dzięki! To znacznie poprawia obecną sytuację. –