С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/2086: Рейтинг темы: голосов - 2086, средняя оценка - 4.60
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
26.08.2014, 15:06
Студворк — интернет-сервис помощи студентам
Модификация мануала от The Trick

Цитата Сообщение от The trick Посмотреть сообщение
Использование ActiveX библиотек без регистрации в VB6
Разработал модуль, который позволяет очень просто работать с незарегистрированными ActiveX библиотеками. В модуле содержится 2 функции:
Цитата Сообщение от The trick Посмотреть сообщение
Использование ActiveX контролов без регистрации в реестре.
Разработал модуль с помощью которого можно работать с ActiveX контролами незарегистрированными в реестре, а также реализована поддержка событий. В нем содержится функция ControlsAdd (аналогия метода формы Controls.Add), с помощью которой можно добавлять контролы используя путь к библиотеке и CLSID контрола. Модуль особо не тестировался, поэтому что-то может не заработать, но ActiveX контролы, созданные в VB, а также несколько стандартных библиотек работали нормально. В качестве примера, я создал 2 тестовые библиотеки и главную программу, в которой используются контролы из этих библиотек.
Многое меня не устраивало в его кодах, а именно
откуда брать CLSID, с потолка ? я там использую кое что по своему
и к чему столько сложностей для использования библиотек,
я решил объеденить все в один класс, а также разделил
на два проекта, где в первом проекте только тэсты
а во втором по суте подготовленная к компиляции ActiveX - библиотека

вот собственно класс этой библиотеки..
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
Option Explicit
'
' © Кривоус Анатолий Анатольевич (The trick), 2014
' Модифицированно Антихакер32 (CyberForum.ru)
' Класс, для использования DLL и OCX без регистрации
'
Private Const CLSID_TLI As String = "{8B21775E-717D-11CE-AB5B-D41203C10000}"
Dim oTLI As Object, cTLI As GUID, sTLI As String
Dim mObject As Object, mPath$
Const Def_MiscStatus = 131473
Dim CollPaths As New Collection, NumColl&
Dim CollObj As New Collection
 
Private Sub CollAdd(Obj As Object, Path$)
    On Error Resume Next
    If Obj Is Nothing Then Exit Sub
    CollObj.Add Obj, Obj.Name
    CollPaths.Add Path, Path
End Sub
 
Public Function CreateObject_Int(ByVal Path$, Optional Interface) As Object
    'Использование библиотеки без регистрации
    '
    Dim sClsID$, cID As GUID, ProgID$, Item&, bEx As Boolean
    Dim TLI As Object, CC As Object
    Set TLI = oTLI.TypeLibInfoFromFile(Path)
    If IsMissing(Interface) Then
 
        For Each CC In TLI.CoClasses
            bEx = True: Exit For
        Next
    ElseIf IsNumeric(Interface) Then
 
        For Each CC In TLI.CoClasses
            Item = Item + 1: If Item = Interface Then bEx = True: Exit For
        Next
        If CC Is Nothing Then Err.Raise 1, , "Нет в коллекции CoClasses"
    ElseIf InStr(1, Interface, "{") Then
        Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
            If Interface = CC.GUID Then bEx = True: Exit For
        Next
    Else: Interface = Trim(Interface)
        For Each CC In TLI.CoClasses
            If StrComp(Interface, CC.Name, 1) = 0 Then bEx = True: Exit For
        Next
    End If
    If bEx Then
        sClsID = CC.GUID
        CLSIDFromString StrPtr(sClsID), cID
        Set CreateObject_Int = CreateObjectEx(Path, cID)
        CollAdd CreateObject_Int, Path
    End If
 
End Function
 
Public Function ControlsAdd_Int(ByVal Path$, Parent As Object, Optional ByVal Interface, Optional _
ByVal Name$, Optional Container As Object, Optional LicensesKey$) As Object
    Dim sClsID$, cID As GUID, ProgID$, i&, Item&, bEx As Boolean
    Dim TLI As Object, CC As Object
    Set TLI = oTLI.TypeLibInfoFromFile(Path)
 
    If IsMissing(Interface) Then
        'Проверяются в коллекции CoClasses только контроллы
        '
        For Each CC In TLI.CoClasses
            If Not (CC.DefaultEventInterface Is Nothing) Then bEx = True: Exit For
        Next
    ElseIf IsNumeric(Interface) Then
 
        For Each CC In TLI.CoClasses
            'Если в Interface стоит номер,
            'то присвоение, по его очередности, в числе контроллов
            '
            If Not (CC.DefaultEventInterface Is Nothing) Then
                Item = Item + 1: If Item = Interface Then bEx = True: Exit For
            End If
        Next
        If CC Is Nothing Then Err.Raise 1, , "Нет в коллекции CoClasses"
    ElseIf InStr(1, Interface, "{") Then
        Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
 
            If Not (CC.DefaultEventInterface Is Nothing) Then
                If Interface = CC.GUID Then bEx = True: Exit For
            End If
        Next
    Else: Interface = Trim(Interface)
 
        For Each CC In TLI.CoClasses
 
            If Not (CC.DefaultEventInterface Is Nothing) Then
                If StrComp(Interface, CC.Name, 1) = 0 Then bEx = True: Exit For
            End If
        Next
    End If
 
    If bEx Then
        sClsID = CC.GUID
        ProgID = TLI.Name & "." & CC.Name
 
        If Len(Name) = 0 Then
            Do: i = i + 1
                If Not ObjExists(Parent, CC.Name & i) Then Exit Do
            Loop
            Name = CC.Name & i
        ElseIf ObjExists(Parent, Name) Then
            Err.Raise 1, , "Объект с именем: " & Name & " существует"
        End If
 
        If Not LicensesExists(ProgID) Then
            gLicensesKey = LicensesKey
            CLSIDFromString StrPtr(sClsID), cID
            Set ControlsAdd_Int = ControlsAdd(Path, cID, ProgID, Def_MiscStatus, Parent, Name)
            CollAdd ControlsAdd_Int, Path
        Else
            Set ControlsAdd_Int = Parent.Controls.Add(ProgID, Name, IIf(Container Is Nothing, Parent, Container))
        End If
    End If
