DerekT-P
Well it's a long time since I hosted Word inside a form panel ... VB6 in fact! But one of the issues is that Notepad is a single-window application, so the main executable just has a main window and you can take parentage of that. Word is a multi-document-interface application, and the executable launches a child window for each document displayed. (HINT: Open task manager, and then launch Word. You'll see one instance of Word. Within word, create a new document, then another. Task manager still shows a SINGLE copy of word, but with three separate windows listed. Do the same with Notepad - you'll see three separate instances of the executable running). One of the issues is that if Word is already running, launching it the way you are may get the wrong window, or none at all. In fact with no existing instance of Word running, your code seems (sometimes!) to work fine for me, with the document appearing in the panel on my form.
Чтобы сделать то, что вы хотите, вам лучше, чтобы Word открыл определенный документ при запуске, а затем вы можете взять на себя ответственность за основное окно (предполагая, что Word является приложением по умолчанию для файлов .doc):
proc = Process.Start("C:\MyFolder\MyDocument.doc")
Кроме того, вы можете явно запросить winword.exe и передайте имя файла в качестве параметров командной строки:
dim startInfo as new ProcessStartInfo("winword.exe")
startInfo.Arguments = "/q /t c:\users\sos\test.doc"
proc = Process.Start(startInfo)
(Здесь,
\q
указывает "тихий режим", поэтому не показывает заставку слова;
\t
переключатель указывает, что следующий параметр-это файл, который нужно открыть.) Остальная часть вашего кода остается неизменной.
Однако возникнут проблемы, если вы закроете свое приложение без предварительного закрытия Word, и вы можете в конечном итоге создать файлы восстановления для своих документов. Вы также можете столкнуться с проблемой, что если пользователь нажмет кнопки "минимизировать" или "восстановить" в строке заголовка Word, это слово уменьшится и не будет видно на вашей панели - безвозвратно. Похоже, что максимизация тоже работает не совсем правильно!
Лучший способ сделать это, вероятно, полностью автоматизировать Word, и для этого вам нужно будет использовать библиотеки взаимодействия и непосредственно манипулировать Word и его окнами. Это также имеет то преимущество, что вы можете управлять несколькими окнами документа, получать доступ к содержимому документа и манипулировать им, показывать / скрывать панели инструментов / ленты и так далее. Однако это довольно большой шаг вперед по сравнению с простым кодом выше. Google "автоматизирует word from vb.net". Используя этот метод, вам, скорее всего, придется искать правильный дескриптор окна, чтобы взять на себя ответственность; используйте функцию Win32
FindWindowEx
переходим в название словоформы. В зависимости от версии Windows и Word это либо "
test.doc - Microsoft Word
" или "
Microsoft Word - test.doc
Как только у вас есть правильная ручка окна, вы можете взять на себя ответственность, как вы это делаете выше.