Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Формы, окна, диалоги, десктоп > Стандартные диалоги Windows


Автор: SpawnProduction 15.03.05, 15:54
Здесь представленны некоторые недокументированные API функции для вызова диалогов.

Вызывает диалог выключения компьютера

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Declare Function SHShutDownDialog Lib "shell32" Alias "#60" _
    (ByVal hOwner As Long) As Long


Вызывает диалог перезагрузки компьютера

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Declare Function SHRestartSystem Lib "shell32" Alias "#59" (ByVal hOwner As Long, _
    ByVal sPrompt As String, ByVal uFlags As Long) As Long


Новые параметры вступят в силу после перезагрузки
Строка Prompt вставляется ПЕРЕД стандартной фразой.
Парамметр uFlags аналогичен соответствующему параметру функции ExitWindowsEx. Значения флагов можно взять из Api Viewer:
EWX_LOGOFF = 0
EWX_SHUTDOWN = 1
EWX_REBOOT = 2
EWX_FORCE = 4

Возвращает vbYes или vbNo в зависимости от нажатой кнопки.
hOwner - хэндл родительского окна - в обоих приведенных выше функциях не влияют на положение окна диалога - оно расположено в центре десктопа, а используются для получения сообщения WM_QUIT, которое можно обработать перед выходом.

Вызывает диалог "Выполнить"

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Declare Function SHRunDialog Lib "shell32" Alias "#61" (ByVal hOwner As Long, _
    ByVal hIcon As Long, ByVal sDir As String, ByVal sTitle As String, ByVal sPrompt As String, _
    ByVal uFlags As Long) As Long


Передаваемые параметры:
hOwner - хэндл родителя.
hIcon - хэндл иконки, которую можно поместить вместо стандартной (окошко программ с песочными часами)
sDir - рабочий каталог, можно передать 0 (об'явив как Long) - тогда каталог, в котором расположена программа.
sTitle и sPrompt - соответственно заголовок и подсказка диалога.
uFlags - передаваемые параметры
Run_NOBROWSE = 1 Убрать кнопку Найти
Run_NODEFAULT = 2 Оставить тект бокс чистым.
Run_CALCDIRECTORY = 4 Получить рабочую директорию из имени файла
Run_NOLABEL = 8 Убирает надпись перед текст боксом.

Вызывает диалог выбора иконки (как при смене значка на десктопе)

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Declare Function SHChangeIconDialog Lib "shell32" Alias "#62" (ByVal hOwner As Long, _
    ByVal sFilename As String, ByVal nBuf As Long, nIconIndex As Long) As Long


Параметры
hOwner - хэндл родителя.
sFileName - полный путь файла с иконками (должен существовать). Если в указанном файле нет иконок, вызываются иконки Shell32.dll. sFileName должен быть максимальной длинны, например, так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    sFileName = sFileName & String$(260 - Len(sFileName), 0)

nBuf - буфер для имени файла, если имя максимальной длины, то можно передавать 0, если нет - максимальный размер
nIconIndex - до выполнения - 0, после выполнения функции возвращает номер иконки в файле. Далее эту иконку можно вытащить с помощью вполне документированной функции ExtractIconEx из той же библиотеки.

Функция вызывает диалог "Свойства"

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Private Declare Function SHObjectProperties Lib "shell32" Alias "#178" (ByVal hOwner As Long, _
    ByVal uFlags As Long, ByVal sName As String, ByVal sParam As String) As Long


Параметры
hOwner - хэндл родителя.
uFlags - может принимать два значения - 1 для свойств принтера, 2 - для файла
sName - имя принтера или файла. Если вместо имени файла указаны папка или диск, вызывается соответствующее окно свойств. Если указано "" - появляются свойства Системы.
sParam - название вкладки на пропертях, которую надо показать. Если предать пустую строку или несуществующую вкладку - будет показана первая вкладка.



Важное замечание, автор Super-Vadim

В функции "Диалог "Свойства"" параметры имени файла и вкладки, нужно передавать предварительно отъюникодив (в XP точно), а то работать не будет...
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    'Command1 – кнопка
    ' - - - - - -
    'Код формы
     
    Private Declare Function ShowPropertiesObj Lib "shell32" Alias "#178" (ByVal hOwner As Long, ByVal uFlags As Long, ByVal fFileName As String, ByVal fTabName As String) As Long
     
    Private Function ShowProperties(ByVal hOwnerForm As Long, ByVal pFileName As String, Optional ByVal pTabName As String = "") As Long
      pFileName = StrConv(pFileName, vbUnicode)
      pTabName = StrConv(pTabName, vbUnicode)
      ShowProperties = ShowPropertiesObj(hOwnerForm, 2, pFileName, pTabName)
    End Function
     
    Private Sub Command1_Click()
      ShowProperties Form1.hWnd, "C:\file.txt", "общие" '("общие", "сводка" и т.д.)
      ShowProperties Form1.hWnd, "C:\"
      ShowProperties Form1.hWnd, "C:\Папка"
    End Sub

Автор: B.V. 24.05.07, 14:14
Способ №2:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
       Const SEE_MASK_INVOKEIDLIST = &HC
       Const SEE_MASK_NOCLOSEPROCESS = &H40
       Const SEE_MASK_FLAG_NO_UI = &H400
     
       Private Type SHELLEXECUTEINFO
          cbSize As Long
          fMask As Long
          hwnd As Long
          lpVerb As String
          lpFile As String
          lpParameters As String
          lpDirectory As String
          nShow As Long
          hInstApp As Long
          lpIDList As Long
          lpClass As String
          hkeyClass As Long
          dwHotKey As Long
          hIcon As Long
          hProcess As Long
       End Type
     
       Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
     
       Sub ShowProps(FileName As String, OwnerhWnd As Long)
          Dim SEI As SHELLEXECUTEINFO
          Dim r As Long
          With SEI
              .cbSize = Len(SEI)
              .fMask = SEE_MASK_NOCLOSEPROCESS Or _
             SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
              .hwnd = OwnerhWnd
              .lpVerb = "properties"
              .lpFile = FileName
              .lpParameters = vbNullChar
              .lpDirectory = vbNullChar
              .nShow = 0
              .hInstApp = 0
              .lpIDList = 0
          End With
          r = ShellExecuteEX(SEI)
       End Sub
     
       Private Sub Form_Load()
          ShowProps "c:\config.sys", Me.hwnd
       End Sub

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)