Стандартные пути в Окнах XP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Стандартные пути в Окнах XP

Сообщение Sirik » 28.05.2004 (Пт) 15:11

Вопрос такой: как узнать путь к перечню программ в Пуск->Программы? Ведь есть папка админа (All users) и папки пользователей (по их имени). Какую выбрать, чтобы для всех был полный список программ?

И еще один бональный вопрос: как "вытащить" иконку из файла (*.exe)?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.05.2004 (Пт) 15:53

На 2 вопрос нашёл ответ:
Код модуля:
Код: Выделить всё
Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias _
"ExtractAssociatedIconA" (ByVal hInst As Long, _
ByVal lpIconPath As String, lpiIcon As Long) As Long

Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, _
ByVal xLeft As Long, ByVal yTop As Long, _
ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyHeight As Long, _
ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, _
ByVal diFlags As Long) As Long


Код формы:
Код: Выделить всё
Private Sub Command1_Click()
Dim sPath As String, hIcon As Long, nIcon As Long
sPath = "c:\winsent.exe"
hIcon = ExtractAssociatedIcon(App.hInstance, sPath, nIcon)
DrawIconEx Picture1.hdc, 1, 1, hIcon, 16, 16, 0, 0, 3
End Sub


Вот!

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Re: Стандартные пути в Окнах XP

Сообщение Шурик » 28.05.2004 (Пт) 16:44

Sirik писал(а):Вопрос такой: как узнать путь к перечню программ в Пуск->Программы? Ведь есть папка админа (All users) и папки пользователей (по их имени). Какую выбрать, чтобы для всех был полный список программ?

Выбери все и составь список прог через проверку, чтобы не повторялись...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: Стандартные пути в Окнах XP

Сообщение Sirik » 29.05.2004 (Сб) 10:58

Z-zzz писал(а):Выбери все и составь список прог через проверку, чтобы не повторялись...

Это конечно идея не плохая, но я хочу чтобы для каждого юзера был отдельный список (я к этому только пришёл). Так вот, как мне узнать какой сейчас юзер загружен? Тогда я смогу загрузить список из его каталога

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 29.05.2004 (Сб) 18:44

Функция GetUserName.
Но далеко не всегда имя пользователя и его папка носят одинаковое название!
Тут нужно что0то другое.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 29.05.2004 (Сб) 19:03

Вот это:
Код: Выделить всё
Const CSIDL_DESKTOP = &H0
Const CSIDL_PROGRAMS = &H2
Const CSIDL_CONTROLS = &H3
Const CSIDL_PRINTERS = &H4
Const CSIDL_PERSONAL = &H5
Const CSIDL_FAVORITES = &H6
Const CSIDL_STARTUP = &H7
Const CSIDL_RECENT = &H8
Const CSIDL_SENDTO = &H9
Const CSIDL_BITBUCKET = &HA
Const CSIDL_STARTMENU = &HB
Const CSIDL_DESKTOPDIRECTORY = &H10
Const CSIDL_DRIVES = &H11
Const CSIDL_NETWORK = &H12
Const CSIDL_NETHOOD = &H13
Const CSIDL_FONTS = &H14
Const CSIDL_TEMPLATES = &H15
Const MAX_PATH = 260
Private Type SHITEMID
    cb As Long
    abID As Byte
End Type
Private Type ITEMIDLIST
    mkid As SHITEMID
End Type
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Sub Form_Load()
    'Установим автоматическую перерисовку
    Me.AutoRedraw = True

    Me.Print "Главное меню: " + _
    GetSpecialFolder(CSIDL_STARTMENU)
    Me.Print "Избранное: " + _
    GetSpecialFolder(CSIDL_FAVORITES)
    Me.Print "Пуск>Программы: " + _
    GetSpecialFolder(CSIDL_PROGRAMS)
    Me.Print "Рабочий стол: " + _
    GetSpecialFolder(CSIDL_DESKTOP)
End Sub