End Function
 
Private Function LicensesExists(ProgID$) As Boolean
    On Error Resume Next
 
    If IsError(Licenses(ProgID).LicenseKey) Then
    Else: LicensesExists = True
    End If
End Function
 
Private Function ObjExists(Parent As Object, Name$) As Boolean
    On Error Resume Next
 
    If IsError(Parent.Controls(Name)) Then
    Else: ObjExists = True
    End If
End Function
 
Public Function GetTypeLibInfoFromFile(ByVal Path$) As Object
    Set GetTypeLibInfoFromFile = oTLI.TypeLibInfoFromFile(Path)
End Function
 
Private Sub Class_Initialize()
    sTLI = App.Path & "\TLBINF32.DLL"
    CLSIDFromString StrPtr(CLSID_TLI), cTLI
    Set oTLI = CreateObjectEx(sTLI, cTLI)
End Sub
 
Private Sub Class_Terminate()
    Dim v
    Set oTLI = Nothing
    Call UnloadLibrary(sTLI) 'Выгружаем TLI
    '================
    For Each v In CollObj: Set v = Nothing: Next
    'Выгружаем библиотеки
    For Each v In CollPaths: Call UnloadLibrary(CStr(v)): Next
End Sub



и картинка, по традиции..


Добавлено через 2 минуты
..Да чуть не забыл,
вот архив со всеми исходниками

DLL-OCX БезРег.rar (90.5 Кб)


Добавлено через 4 минуты
Прощще-же теперь это использовать ?

Visual Basic
1
2
3
    Set Obj = myClass.CreateObject_Int(App.Path & "\TestDLL\TrickUnregDllTest.dll")
    Obj.Text = "Привет пиплы ! (это текст из библиотеки)"
    MsgBox Obj.Text
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2014, 15:06
Ответы с готовыми решениями:

Продам готовые коды и решения на Visual Basic за 400 рублей
душу продаю:cry: Продам коды исходные на VB !!10 лет копил за 400р !!размер тока кодов 312метров там есть все ! мыло контакты удалены....

Коды на Visual Basic
Ребята всем привет,я начел изучать "Visual Basic"! Очень буду благодарен за коды по этому языку, очень интиресный язык)))! Бросайте сюда...

Вывод решения вместо Immediate в textbox (visual basic 6.0)
программа выводит решение в Immediate а я хочу разместить на форме text1 и что бы решение выводилось туда ,менял код менял не че не...

356
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
03.09.2014, 05:02
TrickControls
Всем привет.
Здесь я буду собирать библиотеку контролов (OCX) вместе с исходными кодами по мере свободного времени.
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0   Готовые решения и полезные коды на Visual Basic 6.0   Готовые решения и полезные коды на Visual Basic 6.0  

4
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
07.09.2014, 00:57
Класс для асинхронного ожидания объектов ядра

Разработал класс для асинхронного ожидания объектов ядра. Класс генерирует событие при установке объекта в сигнальное состояние или при таймауте. Класс имеет 3 метода vbWaitForSingleObject, vbWaitForMultipleObjects, IsActive, Abort. Первые два аналогичны вызову одноименных API функций без префикса "vb" и запускают ожидание объекта в новом потоке. Методы завершаются немедленно. При завершении функций в новом потоке генерируется событие OnWait, в параметрах которого содержится описатель объекта и возвращенное значение. При удачном завершении методы возвращают True, иначе False, также генерируются исключения.

Ссылка.
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
4
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
29.09.2014, 00:00
DirectX слоеное окно

По просьбе Pro_grammer'а написал пример слоеного Direct3D окна. В окне отображается 3D модель, используется мультитекстурирование, в качестве отражения используется интерактивный скриншот экрана. Используется DirectX8.
Для работы нужна библиотека dx8vb.dll

Ссылка.

8
Модератор
Эксперт .NET
 Аватар для Yury Komar
4356 / 3426 / 512
Регистрация: 27.01.2014
Сообщений: 6,257
09.10.2014, 17:28
yk-ColorSet
Как известно, если вшить манифест в VB6.exe для отображения стиля контролов Windows, то в оболочке Visual Basic пропадает отображение стандартной палитры цветов, в окне параметров\свойств выбранного элемента.

Чтобы не держать в готове все номера цветов, я решил написать маленькую палитру, точную копию той, что в Visual Basic 6.0, плюс реализовал возможность управления блоком своей свобственной палитры, с тем чтобы легко добавлять и удалять свои цвета...
Плюс ко всему, спасибо хочу сказать The trick, реализовал возможность сохранения своей палитры прямо в ресурсы EXEшника, теперь ваша палитра никогда не потеряется при перемещении исполняемого файла...
Программа не требует никаких дополнительных библиотек, всего одни файл...
При запуске помещается в Системный Трей и вызывается оттуда нажатием на иконку...

Лично для меня очень помогает, надеюсь будет полезна и другим ребятам...

