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

Завершение регистрации - как поймать процесс RegSvr32?

17.04.2014, 20:05. Показов 2943. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как поймать процесс RegSvr32

например я вызываю:
Visual Basic
1
Call Shell("RegSvr32 /s " & Name) 'Регистрация
но так-как у меня это работает внутри суб-компонента могут случиться
неожиданные глюки (чего правда еще небыло но всётаки...)

если кто понял мой вопрос очень прошу подсказать с ответом
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2014, 20:05
Ответы с готовыми решениями:

Завершение регистрации по PHP
Всем привет! Если проверки прошли успешно -то выводим уведомление "Вы успешно зарегистрировались!". То как, убрать формы полей...

Завершение сеанса на этапе регистрации
Проблема: после загрузки windows xp proff , нажимаю пользователя, начинается и сразу заканчивается загрузка пользователя ( даже admina)...

Процесс авторизации/регистрации
Как реализовать всплывающее окно авторизации/регистрации при старте программы? Есть определенная программа. Нужно ее связать с формой (...

20
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.04.2014, 20:24
shell возвращает PID процесса, открывай процесс, получай хендл а дальше как тебе писал.
Нужно получать PID процесса и делать WaitForSingleObject, пока процесс RegSvr не закончит свое выполнение.
Смотри мой пример с записью данных в свой EXE как я там дожидаюсь завершения cmd.exe
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
17.04.2014, 20:31  [ТС]
Кстати подобный код мне бы пригодился и с работой с ZIP-архивом
я правда там реализовал методом возникновения крайнего окна ...
и ожидания его окончания но я думаю это тоже костыльный вариант

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Смотри мой пример
где его искать ? закинь мне ссыль куданибудь друг !
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.04.2014, 20:38
Лучший ответ Сообщение было отмечено Антихакер32 как решение

Решение

FelixMacintosh, Что? Я же давал код, где треды отслеживаются (про Zip архив)?

Добавлено через 7 минут
Все самое интересное у меня в блоге .
В псевдокоде:
Visual Basic
1
2
3
4
5
6
Dim pid As Long, hProc As Long
pid = Shell(Path)
hProc = OpenProcess(SYNCHRONIZE, False, pid)
WaitForSingleObject hProc, INFINITE
CloseHandle hProc
' Процесс завершился
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 11:32  [ТС]
Изменил, скоро выложу в блоге
так-же надо подумать что делать если такой 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
Option Explicit
'----------------------------------------------------------[ Константы ]
Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
'----------------------------------------------------------[ События ]
Event ObjectEvent(Info As EventInfo)
'----------------------------------------------------------[ WinApi ]
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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 WithEvents Component As VBControlExtender
 
Public Property Get Obj() As Variant
    'От сюда можно получить доступ к свойствам "Component"
    Set Obj = Component.object
End Property
 
Private Sub UserControl_Initialize()
    'Варианты инициализации
'    Set Component = RegSvr32("Dialogs.ocx", "dlgColor")
'    Set Component = RegSvr32("Dialogs.ocx", "dlgOpenSave")
    Set Component = RegSvr32("Dialogs.ocx", "dlgBrawser")
End Sub
 
Private Function RegSvr32(ByVal Name$, Optional ByVal Class$) As Object
    Const r = "."
    Dim Byt() As Byte, s$, f&, j$()
    Dim pid&, hProc&
    '===================================================
    Name = Trim(Name): Class = Trim(Class) 'Убрать передние и задние пробелы
    j = Split(Name, r, 2): j(1) = LCase(j(1)) 'Тип мелкими буквами
    s = App.Path & "\" & Name 'Создание файлового пути
    On Error Resume Next 'Отключить остановку программы на случай ошибки
    f = GetAttr(s) And Not vbDirectory 'Бит соответствия файлу
    If f > 0 And Len(Class) Then
        GoTo Reg: 'Если файл существует то переход к ссылке на объект
    ElseIf Len(Class) Then
        Byt = LoadResData(Name, j(1))
        f = FreeFile 'Определяем номер свободного файла
        Open s For Binary As #f: Put #f, 1, Byt: Close #f 'Копируем !
Reg:
        For f = 0 To 1 'Две попытки на случай если объект уже зарегестр.
            Select Case j(1) 'Это может быть OCX или DLL
            Case "ocx"
                Licenses.Add j(0) & r & Class
                Set RegSvr32 = Controls.Add(j(0) & r & Class, Class)
            Case "dll": Set RegSvr32 = CreateObject(j(0) & r & Class)
            End Select
            If Err Then 'pid = Shell("RegSvr32 /s /u " & Name) 'Подсказка, отмена регистрации
                pid = Shell("RegSvr32 /s " & Name) 'Регистрация
                hProc = OpenProcess(SYNCHRONIZE, False, pid)
                WaitForSingleObject hProc, INFINITE 'Ждать завершения регистрации
                CloseHandle hProc
                Err.Clear 'Сброс ошибки
            Else: Exit For
            End If
        Next
    End If
End Function
Private Sub Component_ObjectEvent(Info As EventInfo)
 
    If Info.Name = "NewSize" Then UserControl_Resize
    RaiseEvent ObjectEvent(Info) 'передача всех событий
End Sub
 
Private Sub UserControl_Show()
    Component.Visible = True
End Sub
 
 
Private Sub UserControl_Resize()
    Component.Move 0, 0, ScaleWidth
    Height = Component.Height
End Sub
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 11:45  [ТС]
Результат !
Запустить Exe-файл можно прям из архива...
Вложения
Тип файла: rar Demo1.rar (176.9 Кб, 5 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 11:58  [ТС]
Теперь можно сколько угодно компонентов хранить
в ресурсах, и dll-ки с разными картинками и все что угодно ...
правда уже выкладывать на форуме такие поделки не смогу
так-как имеются ограничения по размеру файлов для закачки
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 21:11  [ТС]
Вот что я придумал а что если автоматически создавать
общую папку, где будут храниться компоненты ?

подскажите дорогие друзья я правильно делаю ?

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
Option Explicit
'----------------------------------------------------------[ Константы ]
Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
'----------------------------------------------------------[ События ]
Event ObjectEvent(Info As EventInfo)
'----------------------------------------------------------[ WinApi ]
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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 WithEvents Component As VBControlExtender
 
Private Function CommonFolder$()
    'Общая папка для компонентов
    Const FelixMacintosh = "© FelixMacintosh"
    Dim ACN$, f&
    ACN = App.CompanyName
    For f = 1 To Len(ACN)
        If Mid$(ACN, f, 1) Like "[\/:*?""<>|.]" Then Mid$(ACN, f, 1) = "_"
    Next
    On Error Resume Next
    'Если по каким-то причинам App.CompanyName оказалость пустым _
    то названием общей папки будет мой ник по умолчанию
    ACN = Trim(ACN): ACN = IIf(Len(ACN), ACN, FelixMacintosh)
    CommonFolder = Environ("CommonProgramFiles") & "\" & ACN
    If Len(Dir(CommonFolder, vbDirectory)) Then Else MkDir CommonFolder
End Function
 
Private Sub UserControl_Initialize()
    'Варианты инициализации
'    Set Component = RegSvr32("Dialogs.ocx", "dlgColor")
'    Set Component = RegSvr32("Dialogs.ocx", "dlgOpenSave")
    Set Component = RegSvr32("Dialogs.ocx", "dlgBrawser")
End Sub
 
Private Function RegSvr32(ByVal Name$, Optional ByVal Class$) As Object
    Const r = "."
    Dim Byt() As Byte, s$, f&, j$()
    Dim pid&, hProc&
    '===================================================
    Name = Trim(Name): Class = Trim(Class) 'Убрать передние и задние пробелы
    j = Split(Name, r, 2): j(1) = LCase(j(1)) 'Тип мелкими буквами
    s = CommonFolder & "\" & Name 'Создание файлового пути
    On Error Resume Next 'Отключить остановку программы на случай ошибки
    f = GetAttr(s) And Not vbDirectory 'Бит соответствия файлу
    If f > 0 And Len(Class) Then
        GoTo RegFile: 'Если файл существует то переход к ссылке на объект
    ElseIf Len(Class) Then
        Byt = LoadResData(Name, j(1)) 'Загрузка указанного ресурса в байтовый массив
        f = FreeFile 'Определяем номер свободного файла
        Open s For Binary As #f: Put #f, 1, Byt: Close #f 'Копируем !
RegFile:
        For f = 0 To 1 'Две попытки, на случай если объект уже зарегестр.
            Select Case j(1) 'Это может быть OCX или DLL
            Case "ocx"
                Licenses.Add j(0) & r & Class
                Set RegSvr32 = Controls.Add(j(0) & r & Class, Class)
            Case "dll": Set RegSvr32 = CreateObject(j(0) & r & Class)
            End Select
            If Err Then 'pid = Shell("RegSvr32 /s /u " & Name) 'так будет отмена регистрации !
                pid = Shell("RegSvr32 /s " & Name) 'Регистрация
                hProc = OpenProcess(SYNCHRONIZE, False, pid)
                WaitForSingleObject hProc, INFINITE 'Ждать завершения регистрации
                CloseHandle hProc
                Err.Clear 'Сброс ошибки
            Else: Exit For
            End If
        Next
    End If
End Function
 
Public Property Get Obj() As Variant
    'От сюда можно получить доступ к свойствам "Component"
    Set Obj = Component.object
End Property
 
Private Sub Component_ObjectEvent(Info As EventInfo)
    If Info.Name = "NewSize" Then UserControl_Resize
    RaiseEvent ObjectEvent(Info) 'передача всех событий
End Sub
 
Private Sub UserControl_Show()
    Component.Visible = True
End Sub
 
Private Sub UserControl_Resize()
    Component.Move 0, 0, ScaleWidth
    Height = Component.Height
End Sub
Миниатюры
Завершение регистрации - как поймать процесс RegSvr32?   Завершение регистрации - как поймать процесс RegSvr32?  
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 22:52  [ТС]
а для чего нужно свойство ?
в объекте Licenses
: LicenseKey : "" : String

Добавлено через 50 минут
важное дополнение
более правильнее будет установить общую папку
иначе потом может не зарегестрироваться файл
ChDir CommonFolder 'Устанавливаем общую папку

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


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
Option Explicit
'----------------------------------------------------------[ Константы ]
Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000
'----------------------------------------------------------[ События ]
Event ObjectEvent(Info As EventInfo)
'----------------------------------------------------------[ WinApi ]
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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 WithEvents Component As VBControlExtender
 
Private Function CommonFolder$()
    'Общая папка для компонентов
    Const FelixMacintosh = "© FelixMacintosh"
    Dim ACN$, f&
    ACN = App.CompanyName
    For f = 1 To Len(ACN)
        If Mid$(ACN, f, 1) Like "[\/:*?""<>|.]" Then Mid$(ACN, f, 1) = "_"
    Next
    On Error Resume Next
    'Если по каким-то причинам App.CompanyName оказалость пустым _
    то названием общей папки будет мой ник по умолчанию
    ACN = Trim(ACN): ACN = IIf(Len(ACN), ACN, FelixMacintosh)
    CommonFolder = Environ("CommonProgramFiles") & "\" & ACN
    If Len(Dir(CommonFolder, vbDirectory)) Then Else MkDir CommonFolder
End Function
 
Private Sub UserControl_Initialize()
    'Варианты инициализации
'    Set Component = RegSvr32("Dialogs.ocx", "dlgColor")
'    Set Component = RegSvr32("Dialogs.ocx", "dlgOpenSave")
    Set Component = RegSvr32("Dialogs.ocx", "dlgBrawser")
End Sub
 
Private Function RegSvr32(ByVal Name$, Optional ByVal Class$) As Object
    Const r = "."
    Dim Byt() As Byte, f&, j$()
    Dim pid&, hProc&
    '===================================================
    Name = Trim(Name): Class = Trim(Class) 'Убрать передние и задние пробелы
    j = Split(Name, r, 2): j(1) = LCase(j(1)) 'Тип мелкими буквами
    On Error Resume Next 'Отключить остановку программы на случай ошибки
    ChDir CommonFolder 'Устанавливаем общую папку
    f = GetAttr(Name) And Not vbDirectory 'Бит соответствия файлу
    If f > 0 And Len(Class) Then
        GoTo RegFile: 'Если файл существует то переход к ссылке на объект
    ElseIf Len(Class) Then
        Byt = LoadResData(Name, j(1)) 'Загрузка указанного ресурса в байтовый массив
        f = FreeFile 'Определяем номер свободного файла
        Open Name For Binary As #f: Put #f, 1, Byt: Close #f 'Копируем !
RegFile:
        For f = 0 To 1 'Две попытки, на случай если объект уже зарегестр.
            Select Case j(1) 'Это может быть OCX или DLL
            Case "ocx"
                Licenses.Add j(0) & r & Class
                Set RegSvr32 = Controls.Add(j(0) & r & Class, Class)
            Case "dll": Set RegSvr32 = CreateObject(j(0) & r & Class)
            End Select
            If Err Then
                pid = Shell("RegSvr32 /s" & Name) 'Регистрация
                hProc = OpenProcess(SYNCHRONIZE, False, pid)
                WaitForSingleObject hProc, INFINITE 'Ждать завершения регистрации
                CloseHandle hProc
                Err.Clear 'Сброс ошибки
            Else: Exit For
            End If
        Next
    End If
End Function
 
Public Property Get Obj() As Variant
    'От сюда можно получить доступ к свойствам "Component"
    Set Obj = Component.object
End Property
 
Private Sub Component_ObjectEvent(Info As EventInfo)
    If Info.Name = "NewSize" Then UserControl_Resize
    RaiseEvent ObjectEvent(Info) 'передача всех событий
End Sub
 
Private Sub UserControl_Show()
    Component.Visible = True
End Sub
 
Private Sub UserControl_Resize()
    Component.Move 0, 0, ScaleWidth
    Height = Component.Height
End Sub
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
18.04.2014, 23:11  [ТС]
Запустите у себя ктонибудь проект ! исходник
кому места на диске не жалко ...
и дайте ответ всё ли заработало
Вложения
Тип файла: rar DEMO Project.rar (345.5 Кб, 5 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
19.04.2014, 04:44  [ТС]
Вобщем так никто и не запустил у себя ...
наверное испужались ...

я уже сделал по своему ...
через поисковик нашел все свои ActiveX с однокоренными названиями
удалил их, затем зачистил реестр с помощью
Advanced System Care 7
после чего запустил свою программу и всё заработало ...

Добавлено через 12 минут
так и быть...
сам себя похвалю...
какой-же я молодец

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

А ведь еще можно и из интернета скачать компонент
там собственно сам файл маленький ...
визуально это будет даже почти не заметно ...
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.04.2014, 14:17  [ТС]
Я там у себя в блоге выкладываю готовые проекты

сейчас делаю на основе того, уже генератор документа для компонента
ниже мои наработки, посоветуйте если чтото не правильно или не может работать ...
Вложения
Тип файла: rar TxGenerator.rar (292.6 Кб, 4 просмотров)
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.04.2014, 14:41  [ТС]
Тот архив с ошибкой, я там случайно заменил
все слова Public на Private, в одном из модулей
не закачивайте преддущий архив !

вот правильно будет ...
Вложения
Тип файла: rar TxGenerator(1).rar (292.6 Кб, 6 просмотров)
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
20.04.2014, 16:44
FelixMacintosh, продолжай. Я, правда, половины не понял. Да и не пишу уже ничего длительное время.
А так бы с удовольствием воспользовался твоими контроллами.
Пожелания: пиши больше комментов, особенно в начале функций (т.е. для чего она).
Я думаю, эта штука станет популярной , когда ты соберешь воедино все компоненты и сделаешь визуальный интерфейс, панель с этими компонентами, или подробную инструкцию, где расписано что там есть, что делает и как подключать (а рекламу для тебя, думаю, не проблема сделать).

Из ошибок - на ключевое слово Component иногда ругается, но второй раз норм. запускается.
И вот здесь вроде вместо 1 должно быть Start:

Private Function WriteBytes...
...
Open FileName$ For Binary As #f: Put #f, 1, Bytes: Close #f
Open FileName$ For Binary As #f: Put #f, Start, Bytes: Close #f

Да и что оно вообще должно делать не совсем понял.

Кстати, ты не планируешь портирование в VBA? Думаю, офисные спецы это высоко оценят.
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
20.04.2014, 23:31  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Open FileName$ For Binary As #f: Put #f, Start, Bytes: Close #f
Спасибо, я знаю что оценят
там производиться бинарная запись данных в файл
в моём случае байтового массива Bytes
Start = это начальная
позиция перезаписи

Добавлено через 2 минуты
Странно что ругаеться, хотелось бы конечно чтоб с 1-го раза запустилось
но я догадываюсь в чем там дело
а насчет коментов, я сейчас и делаю генератор текста для проекта
чтоб потом можно было привязать к компоненту

Добавлено через 2 минуты
и тот архив пока была пауза я уже переделал до неузнаваемости чтоб все работало как в аптеке )

Добавлено через 8 минут
я уже писал примерно как будет импортироваться текст ...
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dialogs.ocx
    Version         = 1.0.0
    Company = FelixMacintosh
 
[Consts]
qwe = 1 /Коментарий к qwe
asd = "dfg"
 
[Enums]
wer
    ert = 1
    dfg = 2 /Коментарий к dfg
abc
    a = 0
    b = 1
    c = 2
 
[Procedures]
Function Create(Name As String, Title As Long) As Long
    /Коментарий к Create
Добавлено через 6 часов 14 минут
Сделал небольшие изменения, ну не знаю ..
у меня запускается надежно !, я даже не поленился
востановил систему на 2 недели ранее чтоб убедиться
что и после таких шагов все заработает

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
Private Function WriteBytes(FileName$, Bytes() As Byte, Optional ByRef 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
 
Private Function RegSvr32(ByVal Name$, Optional ByVal Class$, Optional LicenseKey$) As Object
    Const Start = 2 ^ 17 + 1, dln = 2 ^ 16 'Старт и длина для чтения версии
    Dim Byt() As Byte, Byt1() As Byte, f&, j$()
    '===================================================
    Name = Trim(Name): Class = Trim(Class) 'Убрать передние и задние пробелы
    j = Split(Name, r, 2): j(1) = LCase(j(1)) 'Тип мелкими буквами
    On Error Resume Next 'Отключить остановку программы на случай ошибки
    mCD = CurDir$ 'Запоминаем текущую папку
    ChDir CommonFolder 'Устанавливаем общую папку
    '----------------------
    '''Call WaitShell("RegSvr32 /s /u " & Name)
    '''Kill Name  'Пример отмены регистрации и удаления файла
    '----------------
    Byt = LoadResData(Name, j(1)) 'Загрузка указанного ресурса в байтовый массив
 
    If GetVersion(Byt).Summ <= GetVersion(ReadBytes(Name, Start, dln)).Summ Then
        'Если файл существует и версия совпадает или младше то переход к ссылке на объект
        GoTo RegFile:
    ElseIf Len(Class) Then
        Licenses.Remove j(0) & r & Class 'Удаление лицензии
        Call WaitShell("RegSvr32 /s /u " & Name) 'Отмена регистрации старой версии
        Call WriteBytes(Name, Byt, , True) 'Перезапись
RegFile:
        For f = 0 To 1 'Две попытки, на случай если объект уже зарегестр.
            Err.Clear 'Сброс ошибки
            Select Case j(1) 'Это может быть OCX или DLL
            Case "ocx"
                Licenses.Add j(0) & r & Class, LicenseKey 'Добавление лицнзии
                Set RegSvr32 = Controls.Add(j(0) & r & Class, Class)
            Case "dll": Set RegSvr32 = CreateObject(j(0))
            End Select
            If Err Then 'Если возникли ошибки, то зарегестрироваться
                Call WaitShell("RegSvr32 /s " & Name)
            Else: Exit For
            End If
        Next
    End If
    ChDir mCD 'Установка текущей папки
End Function
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.04.2014, 01:12
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
Вобщем так никто и не запустил у себя ...
Скачал архив из #13, распаковал, запустил. Натравил на какой-то VBP. Произошел STOP в Private Function CreateLinesInfo. Закомментил, продолжил - ничего не произошло. Потом натравил на TxGenerator.vbp - тоже ничего не произошло.
В общем, я не понял, зачем это все нужно.
По поводу вопроса темы - приложение можно запускать через CreateObject("WScript.Shell").Exec, при этом появляется доступ к StdIn, StdOut и StdErr, т.е. с приложением можно работать как будто из консоли.
Подробнее тут: http://www.script-coding.com/WSH/WshShell.html#4..
1
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
21.04.2014, 02:36  [ТС]
Цитата Сообщение от Казанский Посмотреть сообщение
В общем, я не понял, зачем это все нужно.
там в архиве самое начало той работы которую я веду
сейчас я уже намного дальше
позже выложу нормальный проект, уже когда будет все работать
суть такая, что в импортируемый текст который автоматически сохраниться в папке
указанного проекта, будет компактно записанна информация о глобальных
функциях, переменных типах и тд, и коментарии к ним тоже будут переписанны
в удобной форме, все это делаеться для того чтоб такой текст, можно было использовать
где угодно хоть в ресурсе того самого проекта, хоть в базе данных
хоть справочный файл потом сделать отдельно, но я еще подумаю может
в будущем научусь генерировать файл справки ...

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

Добавлено через 8 минут
Цитата Сообщение от Казанский Посмотреть сообщение
Натравил на какой-то VBP
То что у вас запустилось, это мне и надо было выяснить, тоесть теперь я уверен
что унаследованный объект вполне нормально себя ведет ...
2
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
21.04.2014, 09:50
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
где разные компоненты могут наследовать друг у друга методы и свойства
Объекты могут наследовать интерфейсы.
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
необходимо хоть какоето описание к ним
Описание можно делать стандартными средствами, в Procedure attributes.
Впрочем необязательно регистрировать компонент или библиотеку чтобы ей пользоваться. Например на новых системах без прав админа твоя прога не будет работать.
0
 Аватар для Антихакер32
1201 / 473 / 46
Регистрация: 06.01.2014
Сообщений: 1,797
Записей в блоге: 19
21.04.2014, 12:20  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Описание можно делать стандартными средствами, в Procedure attributes.
я раньше так делал, тоесть с помощью специальной программы создавал дискрипты
(Attribute Vb_Discription = "...) но меня такой способ уже не устраивает
Цитата Сообщение от The trick Посмотреть сообщение
Например на новых системах без прав админа твоя прога не будет работать.
я понимаю к чему ты клониш, это надо уже в самом компоненте
делать отдельный модуль там в нем делать видимую процедуру со ссылкой на объект

скомпилировать, ... затем вызывать с помощю private declare function ... у себя в проекте верно я понял ?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
21.04.2014, 13:31
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
но меня такой способ уже не устраивает
Почему? Очень удобный, и в Object browser'е и в Properties (при изменении свойств) отображается описание. Думаешь твой вариант удобнее будет?
Цитата Сообщение от FelixMacintosh Посмотреть сообщение
я понимаю к чему ты клониш, это надо уже в самом компоненте
делать отдельный модуль там в нем делать видимую процедуру со ссылкой на объект
скомпилировать, ... затем вызывать с помощю private declare function ... у себя в проекте верно я понял ?
Нет, есть такая вещь как UAC. В инете почитай. Я пока не могу расписать я не дома еще.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.04.2014, 13:31
Помогаю со студенческими работами здесь

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

Процесс регистрации через сессию
Делаю регистрацию (заполнение формы) через сессию. Скрипт, который проверяет данные пользователя и пишет все в БД, генерирует Логин и...

Изменить процесс регистрации WordPress
Народ нужно заменить email/пароль на номерТелефона/sms пароль? Кто делал, реально возможно? ps: также и процесс восстановления пароля...

Процесс регистрации элемента ActiveX
Объясните пожалуйста процесс регистрации элемента ActiveX. Запуск regsvr32.exe c параметрами: regsvr32 MyActiveX.ocx затем ...

Regsvr32 или как зарегать DLL?
Привет всем, прошу помочь: Есть библиотека DLL написана на .NET в ней есть методы интересные мне, но проблема в том что я не могу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
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. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru