Как вызвать окно свойств файла?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Как вызвать окно свойств файла?

Сообщение brigval » 16.03.2008 (Вс) 11:59

Подскажите, пожалуйста, как программо вызвать окно свойств, открывающееся по "правый клик по файлу/папке > Свойства"?
brigval

Griffin
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 22.05.2006 (Пн) 10:28

Сообщение Griffin » 16.03.2008 (Вс) 16:22

тебе именно окно нужно или хочешь просто знать одно из свойств файла?

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 16.03.2008 (Вс) 22:03

Надо вызвать само окно как дополнительный сервис.

Сегодня нашел в Интернете такой код:
Код: Выделить всё
Private Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long
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

Public 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()
Call ShowProps("C:\AUTOEXEC.BAT", Me.hwnd)
End Sub



Переделал для VB.NET
Код: Выделить всё
Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (ByVal SEI As SHELLEXECUTEINFO) As Integer


   Private Const SEE_MASK_INVOKEIDLIST = &HC
   Private Const SEE_MASK_NOCLOSEPROCESS = &H40
   Private Const SEE_MASK_FLAG_NO_UI = &H400



   Public Structure SHELLEXECUTEINFO
      Dim cbSize As Integer
      Dim fMask As Integer
      Dim hwnd As Integer
      Dim lpVerb As String
      Dim lpFile As String
      Dim lpParameters As String
      Dim lpDirectory As String
      Dim nShow As Integer
      Dim hInstApp As Integer
      Dim lpIDList As Integer
      Dim lpClass As String
      Dim hkeyClass As Integer
      Dim dwHotKey As Integer
      Dim hIcon As Integer
      Dim hProcess As Integer
   End Structure

   Public Sub ShowProps(ByVal FileName As String, ByVal OwnerhWnd As Integer)
      Dim SEI As SHELLEXECUTEINFO
      Dim r As Integer
      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


Но на строке
Код: Выделить всё
r = ShellExecuteEX(SEI)
программа останавливается и выдает сообщение
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.


Это моя вторая программка на VB.NET. Хочу сделать для работы удобный просмотр прав доступа пользователей на сервере. Что можно здесь предпринять?
brigval

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.03.2008 (Пн) 9:04

brigval, ну что же все встают на одни и те же грабли? Замени все Long в декларациях и структурах на Integer и будет тебе щастье.
З.Ы. Хотя возможно есть и другие ошибки, просто эта сразу в глаза бросается.
Весь мир матрица, а мы в нем потоки байтов!

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 17.03.2008 (Пн) 9:15

Уважаемый, Viper, но в моем коде для VB.NET переменные типа Long отсутствуют, а ошибка все-таки выскакивает.
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 17.03.2008 (Пн) 13:06

Заработало!

Попробовал запустить код на VB6 и вяснил, что вместо
Код: Выделить всё
Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (ByVal SEI As SHELLEXECUTEINFO) As Integer

надо было
Код: Выделить всё
Declare Function ShellExecuteEX Lib "shell32.dll" Alias "ShellExecuteEx" (ByRef SEI As SHELLEXECUTEINFO) As Integer
Пользоательский тип не может передаваться по значению (ByVal), что мне сам автоматом подставил VB.NET. Малость подпортил код :)
brigval

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 17.03.2008 (Пн) 14:05

brigval, извиняюсь, попутал разные куски кода для vb6 и vb.net.
Весь мир матрица, а мы в нем потоки байтов!

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 18.03.2008 (Вт) 17:39

Viper писал(а):попутал разные куски кода
Я так и подумал. Да ничего страшного. Бывает. Спасибо за отклик. Главное, что заработало!
brigval

brigval
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 16.10.2005 (Вс) 12:37
Откуда: Подмосковье

Сообщение brigval » 31.03.2008 (Пн) 7:53

Вопрос в продолжениие темы. Как вызвать окно свойств не только для одного, но и для некольких файлов? Внесение в переменную FileName двух путей в кавычках через пробел результата не дало.
brigval

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 31.03.2008 (Пн) 14:30

А если не через пробел, а через vbNullString, и закончить все двумя vbNullString ?

З.Ы. Это только предположение. Тухлятиной не кидаться )
label:
cli
jmp label

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 06.08.2008 (Ср) 9:40

А можно ли открыть свойства файла, да и ещё автоматом активировать вкладку Безопасность(Security) ?


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 92

    TopList