Дескриптор для ShellExecute () - Родительское окно?

StackOverflow https://stackoverflow.com/questions/315527

  •  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'"

Может также работать (не проверено) с двойными двойными кавычками: " & Quot; & Quot; ... " & Quot;

"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""

, как показано эта тема .

<Ч>

На самом деле, как упоминалось в другом вашем вопросе от Andy и Месидин , а также в Руководство по функциям ShellExecute , вы можете открыть файл и передать его путь в параметре.

ShellExecute( NULL, "open", 
              "Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\", 
              NULL, SW_SHOWNORMAL);

Это означает, что Excel является приложением по умолчанию для открытия файлов расширения .xls.

Другие советы

Когда вы увидите, что он описан как «дескриптор родительского окна», " это означает, что это окно, которое будет родительским окном любого пользовательского интерфейса, который функция выберет для отображения. Дескриптор, который вы передаете, может или не может быть родительским для какого-то другого окна во время вызова ShellExecute , но это не имеет значения.

Почему вы специально ShellExecuting Excel? Если у них есть OpenOffice.org, они сломаны - вам действительно нужно вызвать " Open " глагол в файле электронной таблицы, вам не нужно жестко кодировать в " Excel " имя, для этого и существует ShellExecute.

Есть ли какая-то конкретная причина, по которой вы используете ShellExecute?

Вы можете открыть файл xls, используя [System.Diagnostics.] Process.Start [имя файла]
Прошу прощения, я не смотрел на теги & amp; Предположим, что вы используете .net

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top