P.S. тестировалась только на Windows 7 Ultimate x64. О каких либо замечаниях при тестировании в других версиях - буду рад услышать.
В архив добавил и исходник, но, небыло времени его оформить красиво, с комментариями, за что прошу прощения.
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
Вложения
Тип файла: zip yk-ColorSet by Yury Komar.zip (79.7 Кб, 126 просмотров)
3
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
09.10.2014, 18:12
Похвально видеть ваши старания, но..
есть еще приложение
Add-in VB Style Code ✰
Кликните здесь для просмотра всего текста

которое исправляет подобные ньюансы связанные с манифестом и палитрой цветов

Вот, как выглядет моя среда разработки, с манифестом:
Кликните здесь для просмотра всего текста
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
13.10.2014, 01:22
Сохранение свойств объектов в файле ✰

Существует возможность сохранять настройки в реестре,
для этого есть такие методы:
SaveSetting.. // GetSetting AppName, Section, Кеу, [Value]

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

я же решил очень упростить возможность сохранения и приминения настроек
например можно просто в событии загрузки формы написать пару строчек

Visual Basic
1
2
3
Private Sub Form_Load()
    SettingsAdd Me, "left", "top"
    LoadSettingsINI
а в событии выхода написать одну инструкцию
Visual Basic
1
2
3
4
Private Sub Form_Unload(Cancel As Integer)
    SaveSettingsINI
    End
End Sub
дело в том, что при загрузке, данные храняться в коллекции, и для сохранения,
их уже указывать необязательно..
совпадений по именам не будет так-как, ключи с именем контролов, сохраняются с именем
родителя (разделяясь через точку) а так-же, сохраняется индекс контрола( или формы)...
вот пример, как в файле это выглядит...
Кликните здесь для просмотра всего текста
[Form1]
left=2220
top=1200
[Form1.Check1]
value=1
[Form2]
left=4515
top=3450
Width=5685
Height=4485
[Form2.HScroll1]
value=20370
[Form1.Option1_0]
value=True
[Form1.Option1_1]
value=False


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

порядок выполнения комманд должен быть таким:
  • SettingsAdd (создаёт коллекцию с настройками)
  • LoadSettingsINI (загружает файл и/или конфигурирует и загружает)
  • SaveSettingsINI (сохраняет измененные настройки)

А что если я не хочу сохранять все свойства из интерфейса
а нужны только Value или Caption
к тому-же в моём примере, не используются сторонние библиотеки
и нет необходимости их подключать

кстати, еще немного улучшил свой алгоритм, теперь существует возможность
записывать целиком массив контролов (форм)

вот как это в стартовой форме
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Load()
    'Добавляем в коллекцию имена свойств для загрузки/сохранения
    SettingsAdd Me, "left", "top"
    SettingsAdd Check1, "value"
    SettingsAdd Form2, "left", "top", "Width", "Height"
    SettingsAdd Form2.HScroll1, "value"
    'Можно записать так (элемент из массива)
'    SettingsAdd Option1(0), "value"
'    SettingsAdd Option1(1), "value"
    'А можно и так, тогда сохраниться вся группа объектов из массива
    SettingsAdd Option1, "value"
 
    LoadSettingsINI
End Sub




Вот модуль с названием mSettings:
Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Option Explicit
'
'Модуль для сохранения (или применения) настроек в файле
'первая в программе должна выполнится SettingsAdd
'при загрузке и при сохранении настроек, будут обращения по именам из коллекции
'© Антихакер32 (CyberForum.ru).
'
Const q$ = "[", w$ = "]", rv$ = "=", t = ".", rm = "_"
Const prompt = _
"Данные для применения настроек пусты" & vbCrLf & _
"Необходимо указать с помощью SettingsAdd", ErrNum = 101
Const m_Def_FileName = "Settings.ini"
Dim m_FileName$, m_fso As Object
Dim f&, j$(), s$, u&, v, Key$, mApply As Boolean
Dim Co As New Collection, coDat As New Collection
 
Public Sub SettingsAdd(Obj As Object, ParamArray arg())
    'Необходимо указать форму или контрол, и имена свойств для сохранения
    'напимер: SettingsAdd Form1, "left","top"
    Dim SingleObject As Object, count&
    v = arg: ReDim Preserve v(UBound(v) + 2)
    If UBound(v) = 1 Or Obj Is Nothing Then Exit Sub '>>Выход
    On Error Resume Next
    If Not TypeName(Obj) = "Object" Then
        Set SingleObject = Obj: GoTo 101
    Else
        For Each SingleObject In Obj
101
            Key = GetKey(SingleObject): If KeyExists(Key) Then Co.Remove (Key)
            Set v(UBound(v) - 1) = SingleObject: v(UBound(v)) = Key: Co.Add v, Key
        Next
    End If
End Sub
 
Private Function KeyExists(Key$) As Boolean
    'Возвращает утверждение о наличии ключа
    On Error Resume Next
    KeyExists = Not IsError(Co(Key))
End Function
 
Private Function GetFso() As Object
    If m_fso Is Nothing Then Set m_fso = CreateObject("scripting.FileSystemObject")
    Set GetFso = m_fso
End Function
 
Private Function GetKey(Obj As Object)
    On Error Resume Next
    GetKey = Obj.Name: GetKey = Obj.Parent.Name & t & GetKey: GetKey = GetKey & rm & Obj.Index
End Function
 
