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

Логика регистрации файла

14.05.2014, 08:23. Показов 4643. Ответов 50

Студворк — интернет-сервис помощи студентам
Сейчас делаю консольную программу
которую я протестировал на все возможные ошибки
работает примерно так.. Proga.exe /команда

Модуль этой программы
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
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
Option Explicit
DefLng F, I, L, N: DefStr J, S
'
'    © FelixMacintosh 2014
'
Const hlpMesage = "" & _
"Команды могут быть с большой или маленькой буквы" & vbCrLf & _
"Также можно вводить несколько команд" & vbCrLf & _
"Список команд:" & vbCrLf & _
"/s [путь к файлу] ; [путь для нового файла] ; [байтовый адрес]" & vbTab & "= Отделить файл" & vbCrLf & _
"/j [главный файл] ; [пришиваемый файл] " & vbTab & "= Объединить два файла" & vbCrLf & _
"/z [путь к zip архиву] ; [путь на диске] " & vbTab & "= Добавить в архив" & vbCrLf & _
"/uz [путь к zip архиву] ; [путь в архиве] ; [папка на диске] " & vbTab & "= Извлеч из архива" & vbCrLf & _
vbTab & "* Примечание папку на диске можно не указывать" & vbCrLf & _
vbTab & "в этом случае это будет текущая папка" & vbCrLf & _
"/r [путь к файлу]" & vbTab & "= Регистрация" & vbCrLf & _
"/u [путь к файлу]" & vbTab & "= Отмена регистрации" & vbCrLf & _
"/cmd [новая комманда отсюда]" & vbTab & "= Любая консольная команда" & vbCrLf & _
"/h или /help " & vbTab & "= Вызов этого сообщения" & vbCrLf & _
"Производство:" & vbCrLf & _
"© FelixMacintosh 2014" & vbTab & "http://vk.com/FelixMacintosh"
'
Private Const Infinite = -1&
Private Const Synchronize = &H100000
Private Const TH32CS_SNAPTHREAD = &H4
'
Private WshShell As Object 'As WshShell '
Private Fso As Object 'As FileSystemObject '
Private mArchive As Object
'
Private Type THREADENTRY32
    dwSize As Long
    cntUsage As Long
    th32ThreadID As Long
    th32OwnerProcessID As Long
    tpBasePri As Long
    tpDeltaPri As Long
    dwFlags As Long
End Type
 '