Private Function GetSpecialFolder(CSIDL As Long) As String
    Dim r As Long
    Dim IDL As ITEMIDLIST
    'Получаем специальную папку
    r = SHGetSpecialFolderLocation(100, CSIDL, IDL)
    If r = NOERROR Then
        'Создаем буфер
        Path$ = Space$(512)
        'Получаем путь из списка
        r = SHGetPathFromIDList(ByVal IDL.mkid.cb, _
        ByVal Path$)
        'Удаляем ведущие нули (Chr(0))
        GetSpecialFolder = Left$(Path, InStr(Path, _
        Chr$(0)) - 1)
        Exit Function
    End If
    GetSpecialFolder = ""
End Function


Не подойдет?
Работает на всех "Виндах", начиная с 95'й и NT4 :P
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 29.05.2004 (Сб) 19:10

А вот и все допустимые константы:

Код: Выделить всё
'папка "Администрирование" (NT)
Public Const CSIDL_ADMINTOOLS As Long = &H30
'данные приложений
Public Const CSIDL_APPDATA As Long = &H1a
'общая папка "Администрирование" (NT)
Public Const CSIDL_COMMON_ADMINTOOLS As Long = &H2f
'общие данные приложений
Public Const CSIDL_COMMON_APPDATA As Long = &H23
'общий рабочий стол
Public Const CSIDL_COMMON_DESKTOPDIRECTORY As Long = &H19
'общие документы
Public Const CSIDL_COMMON_DOCUMENTS As Long = &H2E
'общее "Избранное"
Public Const CSIDL_COMMON_FAVORITES As Long = &H1F
'общие программы
Public Const CSIDL_COMMON_PROGRAMS As Long = &H17
'общее меню "Пуск"
Public Const CSIDL_COMMON_STARTMENU As Long = &H16
'общая автозагрузка
Public Const CSIDL_COMMON_STARTUP As Long = &H18
'общие шаблоны
Public Const CSIDL_COMMON_TEMPLATES As Long = &H2d
'соединения с сетью
Public Const CSIDL_CONNECTIONS As Long = &H31
'файлы cookie
Public Const CSIDL_COOKIES As Long = &H21
'рабочий стол
Public Const CSIDL_DESKTOP As Long = &H0
'полный путь к рабочему столу
Public Const CSIDL_DESKTOPDIRECTORY As Long = &H10
'избранное
Public Const CSIDL_FAVORITES As Long = &H6
'шрифты
Public Const CSIDL_FONTS As Long = &H14
'журнал
Public Const CSIDL_HISTORY As Long = &H22
'кэш страниц IE
Public Const CSIDL_INTERNET_CACHE As Long = &H20
'локальные настройки программ
Public Const CSIDL_LOCAL_APPDATA As Long = &H1c
'мои рисунки
Public Const CSIDL_MYPICTURES As Long = &H27
'личная папка
Public Const CSIDL_PERSONAL As Long = &H5
'мои документы
Public Const CSIDL_PROFILE As Long = &H28
'папка Program Files
Public Const CSIDL_PROGRAM_FILES As Long = &H26
'общая папка Program Files
Public Const CSIDL_PROGRAM_FILES_COMMON As Long = &H2b
'программы
Public Const CSIDL_PROGRAMS As Long = &H2
'недавние документы
Public Const CSIDL_RECENT As Long = &H8
'меню "Отправить"
Public Const CSIDL_SENDTO As Long = &H9
'меню "Пуск"
Public Const CSIDL_STARTMENU As Long = &Hb
'автозагрузка
Public Const CSIDL_STARTUP As Long = &H7
'системная папка
Public Const CSIDL_SYSTEM As Long = &H25
'шаблоны
Public Const CSIDL_TEMPLATES As Long = &H15
'папка Windows
Public Const CSIDL_WINDOWS As Long = &H24


Тебе, полагаю, нужна папка "общих программ":
Код: Выделить всё
Public Const CSIDL_COMMON_PROGRAMS As Long = &H17
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 9

    TopList