Public Sub ApplySettings(Obj As Object)
    'Применение настроек для одного указанного объекта
    If coDat.count = 0 Then mApply = True: LoadSettingsINI: mApply = False
    On Error GoTo ERRR
    v = Co(GetKey(Obj)): u = UBound(v)
    For f = 0 To u - 2: CallByName v(u - 1), v(f), VbLet, coDat(v(u) & t & v(f)): Next
ERRR:
End Sub
 
Public Sub LoadSettingsINI(Optional FileName$ = m_Def_FileName)
    'Загрузка и приминение всех настроек
    'Арг. имя файла (по умолчанию "Settings.ini")
    Dim f2&, j1$(), j2$(), j3$()
    If Co.count = 0 Then Err.Raise ErrNum, , prompt
    On Error Resume Next
    m_FileName = App.Path & "\" & FileName
    If Not GetFso.FileExists(m_FileName) Then SaveSettingsINI
    s = GetFso.OpenTextFile(m_FileName).ReadAll
    j = Split(s, q)
    For f = 1 To UBound(j)
        j1 = Split(j(f), w)
        j2 = Split(j1(1), vbCrLf)
        For f2 = 1 To UBound(j2) - 1
            j3 = Split(j2(f2), rv)
            coDat.Add j3(1), j1(0) & t & j3(0)
    Next: Next
    If mApply Then Exit Sub '>>Если вызванно процедурой ApplySettings
    For Each v In Co: u = UBound(v) '---------Применение настроек
        For f = 0 To u - 2
            CallByName v(u - 1), v(f), VbLet, coDat(v(u) & t & v(f))
    Next: Next
End Sub
 
Public Sub SaveSettingsINI()
    'Сохранение настроек
    If Co.count = 0 Then Err.Raise ErrNum, , prompt
    If Len(m_FileName) = 0 Then m_FileName = App.Path & "\" & m_Def_FileName
    With GetFso.CreateTextFile(m_FileName)
        On Error Resume Next
        For Each v In Co
            u = UBound(v)
            v(u - 1).WindowState = 0
            .WriteLine q & v(u) & w
            For f = 0 To u - 2
                 .WriteLine v(f) & rv & CStr(CallByName(v(u - 1), v(f), VbGet))
    Next: Next: End With
End Sub
Вложения
Тип файла: rar Демонстрация.rar (3.6 Кб, 117 просмотров)
Тип файла: rar Work INI.rar (11.5 Кб, 117 просмотров)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38162 / 21097 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
13.10.2014, 17:22
Сохранять объекты - дело правильное... А вот подход (при котором пользователь программы должен свойства перечислять) - несколько напрягает. Мне кажется, гораздо правильнее дать интерфейс с двумя методами: сохранить_объект(объект,имя_файла) и восстановить_объекты(имя_файла). Ведь все объекты VB - это COM-объекты. А у COM-объекта можно получить всю коллекцию свойств без утомительного перечисления. Примерно вот так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Sub SaveObj(O As Object, fname As String)
Dim appTLI As TLI.TLIApplication
Dim inte   As TLI.InterfaceInfo
    fo% = FreeFile
    Open fname For Append As #fo%
    Print #fo%, "[Object:"; CStr(VarPtr(O)); "]"
    Set appTLI = New TLIApplication
    Set inte = appTLI.InterfaceInfoFromObject(O) '::: ссылка на интерфейс
    n% = inte.Members.Count
    For ii% = 1 To n%
        nam$ = inte.Members(ii%).Name
        Typ% = inte.Members(ii%).InvokeKind
        Res% = inte.Members(ii%).ReturnType.VarType
        If Typ% = 2 Then '::: Свойство (Property Get)
           vv = CallByName(O, nam$, VbGet) '::: значение свойства
           If VarType(vv) = 8204 Then '::: массив
              b% = LBound(vv, 1)
              e% = UBound(vv, 1)
              txt$ = "("
              For j% = b% To e%
                  txt$ = txt$ + CStr(vv(j%)) + ","
              Next j%
              txt$ = txt$ + ")"
           Else
              txt$ = CStr(vv)
           End If
           Select Case (Res%)
                  Case 2, 3, 12
                     Print #fo%, nam$; "="; txt$
           End Select
        End If
    Next ii%
    Print #fo%, "[/Object]"
    Close #fo%
End Sub
 
Sub Test()  '::: Проверка
Dim O As clsO
    Set O = New clsO
    O.ma = 123
    O.mb = 67654
    O.mc = Array(1, 2, 3, 4)
    HomeDir$ = ThisWorkbook.Path
    SaveObj O, HomeDir$ + "\O_save.txt"
    MsgBox "OK"
End Sub
 
'::: Тестовый класс
 
Private maLoc As Integer
Private mbLoc As Long
Private mCLoc As Variant
 
Public Property Get ma() As Integer
       ma = maLoc
End Property
 
Public Property Let ma(a As Integer)
       maLoc = a
End Property
 
Public Property Get mb() As Long
       mb = mbLoc
End Property
 
Public Property Let mb(a As Long)
       mbLoc = a
End Property
 
Public Property Get mc() As Variant
       mc = mCLoc
End Property
 
Public Property Let mc(a As Variant)
       mCLoc = a
End Property
 
Public Sub Show()
       Debug.Print "OK!"
End Sub
Это, разумеется, только набросок...
4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.10.2014, 17:32  [ТС]
Компиляция проекта VB6 с указанием версии или автоинкрементом (опционально) + UPX
Скачать можно из блога.

Не нравится мне встроенный в VB6 IDE автоинкремент.
Ну вот хочу я в следующей версии изменить уже не Revision, а Major или Minor.
Лезть для этого в опции далеко и лень. Каждый раз править в файле .VBP мне тоже лень.