Private Declare Function Thread32First Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function Thread32Next Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function OpenThread Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Private Function WaitShell(MyCommand$) As Long
    '
    'Вызов Shell и новой команды, с ожиданием её завершения
    '
    Dim hProc&
    WaitShell = Shell(MyCommand)
    hProc = OpenProcess(Synchronize, False, WaitShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
End Function
 
Private Sub SS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    SaveSetting App.EXEName, Section, Key, Setting
End Sub
 
Private Function GS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    GS = GetSetting(App.EXEName, Section, Key, "")
End Function
 
Private Sub TrimArray(Arr() As String)
    Dim i&
    For i = 0 To UBound(Arr): Arr(i) = Trim(Arr(i)): Next
End Sub
 
Private Sub Main()
    Const r = "/", p = " ", w = ";"
    Dim f, j(), s, j1(), j2(), Start&
    Set WshShell = CreateObject("Shell.Application")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    s = Command$
    j = Split(s, r)
 
    On Error Resume Next: DeleteSetting App.EXEName
    On Error GoTo EndProgramm
 
    For f = 1 To UBound(j)
        j1 = Split(Trim(j(f)), p, 2): TrimArray j1
        '---------
        Select Case LCase(j1(0))
        Case "cmd"
            SS j1(0), WaitShell(j1(1))
        Case "s"
            j2 = Split(j1(1), w): TrimArray j2
            SS j1(0), "Len", WriteBytes(j2(1), ReadBytes(j2(0), CLng(j2(2))), , True)
        Case "j"
            j2 = Split(j1(1), w): TrimArray j2
            Start = Fso.GetFile(j2(0)).Size + 1
            SS j1(0), "Start", Start
            SS j1(0), "Len", WriteBytes(j2(0), ReadBytes(j2(1)), Start) - 1
        Case "uz"
            j2 = Split(j1(1), w): TrimArray j2
            If Fso.FileExists(j2(0)) And LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                If UBound(j2) = 1 Then
                    ReDim Preserve j2(2): j2(2) = CurDir$
                End If
                Archive = Fso.GetAbsolutePathName(j2(0))
                SS j1(0), UnZipFile(j2(1), j2(2))
            End If
            
        Case "z"
            j2 = Split(j1(1), w): TrimArray j2
            If Fso.FileExists(j2(0)) And LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                'Используем архив
                Archive = Fso.GetAbsolutePathName(j2(0))
                SS j1(0), CopyPathToArchive(Fso.GetAbsolutePathName(j2(1)))
            ElseIf LCase(Fso.GetExtensionName(j2(0))) = "zip" Then
                'Создаём архив
                CreateArchive Fso.GetAbsolutePathName(j2(0))
                SS j1(0), CopyPathToArchive(Fso.GetAbsolutePathName(j2(1)))
            End If
        Case "r"
            SS j1(0), RegSvr32(j1(1))
        Case "u"
            SS j1(0), RegSvr32(j1(1), True)
        Case "h", "help"
            SS j1(0), MsgBox(hlpMesage)
        Case Else
            'Не выполнена ни одна комманда
        End Select
    Next
EndProgramm:
    '-------------------------Конец программы
    Set WshShell = Nothing
    Set Fso = Nothing
End Sub
 
Private Function CopyHere(Parent, vItem) As Boolean
    '
    'Функция копирования
    'Аргументы: Папка (Zip-папка) // Копируемый объект
 
    Dim f&, Key$, hnd&
    Dim Trd(2) As Collection
    Dim tid As Long, hTrd As Long
    On Error Resume Next
 
    'Получаем список потоков !
    GetThreadsList Trd(0) 'Запомнить старые потоки
    Call Parent.CopyHere((vItem)) 'Копирование >>>>>>>>>>>>
    GetThreadsList Trd(1) 'Запомнить новые потоки
    
    If vItem.Count > 0 Then If Err.Number = 0 Then GoTo 1 'В этом случае ждать не нужно
    
    Err.Clear 'Сброс всех ошибок
 
    Set Trd(2) = New Collection
    For f = Trd(1).Count To 1 Step -1
        Key = "C" & Trd(1).Item(f)
        hnd = Trd(0)(Key)
        If hnd = 0 Then Trd(2).Add CLng(Mid$(Key, 2))
    Next
 
    For f = 1 To Trd(2).Count 'Ожидание открытых потоков
        tid = Trd(2).Item(f)
        hTrd = OpenThread(Synchronize, False, tid)
        WaitForSingleObject hTrd, Infinite
        CloseHandle hTrd
    Next
    CopyHere = True
    Exit Function
1
End Function
 
 
Private Sub GetThreadsList(List As Collection)
    '
    '   Возвращает List с коллекцией потоков
    '
    Dim hSnap As Long, TE As THREADENTRY32, PID As Long
    Set List = New Collection
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
    If hSnap = -1 Then Exit Sub
    TE.dwSize = Len(TE)
    PID = GetCurrentProcessId()
    If Thread32First(hSnap, TE) Then
        Do
            If TE.th32OwnerProcessID = PID Then List.Add TE.th32ThreadID, "C" & CStr(TE.th32ThreadID)
        Loop While Thread32Next(hSnap, TE)
    End If
    CloseHandle hSnap
End Sub
 
 
Public Function UnZipFile(ByVal ParseName$, ByVal DestPath$) As Boolean
    '
    'Извлечение из архива
    'Аргументы:
    'DestPath - Путь к папке для распаковки архива
    'ParseName - Путь в архиве
    'Примечание: Имена файлов в архиве, должны быть полными !
    '
    Dim DestDir As Object, Parse As Object
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error GoTo 1
    
    If Not Fso.FolderExists(DestPath) Then 'Проверяем есть ли папка
        Fso.CreateFolder (DestPath) 'Создаём папку для перемещаемых туда объектов
    End If
    
    Set DestDir = WshShell.NameSpace((DestPath))
    Set Parse = mArchive.ParseName((ParseName))
    UnZipFile = CopyHere(DestDir, Parse)
    Exit Function
1
End Function
 
Public Function NameArchiveFiles$(Optional ByVal ind&, Optional ByVal NameOnly As Boolean)
    '
    'Возврат имени файла в архиве
    'Аргументы:
    'ZipName - имя архива
    'Ind - номер файла в архиве (начало с 0), по умолчанию - 0
    'NameOnly - Только имя, без расширения
    '
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error Resume Next
    If NameOnly Then
        NameArchiveFiles = mArchive.Items().Item((ind)).Рath
    Else
        NameArchiveFiles = mArchive.Items().Item((ind)).Name
    End If
End Function
 
Public Function CopyPathToArchive(ByVal FilePath$) As Boolean
    '
    'Копирует файл / папку в архив
    'Арг: полное имя
    '
    If (mArchive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    If Len(Dir(FilePath, vbDirectory)) > 0 And Len(Dir(FilePath)) = 0 Then
 
        If WshShell.NameSpace((FilePath)).Items.Count = 0 Then
            MsgBox ("Нельзя добавить пустую папку")
            Exit Function
        End If
    End If
    'mArchive.CopyHere (FilePath)
    CopyPathToArchive = CopyHere(mArchive, FilePath) 'Копируем в архив
End Function
 
Public Function CreateArchive(ByVal Рath$) As Boolean
    '
    'Создаёт новый архив
    'Возврат утверждения о создании
    '
    If Fso.FileExists(Рath) Then Kill Рath
    Fso.CreateTextFile(Рath, True).Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    Set mArchive = WshShell.NameSpace((Рath))
    CreateArchive = Not (mArchive Is Nothing) 'Возврат утверждения о создании
End Function
 
 
 
Public Property Get Archive() As Variant
    '
    'Возвращает объект архива
    '
    Set Archive = mArchive
End Property
 
Public Property Let Archive(ByVal vNewValue As Variant)
    '
    'Свойство: Archive = Файловый путь
    'Арг: полное имя
    '
    If Fso.FileExists(vNewValue) Then
        Set mArchive = WshShell.NameSpace((vNewValue))
    End If
End Property
 
 
Private Function RegSvr32(Path$, Optional UnReg As Boolean) As Boolean
 
    Dim hProc&, hShell&
    If Fso.FileExists(Path) = False Then Exit Function
    Select Case LCase(Fso.GetExtensionName(Path))
    Case "dll", "ocx"
    Case Else: Exit Function
    End Select
 
    If UnReg Then
        hShell = WshShell("RegSvr32 /s /u " & Path)
    Else
        hShell = WshShell("RegSvr32 /s " & Path)
    End If
 
    hProc = OpenProcess(Synchronize, False, hShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
    RegSvr32 = True
End Function
 
 
Private Function ReadBytes(FileName$, Optional ByRef Start&, Optional ByVal dln&) As Byte()
    'Чтение байт из файла
    'Арг: Путь // Старт // Длина по умолчанию всего файла
    'Возврат: Массив байт и следующая позиция чтения
    Dim n, f: On Error Resume Next
    f = FreeFile
    Open FileName For Binary As #f
    If Start Then Else Start = 1
    n = LOF(f) - Start + 1
    If dln = 0 Or dln > n Then dln = n
    ReDim Preserve ReadBytes(dln - 1)
    Get #f, Start, ReadBytes: Close #f
    If Err = 0 Then Start = Start + UBound(ReadBytes) + 1
End Function
 
Private Function WriteBytes&(FileName$, Bytes() As Byte, Optional ByVal Start&, _
Optional Overwrite As Boolean)
    'Запись байт в файл
    'Арг: Путь // Массив байт // Старт // Флаг перезаписи
    'Возврат: Следующая позиция записи (при успешном выполнении)
    Dim n, f: On Error Resume Next
    If Start Then Else Start = 1
    f = FreeFile 'Определяем номер свободного файла
    If Overwrite Then Kill FileName
    Open FileName$ For Binary As #f: Put #f, Start, Bytes: Close #f 'Копируем !
    If Err = 0 Then WriteBytes = Start + UBound(Bytes) + 1
End Function


так вот..
я хочу внести туда еще три команды
r+ =Зарегить при условии что эта dll не зарегестрированна
u+ =Отменить рег. только при условии что не этой прогой было регестрированно
u- =Отменить при условии... затем удалить !
uz+ =Извлеч при условии что если это dll(ocx) и если она не зареганна...

как правильно организовать логику регистрации файла

Добавлено через 15 минут
Подозреваю что при выполнении регистраций придёться гдето хранить
записи, то что было сделанно...

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

и не удалить по неосторожности важные компоненты для системы...

Добавлено через 24 минуты
...вобщем буду делать так...
хранить гдето отдельно, например в системной папке
специальный файл, в котором будет только список тех компонентов
которые зарегала эта прога, в этом случае восстановление системы будет
следить за этим файлом...

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

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

как-то так.. наверное... я конечно сомневаюсь..
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.05.2014, 08:23
Ответы с готовыми решениями:

Создание регистрации и аутентификации spring. Логика регистрации и авторизации
Для регистрации юзера на сервер приходят данные в json формате(логин пароль подтвержденный пароль). Принимаю их на контроллер на маппинг...

В каком элементе MVC должна обрабатываться логика регистрации и авторизации?
Доброго всем времени суток уважаемые форумчане! Вот начал изучать ООП в php с использованием MVC. И у меня возник вопрос: как сделать если...

Описание файла журнала регистрации
Приветствую, ребята! Подскажите пожалуйста, где можно почитать про описание протокола файла ЖР, я имею ввиду структуру файла *.lgd,...

50
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.05.2014, 08:52
Храни Install.log
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 09:10  [ТС]
ну тоесть в системной папке значит...
Например C:\WINDOWS\system32\Install.log

Добавлено через 1 минуту
естественно путь я буду получать через системные переменные Environ

Добавлено через 2 минуты
список примерно такой..
MyDll01.dll
MyDll02.dll

а нужна ли будет еще и дата регистрации... вообще она както пригодится ?

Добавлено через 9 минут
думаю лучше так...

C:\WINDOWS\system32\RegLib\Install.log
иначе может получиться конфликт имен.. не я один могу хранить Log в этом месте...
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.05.2014, 09:24
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
ну тоесть в системной папке значит...
В папке с программой.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 09:26  [ТС]
...тогда не получиться идея запуска одного файла...
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.05.2014, 09:30
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
блин тогда не получиться идея запуска одного файла...
А сколько ты запускать будешь?
Если ты уже о деинтсталляции думаешь, то тебе по-любому нужно будет имень больше одного файла. Ты можешь хранить cписок установки в ресурсах деинсталлятора. Будет еще один файл - Uninstall.exe.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 15:51  [ТС]
Ну тоесть я то хотел чтоб log был общим
а запускаемый файл с пришитым архивом может действительно быть один...

Добавлено через 1 минуту
кстате деинсталяцию можно предусмотреть в другой программе которую запустит основная
тоесть там гденибудь прописать такую возможность

Добавлено через 6 минут
Зачем я думаеш и сделал возможности объеденить/разъеденить файлы...

Добавлено через 1 минуту
вернее он там не разъединяется а отделяется...

Добавлено через 1 минуту
копируется его половина...
с полной перезаписью на новом месте
Visual Basic
1
2
            j2 = Split(j1(1), w): TrimArray j2
            SS j1(0), "Len", WriteBytes(j2(1), ReadBytes(j2(0), CLng(j2(2))), , True)
Добавлено через 10 минут
я даже выкладывать в готовых решениях не буду...
и так уже много чего сделал для Родины...
а если и выложу то скомпиленный файл... пусть потом
аналитики изучают под микроскопом..

Добавлено через 46 минут
А интересно... можно ли программно поменять иконку у готового EXE-шника ???

Добавлено через 3 часа 6 минут
✰ ✰ ✰
Так-же могут быть полезными эти две функции
потому-что оказывается Fso не создаёт папку где попало !

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
Private Const r = "/", p = " ", w = ";", t = "\"
 
Function CreateFile(ByVal AbsPath$, Optional Overwrite As Boolean) As Boolean
    '
    'Проверяет путь и при не обходимости создаёт недостающие папки и файл
    '
    Dim f&, j$(), s$
    If Fso.FileExists(AbsPath) And Overwrite Then
        Fso.CreateTextFile (AbsPath)
        CreateFile = True
        Exit Function
    ElseIf Fso.FileExists(AbsPath) Then
        CreateFile = True
        Exit Function
    End If
    '------------------------
    j = Split(AbsPath, t)
    On Error GoTo 1
    For f = 0 To UBound(j) - 1
        s = s & j(f) & t
        If Not Fso.FolderExists(s) And f = 0 Then
            Exit Function 'Драйвер указан не верно
        ElseIf Not Fso.FolderExists(s) Then
            Call Fso.CreateFolder(s)
        End If
    Next
    
    Fso.CreateTextFile (s & j(f))
    CreateFile = True
1
End Function
 
Function CreateFolder(ByVal AbsPath$) As Boolean
    '
    'Проверяет путь и при не обходимости создаёт недостающие папки
    '
    Dim f&, j$(), s$
    CreateFolder = Fso.FolderExists(AbsPath)
    If CreateFolder Then Exit Function
    '---------------
    j = Split(AbsPath, t)
    On Error GoTo 1
    For f = 0 To UBound(j)
        s = s & j(f) & t
        If Not Fso.FolderExists(s) And f = 0 Then
            Exit Function 'Драйвер указан не верно
        ElseIf Not Fso.FolderExists(s) Then
            Call Fso.CreateFolder(s)
        End If
    Next
    CreateFolder = Fso.FolderExists(s)
1
End Function
Добавлено через 8 минут
Сейчас у меня уже устроенно так как я задумал...
тестирую, пробую регить разные компоненты, в том числе и те которые
ранее были зареганны.. вроде бы работает...

Добавлено через 2 минуты
тоесть ранишние пропускаются а новые аккуратно вписываются
куда надо...

Добавлено через 8 минут
я вот думаю, как- же всётаки сделать иконку для моей проги ...
наверное придеться добавить любую форму в проект...
потому-что иконка может храниться в файлах формы...
FRX помоему...

или вот еще идея: если делать установочный файл то придеться перекомпилить
VB-шный проект с указанной для него иконкой...
тоесть сам проект держать гденибудь неподалеку, и перекомпиливать
используя все ту-же прогу...

Добавлено через 3 минуты
...ладно вопрос остаётся в силе, както надо придумать
нормальный способ, чтоб изменять иконку у EXE-шника

Добавлено через 1 час 34 минуты
Так-же случайно наткнулся в интернете на такую инфу...
оказывается многие компоненты VBA
не запустятся даже после регистрации так как будут

выдавать это...

This application is about to initialize ActiveX controls that might be unsafe.
If you trust the sourse of this file, select OK and the controls will be initialized using your current workspace settings


и требовать лицензию...


выкладываю скопированную инфу той страницы
Список ключей лицензии для различных компонентов:
Code
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
// Masked Edit Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\BC96F860-9928-11cf-8AFA-00AA00C00905 = mmimfflflmqmlfffrlnmofhfkgrlmmfmqkqj
 
 // Chart Control 6.0 (OLEDB) license key
 HKEY_CLASSES_ROOT\Licenses\12B142A4-BD51-11d1-8C08-0000F8754DA1 = aadhgafabafajhchnbchehfambfbbachmfmb
 
 // Common Dialog Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905 = gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj
 
 // ADO Data Control 6.0 (OLEDB) license key
 HKEY_CLASSES_ROOT\Licenses\C4145310-469C-11d1-B182-00A0C922E820 = konhqhioohihphkouimonhqhvnwiqhhhnjti
 
 // Common Controls-3 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\38911DA0-E448-11D0-84A3-00DD01104159 = mcpckchcdchjcjcclidcgcgchdqdcjhcojpd
 
 // Windows Common Controls-2 5.0 (SP2) license key
 HKEY_CLASSES_ROOT\Licenses\9E799BF1-8817-11cf-958F-0020AFC28C3B = uqpqnqkjujkjjjjqwktjrjkjtkupsjnjtoun
 
 // Windows Common Controls license key
 HKEY_CLASSES_ROOT\Licenses\57CBF9E0-6AA7-11cf-8ADB-00AA00C00905 = aahakhchghkhfhaamghhbhbhkbpgfhahlfle
 
 // Data Bound Grid Control 5.0(SP3) license key
 HKEY_CLASSES_ROOT\Licenses\556C75F1-EFBC-11CF-B9F3-00A0247033C4 = xybiedobrqsprbijaegcbislrsiucfjdhisl
 
 // Data Bound List Controls 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\096EFC40-6ABF-11cf-850C-08002B30345D = knsgigmnmngnmnigthmgpninrmumhgkgrlrk
 
 // Internet Transfer Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\78E1BDD1-9941-11cf-9756-00AA00C00908 = yjrjvqkjlqqjnqkjvprqsjnjvkuknjpjtoun
 
 // Multimedia Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\B1EFCCF0-6AC1-11cf-8ADB-00AA00C00905 = qqkjvqpqmqjjpqjjvpqqkqmqvkypoqjquoun
 
 // Chart Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\7C35CA30-D112-11cf-8E72-00A0C90F26F8 = whmhmhohmhiorhkouimhihihwiwinhlosmsl
 
 // Windows Common Controls-2 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\4F86BADF-9F77-11d1-B1B7-0000F8753F5D = iplpwpnippopupiivjrioppisjsjlpiiokuj
 
 // Windows Common Controls 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\ED4B87C4-9F76-11d1-8BF7-0000F8754DA1 = knlggnmntgggrninthpgmnngrhqhnnjnslsh
 
 // Comm Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905 = kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
 
 // DataGrid Control 6.0 (OLEDB) license key
 HKEY_CLASSES_ROOT\Licenses\CDE57A55-8B86-11D0-b3C6-00A0C90AEA82 = ekpkhddkjkekpdjkqemkfkldoeoefkfdjfqe
 
 // DataList Control 6.0 (OLEDB) license key
 HKEY_CLASSES_ROOT\Licenses\A133F000-CCB0-11d0-A316-00AA00688B10 = cibbcimbpihbbbbbnhdbeidiocmcbbdbgdoc
 
 // DBWin license key
 HKEY_CLASSES_ROOT\Licenses\D015B071-D2ED-11d0-A31A-00AA00688B10 = gjdcfjpcmjicjcdcoihcechjlioiccechepd
 
 // MSDBRPT license key
 HKEY_CLASSES_ROOT\Licenses\9DF1A470-BA8E-11D0-849C-00A0C90DC8A9 = cchcqjejhcgcqcfjpdfcdjkckiqikchcojpd
 
 // FlexGrid Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\72E67120-5959-11cf-91F6-C2863C385E30 = ibcbbbebqbdbciebmcobmbhifcmciibblgmf
 
 // MAPI Controls 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\899B3E80-6AC6-11cf-8ADB-00AA00C00905 = wjsjjjlqmjpjrjjjvpqqkqmqukypoqjquoun
 
 // MSRDO 2.0 license key
 HKEY_CLASSES_ROOT\Licenses\B1692F60-23B0-11D0-8E95-00A0C90F26F8 = mjjjccncgjijrcfjpdfjfcejpdkdkcgjojpd
 
 // RemoteData Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\43478d75-78e0-11cf-8e78-00a0d100038e = imshohohphlmnhimuinmphmmuiminhlmsmsl
 
 // Windowless Controls 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\80E80EF0-DBBE-11D0-BCE2-00A0C90DCA10 = qijimitpmpnpxplpvjnikpkpqoxjmpkpoivj
 
 // PictureClip Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\6FB38640-6AC7-11cf-8ADB-00AA00C00905 = gdjkokgdldikhdddpjkkekgknesjikdkoioh
 
 // Rich TextBox Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\DC4D7920-6AC8-11cf-8ADB-00AA00C00905 = iokouhloohrojhhhtnooiokomiwnmohosmsl
 
 // Sheridan Tab Control license key
 HKEY_CLASSES_ROOT\Licenses\190B7910-992A-11cf-8AFA-00AA00C00905 = gclclcejjcmjdcccoikjlcecoioijjcjnhng
 
 // SysInfo Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\E32E2733-1BC5-11d0-B8C3-00A0C90DCA10 = kmhfimlflmmfpffmsgfmhmimngtghmoflhsg
 
 // Winsock Control 6.0 license key
 HKEY_CLASSES_ROOT\Licenses\2c49f800-c2dd-11cf-9ad6-0080c7e7b78d = mlrljgrlhltlngjlthrligklpkrhllglqlrk
Добавлено через 4 минуты
и пример добавления лицензии через реестр

Visual Basic
1
2
3
4
5
6
Sub Primer()
    ' добавляем ключ лицензии для FlexGrid Control 6.0
    CreateObject("WScript.Shell").RegWrite _
    "HKEY_CLASSES_ROOT\Licenses\72E67120-5959-11cf-91F6-C2863C385E30", _
    "ibcbbbebqbdbciebmcobmbhifcmciibblgmf", "REG_SZ"
End Sub
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.05.2014, 16:02
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
нормальный способ, чтоб изменять иконку у EXE-шника
Нормальный один - редактировать ресурс, т.к. иконка - ресурс.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 17:38  [ТС]
А так можно получить GUID и тем самым определить
зарегана ли ваша библиотека или нет...

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
Option Explicit
 
Type GUID
    B(16) As Byte
End Type
Declare Function GetClassFile Lib "Ole32.DLL" (ByVal lpszFileName As String, ByRef pclsid As GUID) As Long
Declare Function StringFromGUID2 Lib "Ole32.DLL" (ByRef rguid As GUID, ByVal lpsz As String, ByVal cbMax As Long) As Long
Public Declare Function GetCLSID6 Lib "VB6STKIT.DLL" Alias "GetClsidFromActXFile" (ByVal pszFilename As String, ByVal pszProgID As String, ByVal pszClsid As String) As Long
 
'Sub Main()
'    Dim s$
'    s = InputBox("Введите имя своей DLL на примере ниже..", , "C:\Windows\system32\shell32.dll")
'    MsgBox "GUID = " & GetCLSID(s)
'End Sub
 
Private Sub Form_Load()
    Dim s$
    s = InputBox("Введите имя своей DLL на примере ниже..", , "C:\Windows\system32\shell32.dll")
    MsgBox "GUID = " & GetCLSID(s)
End Sub
 
Function GetCLSID(FileName As String) As String
    Dim g As GUID
    Dim RetVal As Long
    Dim strGUID As String
    Dim MyProgID As String
    RetVal = GetClassFile(StrConv(FileName, vbUnicode), g)
    strGUID = Space(255)
    RetVal = StringFromGUID2(g, strGUID, 255)
    strGUID = StrConv(strGUID, vbFromUnicode)
 
    If (InStr(strGUID, Chr(0)) > 0) Then
        strGUID = Left(strGUID, InStr(strGUID, Chr(0)) - 1)
    End If
    RetVal = GetCLSID6(CStr(FileName), MyProgID, strGUID)
    GetCLSID = strGUID
End Function
Добавлено через 13 минут
Я нашел по подсказке от The Trick'а по одному слову с очень английского сайта...
так-что.. возможно это кривой способ...

Добавлено через 1 минуту
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
GetCLSID6 Lib "VB6STKIT.DLL"
смущает это...
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
14.05.2014, 17:48
FelixMacintosh, нет, так не надо делать.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 19:17  [ТС]
Или вот... откопал и прикрутил способ
который у меня работает только вот не знаю чья это библиотека...
TLI.TLIApplication ?
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
Option Explicit
 
Sub Main()
    Dim s$
    s = InputBox("Введите имя своей DLL на примере ниже..", , "shell32.dll")
    MsgBox "GUID = " & CLSIDFromFile(s)
End Sub
 
'Private Sub Form_Load()
'    Dim s$
'    s = InputBox("Введите имя своей DLL на примере ниже..", , "shell32.dll")
'    MsgBox "GUID = " & CLSIDFromFile(s)
'End Sub
 
Public Function CLSIDFromFile(sFile As String) As String
   Dim tliapp As Object
   Dim tli As Object
   On Error GoTo Out
    Set tliapp = CreateObject("TLI.TLIApplication")
   Set tli = tliapp.TypeLibInfoFromFile(sFile)
   CLSIDFromFile = tli.GUID
Out:
 End Function
Добавлено через 2 минуты
кстате уже не приходится полное имя файла указывать...
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 19:27  [ТС]
и вообще очень много всякой инфы выдаёт...
что может весьма пригодиться...
только вот есть ли она на всех машинах...
Миниатюры
Логика регистрации файла  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 19:53  [ТС]
так-же... удалось её найти в references
Миниатюры
Логика регистрации файла  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
14.05.2014, 23:45  [ТС]
искал в гугле инфу...
и неожиданно было узнать что нужная инфа всё время была буквально перед глазами
Регистрация ActiveX-DLL без прав администратора (UAC включен)
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
15.05.2014, 00:17
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
..как я понял ...TLI.TLIApplication -отличная штука..
можно свой мини браузер объектов сделать...
Это обертка на ITypeLib(info), то что делал я. Только это отдельная либа, которой нет у многих, поэтому не советую ей пользоваться в контексте твоей задачи.
Тебе нужно загрузить библиотеку типов, не регистрируя ее в реестре (смотри мой пример просмотрщика COM), получать CLSID библиотеки, искать в реестре соответствующий ключ. Если он есть, значит либа уже зарегистрирована.
2
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.05.2014, 00:27  [ТС]
этот пример ?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
15.05.2014, 00:28
FelixMacintosh, да
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.05.2014, 00:35  [ТС]
Спасибо..
опять обламил.. я уже надежно прикрутил ...TLI.TLIApplication
честно, не знал об ней
..где же ты раньше то был... ладно отдохну.. завтра заново буду прикручивать...
честно говоря я тоже недоверие проявляю к другим библиотекам тем более
в контексте моей задачи, еще раз спасибо за твои правильные наводки
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.05.2014, 09:28  [ТС]
Навел порядок, чтоб было понятно что требуется...
The Trick, подскажи как сделать функцию
которая бы просто, показала GUID в том случае если dll зарегана
и не показывала бы его в другом случае, и все...

ниже модуль чтоб разобраться как и что и рабочий проект, теперь и с ресурсом...
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
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
Option Explicit
DefLng F, H-I, L, N: DefStr J, S
'
'    © FelixMacintosh 2014
'
Private Const r = "/", k = "\", p = " ", w = ";", t = "."
Private Const Infinite = -1&
Private Const Synchronize = &H100000
Private Const TH32CS_SNAPTHREAD = &H4
'
Private ShellApp As Object 'As Shell '
Private Fso As Object 'As FileSystemObject '
Private tliapp As Object 'As TLIApplication '
'
Private Archive As Object
'
Private Type THREADENTRY32
    dwSize As Long
    cntUsage As Long
    th32ThreadID As Long
    th32OwnerProcessID As Long
    tpBasePri As Long
    tpDeltaPri As Long
    dwFlags As Long
End Type
 '
Private Declare Function Thread32First Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function Thread32Next Lib "kernel32" (ByVal hSnapshot As Long, ByRef lpte As THREADENTRY32) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function OpenThread Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
Dim j1(), ID$, bool As Boolean, byt() As Byte, start&
Dim Install_log$
 
Function GUID$(ByVal FileName$)
    On Error Resume Next
    FileName = Fso.GetBaseName(FileName) & t & Fso.GetExtensionName(FileName)
    GUID = tliapp.TypeLibInfoFromFile(FileName).GUID
End Function
 
Sub MAIN()
    Dim f&, ListComands$(), s$, j$(), j1$()
    
    Set ShellApp = CreateObject("Shell.Application")
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set tliapp = CreateObject("TLI.TLIApplication")
 
    'Проверка на наличие файла Install.log (создание его)
    Install_log = Fso.GetParentFolderName(Environ("ComSpec"))
    Install_log = Install_log & k & App.EXEName & k & "Install.Log"
    CreateFile Install_log
 
    On Error Resume Next
    DeleteSetting App.EXEName
 
    s = Command$
    ListComands = Split(s, r)
    For f = 1 To UBound(ListComands)
        j = Split(Trim(ListComands(f)), p, 2): TrimArray j
        '---------
        Select Case LCase(j(0))
        Case "cmd": com_cmd j
        Case "s": com_s j
        Case "j": com_j j
        Case "uz", "uz+": com_uz j
        Case "z": com_z j
        Case "r", "r+": com_r j
        Case "u", "u+": com_u j
        Case "h", "help": com_h j
        Case Else
            'Не выполнена ни одна комманда
        End Select
    Next
    '-------------------------Конец программы
    Set ShellApp = Nothing
    Set Fso = Nothing
    Set tliapp = Nothing
    
End Sub
Sub com_h(j())
    SS j(0), MsgBox(LoadResString(101))
End Sub
 
Sub com_u(j())
    SS j(0), RegSvr32(j(1), True)
End Sub
 
Sub com_r(j())
    ID = GUID(j(1))
    If j(0) = "r+" And Len(ID) Then
        SS j(0), "GUID", ID
    Else
        ID = RegSvr32(j(1))
        If Len(ID) Then 'Запись о зарегестрированном файле
            byt = StrConv(vbCrLf & ID, vbFromUnicode)
            WriteBytes Install_log, byt, Fso.GetFile(Install_log).Size + 1
        End If
        SS j(0), ID
    End If
End Sub
 
Sub com_z(j())
    j1 = Split(j(1), w): TrimArray j1
    If Fso.FileExists(j1(0)) And LCase(Fso.GetExtensionName(j1(0))) = "zip" Then
        'Используем архив
        Set Archive = ShellApp.NameSpace((Fso.GetAbsolutePathName(j1(0))))
        SS j(0), CopyPathToArchive(Fso.GetAbsolutePathName(j1(1)))
    ElseIf LCase(Fso.GetExtensionName(j1(0))) = "zip" Then
        'Создаём архив
        CreateArchive Fso.GetAbsolutePathName(j1(0))
        SS j(0), CopyPathToArchive(Fso.GetAbsolutePathName(j1(1)))
    End If
End Sub
 
Sub com_uz(j())
    j1 = Split(j(1), w): TrimArray j1
    If Fso.FileExists(j1(0)) And LCase(Fso.GetExtensionName(j1(0))) = "zip" Then
        If UBound(j1) = 1 Then
            ReDim Preserve j1(2): j1(2) = CurDir$
        End If
        Set Archive = ShellApp.NameSpace((Fso.GetAbsolutePathName(j1(0))))
        SS j(0), UnZipFile(j1(1), j1(2))
    End If
End Sub
 
Sub com_j(j())
    j1 = Split(j(1), w): TrimArray j1
    start = Fso.GetFile(j1(0)).Size + 1
    SS j(0), "Start", start
    SS j(0), "Len", WriteBytes(j1(0), ReadBytes(j1(1)), start) - 1
End Sub
 
Sub com_s(j())
    j1 = Split(j(1), w): TrimArray j1
    SS j(0), "Len", WriteBytes(j1(1), ReadBytes(j1(0), CLng(j1(2))), , True)
End Sub
 
Sub com_cmd(j())
    SS j(0), WaitShell(j(1))
End Sub
 
Function CreateFile(ByVal AbsPath$, Optional Overwrite As Boolean) As Boolean
    '
    'Проверяет путь и при не обходимости создаёт недостающие папки и файл
    '
    Dim f&, j$(), s$
    If Fso.FileExists(AbsPath) And Overwrite Then
        Fso.CreateTextFile (AbsPath)
        CreateFile = True
        Exit Function
    ElseIf Fso.FileExists(AbsPath) Then
        CreateFile = True
        Exit Function
    End If
    '------------------------
    j = Split(AbsPath, k)
    On Error GoTo 1
    For f = 0 To UBound(j) - 1
        s = s & j(f) & k
        If Not Fso.FolderExists(s) And f = 0 Then
            Exit Function 'Драйвер указан не верно
        ElseIf Not Fso.FolderExists(s) Then
            Call Fso.CreateFolder(s)
        End If
    Next
 
    Fso.CreateTextFile (s & j(f))
    CreateFile = True
1
End Function
 
Function CreateFolder(ByVal AbsPath$) As Boolean
    '
    'Проверяет путь и при не обходимости создаёт недостающие папки
    '
    Dim f&, j$(), s$
    CreateFolder = Fso.FolderExists(AbsPath)
    If CreateFolder Then Exit Function
    '---------------
    j = Split(AbsPath, k)
    On Error GoTo 1
    For f = 0 To UBound(j)
        s = s & j(f) & k
        If Not Fso.FolderExists(s) And f = 0 Then
            Exit Function 'Драйвер указан не верно
        ElseIf Not Fso.FolderExists(s) Then
            Call Fso.CreateFolder(s)
        End If
    Next
    CreateFolder = Fso.FolderExists(s)
1
End Function
 
 
Function WaitShell(MyCommand$) As Long
    '
    'Вызов Shell и новой команды, с ожиданием её завершения
    '
    Dim hProc&
    WaitShell = Shell(MyCommand)
    hProc = OpenProcess(Synchronize, False, WaitShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
End Function
 
Sub SS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    SaveSetting App.EXEName, Section, Key, Setting
End Sub
 
Function GS(ByVal Section$, ByVal Key$, Optional ByVal Setting$ = "0")
    GS = GetSetting(App.EXEName, Section, Key, "")
End Function
 
Sub TrimArray(Arr() As String)
    Dim f&
    For f = 0 To UBound(Arr): Arr(f) = Trim(Arr(f)): Next
End Sub
 
 
 
Function CopyHere(Parent, vItem) As Boolean
    '
    'Функция копирования
    'Аргументы: Папка (Zip-папка) // Копируемый объект
 
    Dim f&, Key$, hnd&
    Dim Trd(2) As Collection
    Dim tid As Long, hTrd As Long
    On Error Resume Next
 
    'Получаем список потоков !
    GetThreadsList Trd(0) 'Запомнить старые потоки
    Call Parent.CopyHere((vItem)) 'Копирование >>>>>>>>>>>>
    GetThreadsList Trd(1) 'Запомнить новые потоки
 
    If vItem.Count > 0 Then If Err.Number = 0 Then GoTo 1 'В этом случае ждать не нужно
 
    Err.Clear 'Сброс всех ошибок
 
    Set Trd(2) = New Collection
    For f = Trd(1).Count To 1 Step -1
        Key = "C" & Trd(1).Item(f)
        hnd = Trd(0)(Key)
        If hnd = 0 Then Trd(2).Add CLng(Mid$(Key, 2))
    Next
 
    For f = 1 To Trd(2).Count 'Ожидание открытых потоков
        tid = Trd(2).Item(f)
        hTrd = OpenThread(Synchronize, False, tid)
        WaitForSingleObject hTrd, Infinite
        CloseHandle hTrd
    Next
    CopyHere = True
    Exit Function
1
End Function
 
 
Sub GetThreadsList(List As Collection)
    '
    '   Возвращает List с коллекцией потоков
    '
    Dim hSnap&, TE As THREADENTRY32, PID&
    Set List = New Collection
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
    If hSnap = -1 Then Exit Sub
    TE.dwSize = Len(TE)
    PID = GetCurrentProcessId()
    If Thread32First(hSnap, TE) Then
        Do
            If TE.th32OwnerProcessID = PID Then List.Add TE.th32ThreadID, "C" & CStr(TE.th32ThreadID)
        Loop While Thread32Next(hSnap, TE)
    End If
    CloseHandle hSnap
End Sub
 
 
Function UnZipFile(ByVal ParseName$, ByVal DestPath$) As Boolean
    '
    'Извлечение из архива
    'Аргументы:
    'DestPath - Путь к папке для распаковки архива
    'ParseName - Путь в архиве
    'Примечание: Имена файлов в архиве, должны быть полными !
    '
    Dim DestDir As Object, Parse As Object
    If (Archive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error GoTo 1
 
    If Not Fso.FolderExists(DestPath) Then 'Проверяем есть ли папка
        Fso.CreateFolder (DestPath) 'Создаём папку для перемещаемых туда объектов
    End If
 
    Set DestDir = ShellApp.NameSpace((DestPath))
    Set Parse = Archive.ParseName((ParseName))
    UnZipFile = CopyHere(DestDir, Parse)
    Exit Function
1
End Function
 
Function ArchivePath$(Optional ByVal ind&)
    '
    'Возврат имени файла в архиве
    'Ind - номер файла в архиве (начало с 0), по умолчанию - 0
    '
    If (Archive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    On Error Resume Next
    ArchivePath = Archive.Items().Item((ind)).Рath
End Function
 
Function CopyPathToArchive(ByVal FilePath$) As Boolean
    '
    'Копирует файл / папку в архив
    'Арг: полное имя
    '
    If (Archive Is Nothing) Then Exit Function 'Проверяем указан ли архив ?
    If Len(Dir(FilePath, vbDirectory)) > 0 And Len(Dir(FilePath)) = 0 Then
 
        If ShellApp.NameSpace((FilePath)).Items.Count = 0 Then
            MsgBox ("Нельзя добавить пустую папку")
            Exit Function
        End If
    End If
    CopyPathToArchive = CopyHere(Archive, FilePath) 'Копируем в архив
End Function
 
Function CreateArchive(ByVal AbsPath$) As Boolean
    '
    'Создаёт новый архив
    'Возврат утверждения о создании
    'Арг: полное имя
    '
    If Fso.FileExists(AbsPath) Then Kill AbsPath
    Fso.CreateTextFile(AbsPath, True).Write "PK" & Chr(5) & Chr(6) & String(18, 0)
    Set Archive = ShellApp.NameSpace((AbsPath))
    CreateArchive = Not (Archive Is Nothing) 'Возврат утверждения о создании
End Function
 
Function RegSvr32(Path$, Optional Reg As Boolean = True) As String
    '
    'Возвращает GUID
    'Арг: Зарегить/Отменить регистрацию
    '
    Dim hProc&, hShell&
    If Fso.FileExists(Path) = False Then Exit Function
    Select Case LCase(Fso.GetExtensionName(Path))
    Case "dll", "ocx"
    Case Else: Exit Function
    End Select
    If Reg Then
        hShell = Shell("RegSvr32 /s " & Path) 'Зарегить
    Else
        hShell = Shell("RegSvr32 /s /u " & Path) 'Отменить
    End If
 
    hProc = OpenProcess(Synchronize, False, hShell)
    WaitForSingleObject hProc, Infinite
    CloseHandle hProc
    RegSvr32 = GUID(Path)
End Function
 
 
Function ReadBytes(FileName$, Optional ByRef start&, Optional ByVal dln&) As Byte()
    'Чтение байт из файла
    'Арг: Путь // Старт // Длина по умолчанию всего файла
    'Возврат: Массив байт и следующая позиция чтения
    Dim n&, f&: On Error Resume Next
    f = FreeFile
    Open FileName For Binary As #f
    If start Then Else start = 1
    n = LOF(f) - start + 1
    If dln = 0 Or dln > n Then dln = n
    ReDim Preserve ReadBytes(dln - 1)
    Get #f, start, ReadBytes: Close #f
    If Err = 0 Then start = start + UBound(ReadBytes) + 1
End Function
 
Function WriteBytes&(FileName$, bytes() As Byte, Optional ByVal start&, _
Optional Overwrite As Boolean)
    'Запись байт в файл
    'Арг: Путь // Массив байт // Старт // Флаг перезаписи
    'Возврат: Следующая позиция записи (при успешном выполнении)
    Dim n&, f&: On Error Resume Next
    If start Then Else start = 1
    f = FreeFile 'Определяем номер свободного файла
    If Overwrite Then Kill FileName
    Open FileName$ For Binary As #f: Put #f, start, bytes: Close #f 'Копируем !
    If Err = 0 Then WriteBytes = start + UBound(bytes) + 1
End Function

пока я совсем не запутался, и не забил... как у нас говорят тут некоторые...
Вложения
Тип файла: rar RegLib.rar (5.4 Кб, 11 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
15.05.2014, 10:42  [ТС]
ну я сейчас постараюсь сделать в отдельном модуле
переписав коды из твоего проекта dllInfo
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2014, 10:42
Помогаю со студенческими работами здесь

Как вывести переменную из файла регистрации
У меня есть регистрация, при регистрации пользователь указывает логин,пароль,мыло и телефон. Вот как мне вывести номер телефон...

Вывод уведомления о успешной регистрации(не удачной) на странице с формой регистрации
Здравствуйте, не получается сделать вывод сообщения на странице с формой регистрации. <?php $dbc = mysqli_connect('...',...

Вывести форму регистрации для регистрации другого пользователя
Здравствуйте, уважаемые форумчане! Простите, вообще не бум-бум в Joomle, но нужно сделать лабу по нему. Мне нужно сделать регистрацию...

Что за журнал регистрации в 1с8.3 есть, где все регистрации сохраняются в отдельными файлами в определенную папку
Здравствуйте, не подскажите, кто знает Что за журнал регистрации в 1с8.3 есть, где все регистрации сохраняются в отдельными файлами...

хочу вконтакт, а не получается. просит регистрации через два файла jad и ...! заколебался слать смс!
что делать с тупарылым аккаунтом, хочу вконтакт, а не получается. просит регистрации через два файла jad и ...! заколебался слать смс!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru