Дескриптор для ShellExecute () - Родительское окно?
-
10-07-2019 - |
Вопрос
Я пытаюсь использовать ShellExecute открыть файл в Excel. Я читал о функции на форумах MSDN и нашел следующую информацию о дескрипторе, который является первым параметром:
" hwnd [in] Дескриптор окна владельца, используемого для отображения пользовательского интерфейса (UI) или сообщений об ошибках. Это значение может быть NULL, если операция не связана с окном. & Quot;
Я также слышал, что это называется дескриптором родительского окна. Что такое окно родитель / владелец? Как вы видите ниже, я использую NULL для дескриптора, но поскольку операция действительно связана с окном, мне, вероятно, нужен дескриптор, но я не знаю, что использовать для дескриптора.
ShellExecute(NULL, "open" ,"Excel.exe",
"C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls",
NULL, SW_SHOWNORMAL);
Решение
Это обычно 0
hwnd: родительское окно, которое получит возможное окно сообщения. Этот параметр обычно равен 0.
Это относится к окну верхнего уровня: открываемое окно не имеет родителя и является основным окном для выполняемого приложения.
Когда вы переключаетесь между приложениями (ALT-TAB), вы отображаете следующее окно верхнего уровня (следующее приложение с родительским дескриптором, равным 0) в z-порядке (например).
Конечно, родитель вашего приложения не может быть само окно рабочего стола :
Если вы создаете дочернее окно, чьим родителем является GetDesktopWindow (), ваше окно теперь приклеивается к окну рабочего стола. Если ваше окно затем вызывает что-то вроде MessageBox (), то это модальное диалоговое окно, а затем вступают в силу вышеприведенные правила, и рабочий стол отключается, и компьютер загружается.
Для пути я бы посоветовал двойные кавычки, окружающие простые кавычки: " '...' "
"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"
Может также работать (не проверено) с двойными двойными кавычками: , как показано эта тема . На самом деле, как упоминалось в другом вашем вопросе от Andy и Месидин , а также в Руководство по функциям ShellExecute , вы можете открыть файл и передать его путь в параметре. Это означает, что Excel является приложением по умолчанию для открытия файлов расширения .xls. " & Quot; & Quot; ... " & Quot; код> р>
"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""
ShellExecute( NULL, "open",
"Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\",
NULL, SW_SHOWNORMAL);
Другие советы
Когда вы увидите, что он описан как «дескриптор родительского окна», " это означает, что это окно, которое будет родительским окном любого пользовательского интерфейса, который функция выберет для отображения. Дескриптор, который вы передаете, может или не может быть родительским для какого-то другого окна во время вызова ShellExecute
, но это не имеет значения.
Почему вы специально ShellExecuting Excel? Если у них есть OpenOffice.org, они сломаны - вам действительно нужно вызвать " Open " глагол в файле электронной таблицы, вам не нужно жестко кодировать в " Excel " имя, для этого и существует ShellExecute.
Есть ли какая-то конкретная причина, по которой вы используете ShellExecute?
Вы можете открыть файл xls, используя [System.Diagnostics.] Process.Start [имя файла]
Прошу прощения, я не смотрел на теги & amp; Предположим, что вы используете .net