Решение - положить файлик _Make+Ver+Backup+Manifest+Ico+UPX.cmd в папку проекта и запустить.
Просто ENTER - это автоинкремент Revision.
Нажатие - (дефиса) и ENTER - оставить старый номер версии.
Ввод любой своей версии + ENTER -> здесь понятно.
-> получаем на выходе EXE.

Если проект не был закрыт до начала компиляции, будет отправлен безопасный сигнал о его закрытии.
Если проект содержит ошибки, будет предложено вернуть старый номер версии в файл VBP по нажатию ENTER
-> + откроется сам проект.

Доп. фича - упаковка в UPX. По-умолчанию, включено. Чтобы отключить, изменить в строке:
set NoUPX=false слово false на true.

Чтобы вывести в окно формы указанную таким образом версию, Вы можете воспользоваться свойствами объекта App:
Visual Basic
1
AppVer = App.Major & "." & App.Minor & ".0." & App.Revision
Написано на языке командного интерпретатора CMD + программы других разработчиков (см. в блоге).
В версии 1.1. добавлено несколько новых фишек.
1
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
08.11.2014, 03:47
Хеш-таблица VB6

Как-то я уже делал реализацию простой хеш-таблицы для демонстрации использования IEnumVariant интерфейса для перечисления в цикле For Each. Представляю автономный класс реализующий хеш-таблицу, который во многих случаях может стать заменой словаря (Dictionary) из Scripting runtime. Реализованы все те же методы что и у словаря, а также добавлены новые.
Включена поддержка перечисления через For Each, также можно задавать режим перечисления ключи/значения, также по сравнению с предыдущей версией исправлены баги вылета из среды при остановки в теле циклов For Each, а также нет никаких ограничений на вложенные циклы. Работает достаточно быстро, на моей машине приблизительно также (даже чуть быстрее) как словарь при двоичном сравнении, при текстовом сравнении работает почти в 2-раза быстрее словаря. В качестве ключей допускаются Variant переменные с типам от vbEmpty до vbDecimal включительно. Числовые ключи должны быть уникальны, т.е. -1, True, -1e0 - один и тот же ключ как и в словаре.
Новый метод EnumMode - определяет текущий режим перечисления. Допустимые значения ENUM_BY_KEY, ENUM_BY_VALUE. При входе в цикл For Each начинает перечисляться тот параметр, который задан этим свойством. Например можно перечислять в главном цикле ключи, во вложенном значения, или сначала ключи потом значения. Также задавая это свойство в окнах Locals или Watch можно переключать отображение с ключей на значения и обратно.

Ссылка.

3
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
15.11.2014, 22:05
Драйвер на VB6

Всем привет. Появилось время и решил написать что-то необычное на VB6, а именно попытаться написать драйвер. Сразу скажу до этого я никогда не писал драйвера и не имею никакого опыта программирования в режиме ядра. Драйвер, по моим задумкам, должен будет читать память недоступную в пользовательском режиме, а именно в диапазоне 0x80000000 - 0xffffffff (в режиме по-умолчанию, без IMAGE_FILE_LARGE_ADDRESS_AWARE). Сразу приведу исходный код драйвера который получился...

Ссылка.

4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
16.11.2014, 18:18  [ТС]
Программа распознавания кодировки - DOS или WIN

от zink0000

от The Trick
3
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
01.12.2014, 19:13
Вокодер на VB6.

Всем привет. Создавая музыку, я видел много разных виртуальных инструментов и эффектов. Одним из интереснейших эффектов является вокодер, который позволяет промодулировать голос и сделать его например похожим на голос робота или что-то в этом духе. Вокодер изначально использовался для сжатия речевой информации, а после его начали применять в музыкальной сфере. Т.к. у меня появилось свободное время, я решил написать что-то подобное ради эксперимента и подробно описать этапы разработки на VB6.

Ссылка.

6
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.12.2014, 00:00  [ТС]
VBCorLib - аналог .NET Framework 2.0 на VB6.

http://www.kellyethridge.com/vbcorlib/index.shtml
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
3
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
28.12.2014, 15:38  [ТС]
Выравнивание файла по 4-байтовой границе.

Используется для модификации файла перед внесением его в ресурсы проекта.
В конец файла дописываются знаки <NUL> (ASCII = 0).

Как известно при загрузке ресурса через LoadResData скомпилированное приложение
в отличие от режима IDE автоматически дописывает байты до 4-байтовой границы.
*
Чтобы избечь случайных данных в конце ресурса, дописываем <NUL> самостоятельно.

Использование - из командной строки или батника:

Bash
Align4byte.exe file.txt
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
 
Sub Main()
    Dim sFile   As String
    Dim ff      As Integer
    Dim Size    As Long
    Dim Rest    As Long
    
    sFile = Command()
    
    If Len(sFile) = 0 Then MsgBox "Использование: " & App.EXEName & " " & "file.txt": End
    
    ff = FreeFile()
    
    sFile = UnQuote(sFile)
    
    Open sFile For Binary Access Read Write As #ff
        Size = LOF(ff)
        Rest = 4 - (Size Mod 4)
        If Rest <> 0 And Rest <> 4 Then
            Put #ff, Size + 1, String$(Rest, Chr$(0))
        End If
    Close #ff
    
End Sub
 
Function UnQuote(Str As String) As String   ' Убрать обрамление кавычками
    Dim s As String: s = Str
    Do While Left$(s, 1&) = """"
        s = Mid$(s, 2&)
    Loop
    Do While Right$(s, 1&) = """"
        s = Left$(s, Len(s) - 1&)
    Loop
    UnQuote = s
End Function


* На самом деле эта проблема возникает у владельцев VB6 без установленного sp6.
Вложения
Тип файла: zip Align4byte.zip (6.1 Кб, 64 просмотров)
3
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.01.2015, 00:35  [ТС]
EnumDeskVB: Динамическое создание treeview и listview без использования Comctl32.ocx
Автор: Nancy Cluts. Портировано Brad Martinez.

В примере демонстрируется:
  • перечисление объектов пространства имен Shell (аналогично, как это делается в проводнике Windows)
  • сабклассинг контролов
  • использование интерфейсов IShellFolder, и доступа к дочерним объектам, IEnumIDList для перечесления объектов.
  • преобразование PIDL в имена и отображение иконок объектов;
  • использование контекстного меню с помощью интерфейса IContextMenu

Также внутри есть:
  • дебаггер от Майкрософт для отлова ошибок в CallBack функциях
  • IShellFolder Extended Type Library v1.2

Код хорошо закомментирован.
Источник.
Миниатюры
Готовые решения и полезные коды на Visual Basic 6.0  
Вложения
Тип файла: zip edeskvb2.zip (148.0 Кб, 164 просмотров)
4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
03.01.2015, 02:15  [ТС]
Построение графика функции по введенной формуле.
2
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
04.01.2015, 16:41
3D елка на рабочий стол.

Я как-то уже делал такую, но в этот раз я добавил возможность регулировки параметров создания.
Для работы нужна dx8vb.dll. Выход по двойному клику. С новым годом!

Ссылка.
6
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
26.04.2015, 22:11
Класс - MP3 проигрыватель из памяти.

Всем привет. Я разработал класс для асинхронного воспроизведения MP3 файлов в памяти. Например это может пригодится для воспроизведения фоновой музыки из ресурсов или из сети минуя запись в файл. Воспроизводить можно несколько файлов одновременно, но некоторые параметры воспроизведения (громкость, панорама) для всех проигрывателей будут общими. Класс разработан так, что корректно обрабатывает ситуации остановки среды кнопками "стоп", "пауза" и выхода по End. По тегам, корректно обрабатываются только ID3v1 и ID3v2 теги, другие не распознаются и файл скорее всего не будет играться.

Ссылка.
4
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
17.05.2015, 21:46  [ТС]
  • Получение типа учетной записи, под которой запущен процесс (Administrator, Power user, Limited User, Guest)
  • Проверка, запущен ли процесс в режиме повышенных привилегий
  • Получение уровня целостности процесса (Integrity Level)

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
Option Explicit
 
Private Type SID_IDENTIFIER_AUTHORITY
    value(0 To 5) As Byte
End Type
 
Private Type SID_AND_ATTRIBUTES
    Sid As Long
    Attributes As Long
End Type
 
Private Type TOKEN_GROUPS
    GroupCount As Long
    Groups(20) As SID_AND_ATTRIBUTES
End Type
 
Private Declare Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExW" (lpVersionInformation As Any) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function GetTokenInformation Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal TokenInformationClass As Long, TokenInformation As Any, ByVal TokenInformationLength As Long, ReturnLength As Long) As Long
Private Declare Function OpenThreadToken Lib "advapi32" (ByVal ThreadHandle As Long, ByVal DesiredAccess As Long, ByVal OpenAsSelf As Long, TokenHandle As Long) As Long
Private Declare Function GetCurrentThread Lib "kernel32" () As Long
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Source As Any, ByVal lSize As Long)
Private Declare Function GetMem4 Lib "msvbvm60.dll" (Src As Any, Dst As Any) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function LocalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
Private Declare Sub FreeSid Lib "advapi32.dll" (ByVal pSid As Long)
Private Declare Function AllocateAndInitializeSid Lib "advapi32.dll" (pIdentifierAuthority As Any, ByVal nSubAuthorityCount As Byte, ByVal nSubAuthority0 As Long, ByVal nSubAuthority1 As Long, ByVal nSubAuthority2 As Long, ByVal nSubAuthority3 As Long, ByVal nSubAuthority4 As Long, ByVal nSubAuthority5 As Long, ByVal nSubAuthority6 As Long, ByVal nSubAuthority7 As Long, lpPSid As Long) As Long
Private Declare Function IsValidSid Lib "advapi32" (ByVal pSid As Long) As Long
Private Declare Function GetSidSubAuthority Lib "advapi32.dll" (ByVal pSid As Long, ByVal nSubAuthority As Long) As Long
Private Declare Function GetSidSubAuthorityCount Lib "advapi32.dll" (ByVal pSid As Long) As Long
Private Declare Function EqualSid Lib "advapi32.dll" (pSid1 As Any, pSid2 As Any) As Long
'Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenW" (ByVal lpString As Long) As Long
'Private Declare Function ConvertStringSidToSid Lib "advapi32.dll" Alias "ConvertStringSidToSidW" (ByVal StringSid As Long, Sid As Long) As Long
'Private Declare Function ConvertSidToStringSid Lib "advapi32.dll" Alias "ConvertSidToStringSidW" (ByVal Sid As Long, StringSid As Long) As Long
'Private Declare Function CheckTokenMembership Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal SidToCheck As Long, IsMember As Long) As Long
 
Private Sub Form_Load()
    Dim sLog$
    sLog = sLog & "UserType:        " & GetUserType() & vbCrLf
    sLog = sLog & "UAC Elevated:    " & IsElevated() & vbCrLf
    sLog = sLog & "Integrity Level: " & GetIntegrityLevel() & vbCrLf
    Debug.Print sLog
    MsgBox sLog
    End
End Sub
 
Function IsElevated(Optional hProcess As Long) As Boolean
    On Error GoTo ErrorHandler
    
    Const TOKEN_QUERY           As Long = &H8&
    Const TokenElevation        As Long = 20&
    
    Dim hToken           As Long
    Dim dwLengthNeeded   As Long
    Dim dwIsElevated     As Long
    
    ' < Win Vista. Устанавливаем true, если пользователь состоит в группе "Администраторы"
    Dim inf(68) As Long: inf(0) = 276: GetVersionEx inf(0): If inf(1) < 6 Then IsElevated = (GetUserType = "Administrator"): Exit Function
 
    If hProcess = 0 Then hProcess = GetCurrentProcess()
    
    If OpenProcessToken(hProcess, TOKEN_QUERY, hToken) Then
 
        If 0 <> GetTokenInformation(hToken, TokenElevation, dwIsElevated, 4&, dwLengthNeeded) Then
            IsElevated = (dwIsElevated <> 0)
        End If
        
        CloseHandle hToken
    End If
    Exit Function
ErrorHandler:
    Debug.Print Err; Now; "clsOSInfo.IsElevated"
End Function
 
Public Function GetUserType(Optional hProcess As Long) As String
    On Error GoTo ErrorHandler
 
    Const TOKEN_QUERY                   As Long = &H8&
    Const SECURITY_NT_AUTHORITY         As Long = 5&
    Const TokenGroups                   As Long = 2&
    Const SECURITY_BUILTIN_DOMAIN_RID   As Long = &H20&
    Const DOMAIN_ALIAS_RID_ADMINS       As Long = &H220&
    Const DOMAIN_ALIAS_RID_USERS        As Long = &H221&
    Const DOMAIN_ALIAS_RID_GUESTS       As Long = &H222&
    Const DOMAIN_ALIAS_RID_POWER_USERS  As Long = &H223&
 
    Dim hProcessToken   As Long
    Dim BufferSize      As Long
    Dim psidAdmin       As Long
    Dim psidPower       As Long
    Dim psidUser        As Long
    Dim psidGuest       As Long
    Dim lResult         As Long
    Dim i               As Long
    Dim tpTokens        As TOKEN_GROUPS
    Dim tpSidAuth       As SID_IDENTIFIER_AUTHORITY
    
    GetUserType = "Unknown"
    tpSidAuth.value(5) = SECURITY_NT_AUTHORITY
    
    ' в идеале, сначала нужно проверять токен, полученный от потока
    ' If Not OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, True, hProcessToken) Then
    ' ограничимся токеном процесса, т.к. пока не планируем более 1 потока
    
    If hProcess = 0 Then hProcess = GetCurrentProcess()
    If 0 = OpenProcessToken(hProcess, TOKEN_QUERY, hProcessToken) Then Exit Function
    
    If hProcessToken Then
 
        ' Определяем требуемый размер буфера
        GetTokenInformation hProcessToken, ByVal TokenGroups, 0&, 0&, BufferSize
        
        If BufferSize Then
            ReDim InfoBuffer((BufferSize \ 4) - 1) As Long  ' Переводим размер byte -> Long
            
            ' Получаем информацию о SID-ах групп, ассоциированных с этим токеном
            If 0 <> GetTokenInformation(hProcessToken, ByVal TokenGroups, InfoBuffer(0), BufferSize, BufferSize) Then
            
                ' Заполняем структуру из буфера
                Call CopyMemory(tpTokens, InfoBuffer(0), Len(tpTokens))
            
                ' Получаем SID-ы каждого типа пользователей
                lResult = AllocateAndInitializeSid(tpSidAuth, 2&, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0&, 0&, 0&, 0&, 0&, 0&, psidAdmin)
                lResult = AllocateAndInitializeSid(tpSidAuth, 2&, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS, 0&, 0&, 0&, 0&, 0&, 0&, psidPower)
                lResult = AllocateAndInitializeSid(tpSidAuth, 2&, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_USERS, 0&, 0&, 0&, 0&, 0&, 0&, psidUser)
                lResult = AllocateAndInitializeSid(tpSidAuth, 2&, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_GUESTS, 0&, 0&, 0&, 0&, 0&, 0&, psidGuest)
            
                If IsValidSid(psidAdmin) And IsValidSid(psidPower) And IsValidSid(psidUser) And IsValidSid(psidGuest) Then
                  
                    For i = 0 To tpTokens.GroupCount
                        ' Берем SID каждой из ассоциированных групп
                        If IsValidSid(tpTokens.Groups(i).Sid) Then
                            ' Проверяем на соответствие
                            If EqualSid(ByVal tpTokens.Groups(i).Sid, ByVal psidAdmin) Then
                                GetUserType = "Administrator":  Exit For
                            ElseIf EqualSid(ByVal tpTokens.Groups(i).Sid, ByVal psidPower) Then
                                GetUserType = "Power User":     Exit For
                            ElseIf EqualSid(ByVal tpTokens.Groups(i).Sid, ByVal psidUser) Then
                                GetUserType = "Limited User":   Exit For
                            ElseIf EqualSid(ByVal tpTokens.Groups(i).Sid, ByVal psidGuest) Then
                                GetUserType = "Guest":          Exit For
                            End If
                        End If
                    Next
                End If
                If psidAdmin Then FreeSid psidAdmin
                If psidPower Then FreeSid psidPower
                If psidUser Then FreeSid psidUser
                If psidGuest Then FreeSid psidGuest
            End If
        End If
        CloseHandle hProcessToken
    End If
    Exit Function
ErrorHandler:
    Debug.Print Err; Now; "clsOSInfo.GetUserType"
End Function
 
'Function SID_2_String(pSid As Long) As String
'    Dim lpString As Long
'    Dim sSid     As String
'    If ConvertSidToStringSid(pSid, lpString) Then
'        sSid = Space$(lstrlen(lpString) \ 2)
'        CopyMemory ByVal StrPtr(sSid), ByVal lpString, Len(sSid) * 2
'        LocalFree lpString
'        SID_2_String = sSid
'    End If
'End Function
 
Function GetIntegrityLevel(Optional hProcess As Long) As String       'https://msdn.microsoft.com/en-us/library/bb625966.aspx?f=255
    On Error GoTo ErrorHandler
    
    Const SECURITY_MANDATORY_UNTRUSTED_RID          As Long = 0&
    Const SECURITY_MANDATORY_LOW_RID                As Long = &H1000&
    Const SECURITY_MANDATORY_MEDIUM_RID             As Long = &H2000&
    Const SECURITY_MANDATORY_HIGH_RID               As Long = &H3000&
    Const SECURITY_MANDATORY_SYSTEM_RID             As Long = &H4000&
    Const SECURITY_MANDATORY_PROTECTED_PROCESS_RID  As Long = &H5000&
    
    Const TokenIntegrityLevel       As Long = 25&
    Const TOKEN_QUERY               As Long = &H8&
    Const ERROR_INSUFFICIENT_BUFFER As Long = &H7A&
    
    Dim hToken           As Long
    Dim dwLengthNeeded   As Long
    Dim bTIL()           As Byte
    Dim pSidSub          As Long
    Dim dwIntegrityLevel As Long
    Dim pSidAuthCnt      As Long
    Dim SidAuthCnt       As Long
    Dim pILSid           As Long
    Dim ILevel           As String
    
    Dim inf(68) As Long: inf(0) = 276: GetVersionEx inf(0): If inf(1) < 6 Then GetIntegrityLevel = "Not supported": Exit Function ' < Win Vista
    
    ILevel = "Unknown"
    
    If hProcess = 0 Then hProcess = GetCurrentProcess()
    
    If OpenProcessToken(hProcess, TOKEN_QUERY, hToken) Then
    
        GetTokenInformation hToken, TokenIntegrityLevel, 0&, 0&, dwLengthNeeded
        
        If ERROR_INSUFFICIENT_BUFFER = Err.LastDllError Then
        
            ReDim bTIL(dwLengthNeeded - 1)
        
            If 0 <> GetTokenInformation(hToken, TokenIntegrityLevel, bTIL(0), dwLengthNeeded, dwLengthNeeded) Then
        
                GetMem4 bTIL(0), pILSid
                
                If IsValidSid(pILSid) Then
 
                    pSidAuthCnt = GetSidSubAuthorityCount(pILSid)
                    
                    If pSidAuthCnt Then
                    
                        GetMem4 ByVal pSidAuthCnt, SidAuthCnt
                        
                        If SidAuthCnt Then
                        
                            pSidSub = GetSidSubAuthority(pILSid, SidAuthCnt - 1)
                    
                            If pSidSub Then GetMem4 ByVal pSidSub, dwIntegrityLevel
                    
                            Select Case dwIntegrityLevel
                            
                                Case Is < SECURITY_MANDATORY_UNTRUSTED_RID
                                    ILevel = "Unknown"
                                Case Is < SECURITY_MANDATORY_LOW_RID
                                    ILevel = "Untrusted"
                                Case Is < SECURITY_MANDATORY_MEDIUM_RID
                                    ILevel = "Low"
                                Case Is < SECURITY_MANDATORY_HIGH_RID
                                    ILevel = "Medium"
                                Case Is < SECURITY_MANDATORY_SYSTEM_RID
                                    ILevel = "High"
                                Case Is < SECURITY_MANDATORY_PROTECTED_PROCESS_RID
                                    ILevel = "System"
                                Case Else
                                    ILevel = "ProtectedProcess"
                            End Select
                        End If
                    End If
                    FreeSid pILSid
                End If
            End If
        End If
        CloseHandle hToken
    End If
    GetIntegrityLevel = ILevel
    Exit Function
ErrorHandler:
    Debug.Print Err; Now; "clsOSInfo.GetIntegrityLevel"
End Function
Вложения
Тип файла: zip AdminCheck.zip (9.8 Кб, 129 просмотров)
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2015, 21:46
Помогаю со студенческими работами здесь

Готовые решения и полезные коды на Visual Basic .NET (Часть-1)
Предлагаю в этой теме размещать ответы на часто задаваемые вопросы и просто делиться полезными кодами. Обращаю внимание на некоторые...

Готовые коды для решения лабораторных работ
Доброго времени суток всем! Очень срочно нужны готовые коды для решения лабораторных работ в С# по учебнику Павловской!!! Вариант 16, нужны...

Написать программу решения квадратного уравнения. В Office Visual Basic
Написать программу решения квадратного уравнения. В Office Visual Basic

Полезные коды и проекты на VBA
В этой теме предлагаю выкладывать различные коды и готовые проекты VBA, которые, на Ваш взгляд, могут помочь новичкам в разработке как...

Полезные коды для PascalABC.NET
В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru