Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786

Как встроить адресную строку в стандартный редактор реестра Windows 7 или Windows XP

03.07.2023, 20:53. Показов 2594. Ответов 48
Метки нет (Все метки)

Всем привет!!!

Наконец начал реализовывать свою давнею идею, чтобы встроить в редактор реестра Windows 7 сверху адресную строку, где можно вводить адрес реестра и переходить по кустам/ключам реестра. Просто вводишь в текстовое поле полный путь, нажимаешь Enter и готово. Как в программе RegJump только тут не надо будет переключаться на другие программы. Текстовое поле будет прямо в программе редактора реестра! Это такое ноу-хау я придумал!

Я уже начал делать конечно эту программу и столкнулся с некоторыми трудностями, которые приходится постоянно преодолевать. Это очень сложная программа и чтобы её написать пришлось изрядно потрудится вообще. Но зато теперь можно будет навигироваться по реестру через командную/адресную строку вверху редактора реестра, в точности так же как это реализовано в Windows 10.

Я уже давно создал проект и начал делать эту программу. Просто времени мало и ещё не успел дописать до конца, пока только работает с представлением 32-битного реестра. Скоро напишу и под 64 бита тоже будет работать.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.07.2023, 20:53
Ответы с готовыми решениями:

Как предотвратить windows xp от потери реестра? или поломки реестра...
Хочу узнать как предотвратить windows xp от потери реестра. Ато уже как то надоело раз в месяц восстанавливать его..

Редактор реестра Windows
Нужно написать программу для работы с реестром Windows. Прошу помочь мне теоретически. Что для этого нужно? Скиньте все возможные...

PCRegedit - оффлайновый редактор реестра Windows
Бывают случаи, когда после некорректных изменений реестра (например, вирусом) Windows не загружается. В этом случае необходима правка...

48
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 12:34  [ТС]
Вот новый листинг программы (теперь запускается сразу в фокусе и фокус сразу переходит на адресную строку):

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
Option Explicit
' *------------------------------------------------------*
' | Программа RegEditJumpHacking                         |
' | Версия 2.0                                           |
' | Автор идеи: testuser2                                |
' | Copyright (c) 07.07.2023 by HackerVlad and The Trick |
' | e-mail: vladislavpeshkov@ya.ru                       |
' *------------------------------------------------------*
 
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) 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 WaitForInputIdle Lib "user32" (ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutW" (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Private Declare Function CreateCaret Lib "user32" (ByVal hWnd As Long, ByVal hBitmap As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function ShowCaret Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, ByRef lpPoint As POINTAPI) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" (ByVal dwExStyle As Long, ByVal lpClassName As Long, ByVal lpWindowName As Long, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Long) As Long
Private Declare Function Wow64EnableWow64FsRedirection Lib "kernel32.dll" (ByVal IsEnable As Boolean) As Boolean
Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, bWow64Process As Long) As Long
Private Declare Function UpdateWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetFocusAPI Lib "user32" Alias "SetFocus" (ByVal hWnd As Long) As Long
Private Declare Function DestroyCaret Lib "user32" () As Long
 
' Для прозрачности
Private Declare Function MapWindowPoints Lib "user32" (ByVal hWndFrom As Long, ByVal hwndTo As Long, lppt As Any, ByVal cPoints As Long) As Long
Private Declare Function SetBrushOrgEx Lib "gdi32" (ByVal hdc As Long, ByVal nXOrg As Long, ByVal nYOrg As Long, lppt As Any) As Long
Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
 
Private Const INFINITE = -1
Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_OPERATION = &H8
Private Const WS_CHILD          As Long = &H40000000
Private Const WS_VISIBLE        As Long = &H10000000
Private Const WS_EX_CLIENTEDGE  As Long = &H200&
Private Const ES_AUTOHSCROLL As Long = &H80&
Private Const ES_MULTILINE As Long = &H4&
Private Const SMTO_ABORTIFHUNG = &H2
Private Const WM_SETTEXT = &HC
Private Const WM_GETTEXT = &HD
Private Const WM_CHAR = &H102
Private Const WM_KILLFOCUS = &H8
Private Const WM_SETFOCUS = &H7
Private Const EM_SETSEL = &HB1
 
' Для прозрачности
Private Const WM_CTLCOLORBTN As Long = &H135
Private Const WM_CTLCOLORSTATIC As Long = &H138
Dim hBackBrush  As Long ' Фоновая кисть
 
Private Type POINTAPI
    x As Long
    y As Long
End Type
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Dim MyProcRunIs64 As Long
Dim hwndText1 As Long
 
Private WithEvents m_cFormHook As CTrickSubclass
Private WithEvents m_cTextHook As CTrickSubclass
Private WithEvents m_cTextBoxInRegEditHook As CTrickSubclass
 
Public Sub ChangeWindowsRegEdit(Optional CreateTextBox As Boolean)
    Dim rctSysTreeView32 As RECT
    Dim rctSysListView32 As RECT
    Dim rctRegEdit As RECT
    Dim ScreenXYCoordinates As POINTAPI
    Dim WidthCaption As Long
    Dim HeightCaption As Long
    Dim newWidth1 As Long
    Dim newHeight1 As Long
    Dim newWidth2 As Long
    Dim newHeight2 As Long
    Dim LeftSysListView32 As Long
    Dim WidthTextBox As Long
    
    GetWindowRect hSysTreeView32, rctSysTreeView32
    GetWindowRect hSysListView32, rctSysListView32
    
    GetWindowRect hRegEdit, rctRegEdit
    ClientToScreen hRegEdit, ScreenXYCoordinates
    
    WidthCaption = ScreenXYCoordinates.x - rctRegEdit.Left ' Высота заголовка окна regedit'а + меню (если есть)
    HeightCaption = ScreenXYCoordinates.y - rctRegEdit.Top ' Ширина границы рамки окна regedit'а
    
    newWidth1 = rctSysTreeView32.Right - rctRegEdit.Left - WidthCaption
    newHeight1 = rctSysTreeView32.Bottom - rctRegEdit.Top - HeightCaption
    
    LeftSysListView32 = rctSysListView32.Left - rctRegEdit.Left - WidthCaption
    
    newWidth2 = rctSysListView32.Right - rctRegEdit.Left - WidthCaption - LeftSysListView32
    newHeight2 = rctSysListView32.Bottom - rctRegEdit.Top - HeightCaption
    
    MoveWindow hSysTreeView32, 0, 25, newWidth1, newHeight1 - 25, True
    MoveWindow hSysListView32, LeftSysListView32, 25, newWidth2, newHeight2 - 25, True
    
    WidthTextBox = rctRegEdit.Right - rctRegEdit.Left - (WidthCaption * 2)
    
    If CreateTextBox = True Then
        If IsWindow(hwndTextBox) = 0 Then
            hwndTextBox = CreateWindowEx(WS_EX_CLIENTEDGE, StrPtr("Edit"), ByVal 0&, WS_CHILD Or WS_VISIBLE Or ES_MULTILINE Or _
            ES_AUTOHSCROLL, 0, 0, WidthTextBox, 25, hRegEdit, 0&, 0&, ByVal 0&)
            SetDefaultFontWindow hwndTextBox
        End If
    Else
        MoveWindow hwndTextBox, 0, 0, WidthTextBox, 25, True
    End If
    
    UpdateWindow hRegEdit
End Sub
 
Private Sub SetDefaultWindowsRegEdit()
    Dim rctSysTreeView32 As RECT
    Dim rctSysListView32 As RECT
    Dim rctRegEdit As RECT
    Dim ScreenXYCoordinates As POINTAPI
    Dim WidthCaption As Long
    Dim HeightCaption As Long
    Dim newWidth1 As Long
    Dim newHeight1 As Long
    Dim newWidth2 As Long
    Dim newHeight2 As Long
    Dim LeftSysListView32 As Long
    
    GetWindowRect hSysTreeView32, rctSysTreeView32
    GetWindowRect hSysListView32, rctSysListView32
    
    GetWindowRect hRegEdit, rctRegEdit
    ClientToScreen hRegEdit, ScreenXYCoordinates
    
    WidthCaption = ScreenXYCoordinates.x - rctRegEdit.Left
    HeightCaption = ScreenXYCoordinates.y - rctRegEdit.Top
    
    newWidth1 = rctSysTreeView32.Right - rctRegEdit.Left - WidthCaption
    newHeight1 = rctSysTreeView32.Bottom - rctRegEdit.Top - HeightCaption
    
    LeftSysListView32 = rctSysListView32.Left - rctRegEdit.Left - WidthCaption
    
    newWidth2 = rctSysListView32.Right - rctRegEdit.Left - WidthCaption - LeftSysListView32
    newHeight2 = rctSysListView32.Bottom - rctRegEdit.Top - HeightCaption
    
    MoveWindow hSysTreeView32, 0, 0, newWidth1, newHeight1, True
    MoveWindow hSysListView32, LeftSysListView32, 0, newWidth2, newHeight2, True
End Sub
 
Private Sub Check1_Click()
    If Check1.Value = 1 Then
        ChangeWindowsRegEdit True
        
        If hEvent > 0 Then Unhook
        Hook
    Else
        DestroyWindow hwndTextBox
        Unhook
        
        SetDefaultWindowsRegEdit
    End If
End Sub
 
Private Sub Command1_Click()
    Dim TextBoxText As String
    
    If hRegEdit > 0 Then
        TextBoxText = String$(2048, vbNullChar)
        SendMessageTimeout hwndText1, WM_GETTEXT, 2048, StrPtr(TextBoxText), SMTO_ABORTIFHUNG, 5000, 0
        TextBoxText = Replace(TextBoxText, vbNullChar, vbNullString)
        
        If IsProcess64bit(hRegEdit) = True Then
            RegJump64 TextBoxText
        Else
            RegJump32 TextBoxText
        End If
    End If
End Sub
 
Private Sub Command2_Click()
    Dim pid As Long
    Dim hProcess As Long
    
    If IsSubclassed = True Then
        Command1_Click
        Exit Sub
    End If
    
    ' Найти окно редактора реестра
    hRegEdit = FindWindow("RegEdit_RegEdit", vbNullString)
    
    If hRegEdit = 0 Then
        If MyProcRunIs64 = 1 Then
            If Option1.Value = True Then
                Wow64EnableWow64FsRedirection False ' Выключить перенаправление с System32 на SYSWOW64
                Shell Environ("windir") & "\regedit.exe", vbNormalFocus
                Wow64EnableWow64FsRedirection True ' Включить перенаправление обратно (установить по умолчанию)
            Else
                Shell Environ("windir") & "\regedit.exe", vbNormalFocus
            End If
        Else
            Shell Environ("windir") & "\regedit.exe", vbNormalFocus
        End If
        
        Do ' Ожидаем появления окна
            hRegEdit = FindWindow("RegEdit_RegEdit", vbNullString)
        Loop While hRegEdit = 0 ' Выполнять цикл до тех пор пока не будет найдено искомое окно
    End If
    
    If hRegEdit > 0 Then
        ' Найти дерево SysTreeView32 в окне редактора реестра
        hSysTreeView32 = FindWindowEx(hRegEdit, ByVal 0&, "SysTreeView32", vbNullString)
        
        ' Найти листвиев hSysListView32 в окне редактора реестра
        hSysListView32 = FindWindowEx(hRegEdit, ByVal 0&, "SysListView32", vbNullString)
        
        If Check1.Value = 1 Then
            ChangeWindowsRegEdit True
            
            ' Подождать окончательной загрузки программы regedit и установить фокус на новое текстовое поле (адресную строку)
            GetWindowThreadProcessId hRegEdit, pid ' Вычисляем PID процесса regedit
            hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_OPERATION, 0, pid) ' Открываем процесс
            WaitForInputIdle hProcess, INFINITE ' Ожидаем окончательной загрузки программы regedit
            CloseHandle hProcess
            MyWait 1 ' В отличии от Sleep не сбивает фокус и не замораживает поток
            SetFocusAPI hwndTextBox
            
            If IsSubclassed = False Then
                ' Отсубклассировать текстовое поле внутри редактора реестра
                Set m_cTextBoxInRegEditHook = New CTrickSubclass
                m_cTextBoxInRegEditHook.Hook hwndTextBox
                IsSubclassed = True
            End If
            
            If hEvent > 0 Then Unhook
            Hook
        End If
    End If
End Sub
 
Private Sub Form_Initialize()
    InitCommonControlsXP
End Sub
 
Private Sub Form_Load()
    Dim TextInTextBox As String
    
    IsWow64Process -1, MyProcRunIs64
    
    If MyProcRunIs64 = 0 Then
        Option1.Visible = False
        Option2.Visible = False
    End If
    
    SetDefaultFontWindow Command1.hWnd
    SetDefaultFontWindow Command2.hWnd
    
    Top = 300
    Left = Screen.Width / 2 - Me.Width / 2
    
    hwndText1 = CreateWindowEx(WS_EX_CLIENTEDGE, StrPtr("Edit"), ByVal 0&, WS_CHILD Or WS_VISIBLE Or ES_MULTILINE Or _
    ES_AUTOHSCROLL, 408, 32, 449, 33, Me.hWnd, 0&, 0&, ByVal 0&)
    SetDefaultFontWindow hwndText1
    TextInTextBox = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    SendMessage hwndText1, WM_SETTEXT, 0, StrPtr(TextInTextBox)
    
    Set m_cFormHook = New CTrickSubclass
    Set m_cTextHook = New CTrickSubclass
    m_cFormHook.Hook Me.hWnd
    m_cTextHook.Hook hwndText1
    
    ' Для прозрачности
    hBackBrush = CreatePatternBrush(Me.Picture.handle)
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    DestroyWindow hwndTextBox
    Unhook
    SetDefaultWindowsRegEdit
    modX64Call.Uninitialize
End Sub
 
' Отсубклассировать форму
Private Sub m_cFormHook_WndProc(ByVal hWnd As stdole.OLE_HANDLE, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long, lRet As Long, bDefCall As Boolean)
    Select Case lMsg
        ' Для прозрачности
        Case WM_CTLCOLORSTATIC, WM_CTLCOLORBTN
            Dim pts(1) As Long
            
            ' Получаем координаты элемента
            MapWindowPoints lParam, Me.hWnd, pts(0), 1
            
            ' Сдвигаем точку отсчета координат кисти, чтобы она совпадала с фоновом изображением под контролом
            SetBrushOrgEx wParam, -pts(0), -pts(1), ByVal 0&
            
            ' Возвращаем кисть
            lRet = hBackBrush
            
            bDefCall = False
    End Select
End Sub
 
' Отсубклассировать текстовое поле внутри редактора реестра
Private Sub m_cTextBoxInRegEditHook_WndProc(ByVal hWnd As stdole.OLE_HANDLE, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long, lRet As Long, bDefCall As Boolean)
    Select Case lMsg
        Case WM_CHAR
            CreateCaret hWnd, 0, 0, 15
            ShowCaret hWnd
            
            If wParam = 13 Then ' Если нажата клавиша Enter
                Dim TextBoxText As String
                
                DestroyCaret
                
                lRet = 0
                bDefCall = False
                
                TextBoxText = String$(2048, vbNullChar)
                
                SendMessageTimeout hwndTextBox, WM_GETTEXT, 2048, StrPtr(TextBoxText), SMTO_ABORTIFHUNG, 5000, 0
                TextBoxText = Replace(TextBoxText, vbNullChar, vbNullString)
                
                If IsProcess64bit(hRegEdit) = True Then
                    RegJump64 TextBoxText
                Else
                    RegJump32 TextBoxText
                End If
                
                SetFocusAPI hSysTreeView32
            End If
            
            If wParam = 1 And lParam = 1966081 Then ' Если нажаты клавишы Ctrl+A
                lRet = 0
                bDefCall = False
                SendMessage hWnd, EM_SETSEL, 0, -1 ' Выделить всё
            End If
            
        Case WM_SETFOCUS
            CreateCaret hWnd, 0, 0, 15
            ShowCaret hWnd
            
        Case WM_KILLFOCUS
            DestroyCaret
    End Select
End Sub
 
' Отсубклассировать текстовое поле
Private Sub m_cTextHook_WndProc(ByVal hWnd As stdole.OLE_HANDLE, ByVal lMsg As Long, ByVal wParam As Long, ByVal lParam As Long, lRet As Long, bDefCall As Boolean)
    Select Case lMsg
        Case WM_CHAR
            If wParam = 13 Then ' Если нажата клавиша Enter
                lRet = 0
                bDefCall = False
                Command1_Click
            End If
            
            If wParam = 1 And lParam = 1966081 Then ' Если нажаты клавишы Ctrl+A
                lRet = 0
                bDefCall = False
                SendMessage hWnd, EM_SETSEL, 0, -1 ' Выделить всё
            End If
    End Select
End Sub
Вложения
Тип файла: zip RegEditJumpHacking (3).zip (88.3 Кб, 3 просмотров)
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 12:57  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
мне кажется это проблемма Windows (начиная 7ки вроде бы) запуск окна без фокуса.
Да нету никакой проблемы в винде. Все программы по умолчанию запускаются в фокусе.
Цитата Сообщение от testuser2 Посмотреть сообщение
Другой момент: Винда загрузилась, ты открываешь блокноти или еще там что, и начинаешь печатать, тем временем подгружается еще где-то что-то или какая-инбудь уведомительная х*ня, причем даже без окна и у тебя теряется фокус. Это еще один баг. Когда в чем-то работаешь - фокус не должен теряться, то беж ни что не должно отнимать фокус у человека, человек главнее компа..
Хм, ты знаешь на самом деле в Microsoft постарались сделать так чтобы ничто не перебивало фокус. На самом деле грамотно всё сделали. Да и есть настройка в реестре, если что, я не помню какой адрес в реестре и какой параметр, но помню, что это точно есть. Настройка которая отвечает за то, чтобы программы фокусировались и не фокусировались при каждой попытке активизации любого окна через SetFocus.

Добавлено через 4 минуты
Плюс ко всему прочему, всем известно что через функцию SetForegroundWindow нельзя активизировать своё окно, только чужое. Это сделали специально чтобы не перехватывали фокус как раз, пока ты что-то там усердно печатаешь в своём блокноте))))))

Я несколько статей уже прочитал на тему фокусов. Конечно что всем известны и так же обходные пути, как активизировать свою программу, если тебе вдруг это надо будет, по таймеру например. Обходные пути это через AttachThreadInput.

Добавлено через 2 минуты
testuser2, ну что, теперь работает как надо? и открывается теперь сразу в фокусе? и адресная строка сразу в фокусе тоже? скачал мой новый вариант?

Добавлено через 6 минут
testuser2, по поводу фокусов почитай вот тут: Стабильное переключение в другое приложение я ещё в 2005 году сам придумал как активизировать свою программу, код сам придумал, без интернета тогда даже, ещё на те времена...а потом увидел в этом посте тут код такой же очень похожий короче посмотрел ну почти один-в-один как у меня, короче люди давно пользуются этим хаком.
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
07.07.2023, 13:38
HackerVlad, теперь классно!, редактор открывается и можно сразу нажать ctrl+V и Enter, извини, но еще скажу что не хватает (больше ни каких идей не буду говорить )) - коммандлайна, чтобы создать ярлык на запуск сразу редактора с адресной строкой, это как бы само напрашивается. Вот если взять neersoft, у него у любой проги по 100 параметров
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 14:06  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
коммандлайна
Что это такое? Ты о чём вообще? Ну смотри исходник у тебя есть, внеси небольшие правки типа Form1.Hide при запуске и типа чтобы сразу кнопка нажималась, если тебе так хочется) Я думаю я лично этого делать не буду, а вот ты сам спокойно можешь для себя приспособить как тебе нравится вообще. И что такое коммандлайн вообще?
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
07.07.2023, 14:47
Цитата Сообщение от HackerVlad Посмотреть сообщение
Что это такое? Ты о чём вообще?
Хотел на примере показать, но это надо рыться в дисках. Ранше я чтасто пользовался всякими ярлыками, у меня была все время в ходу прожка Pstart, там было много ярлыков для разных комманд, на отключение/подключение, извлечение и т.д. Можно было коммандой извлчеь, допустим, внешний hdd по его идентификатору, или конкретную флешку по id, или отрубить какое-то устроство, отключить интернет. Кстати для интернета у меня, допустим есть такой ярлык
Code
1
K:\Users\Admin\Desktop\Утилиты\hidec\Release\hidec.exe /w C:\Windows\System32\schtasks.exe /Run /TN EnablDisableEthernet
который запускает батник в скрытом режиме. Данный батник отключает/выключает сетевой адаптер
Windows Batch file
1
2
@echo off
netsh  interface show interface |findstr/C:"Разрешен       Подключен      Выделенный       Ethernet">nul&& (netsh interface set interface name="Ethernet" admin=disable)||(netsh interface set interface name="Ethernet" admin=enable)
Добавлено через 5 минут
точнее он запукает назначенное задание с админскими правами, а это задание уже запускает батник, такая вот хитрая схема )

Добавлено через 5 минут
У твоего любимого Process Hacker довольно широкий арсенал команд-лайн параметров
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 15:09  [ТС]
testuser2, ну короче ты сам можешь это запрограммировать спокойно, если захочешь
как я понял коммандлайн это Command$ командная строка запуска
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
07.07.2023, 15:24
Коммандлайн это классная штука облегчающая жизнь. Вот еще пример. Я пока пока изучал (в кавычках) многопоточку, сделал такой батник, для быстрой перезагрузки Excel (в случае краха) и отключающий окна с предупреждениями. А перезапускать пришлось раз 100
Windows Batch file
1
2
3
4
taskkill /f /im excel.exe
taskkill /f /im DWWIN.EXE
taskkill /f /im WerFault.exe
start excel
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
07.07.2023, 15:28
[OFF]Первый раз такое вижу, чтобы на VB было больше посетителей чем на VBA )[/OFF
Изображения
 
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 15:36  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
Я пока пока изучал (в кавычках) многопоточку, сделал такой батник, для быстрой перезагрузки Excel (в случае краха)
Не проще ли в самом начале твоих скриптов зарегистрировать программу к автоматическому перезапуску в случае краха с помощью API-функции RegisterApplicationRestart?

Visual Basic
1
2
3
4
5
6
7
Private Declare Function RegisterApplicationRestart Lib "kernel32" (ByVal pszCommandline As Long, ByVal dwFlags As Long) As Long
 
Dim RestartCmd As String
 
'RestartCmd = путь к файлу для запуска который будет автоматически открыт (то что после .exe) команда перезапуска
 
RegisterApplicationRestart StrPtr(RestartCmd), -2147483640 ' -2147483640 это хак, чтобы не ждать 60 сек. для регистрации
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 17:05  [ТС]
testuser2, специально для тебя! исполнил твою последнею просьбу по улучшению программы! всё больше вносить правки уже не буду! будем считать проект полностью завершённым!!!

итак теперь можно в командной строке запуска указывать путь к реестру и будет выполняться автоматический переход к этому разделу реестра! а так же добавил команду "/hide" этот ключ нужен для того чтобы запускать программу в скрытом режиме!!! теперь уж точно полный кайф))) всё для вас)))

например команда
Bash
1
RegEditJumpHacking.exe HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows /hide
запустит редактор реестра и откроет нужный раздел при этом сама программа будет скрыта

или например команда
Bash
1
RegEditJumpHacking.exe HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
откроет этот раздел реестра но при этом сама программа-оболочка будет видна на экране
Вложения
Тип файла: zip RegEditJumpHacking (3).zip (91.6 Кб, 0 просмотров)
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 17:52  [ТС]
Всё-таки придётся ещё немного подправить, так как программа перестала работать в Windows XP, я только что проверил, из-за того что я добавил иконку... Виндовсу XP видишь ли иконка не понравилась... Ну и жесть... Придётся делать с помощью API-функций опять, добавлять иконку... Блин, красоту навёл называется...
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
07.07.2023, 18:44
Цитата Сообщение от HackerVlad Посмотреть сообщение
итак теперь можно в командной строке запуска указывать путь к реестру и будет выполняться автоматический переход к этому разделу реестра! а так же добавил команду "/hide" этот ключ нужен для того чтобы запускать программу в скрытом режиме!!!
Отлично!! Самое главное это строка ты ее сделал, в мире много людей кто еще не пользуется Win10, можешь смело выкладывать на гит-хаб
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 19:02  [ТС]
Для командной строки надо бы ещё добавить ключ /64 или /32 для битности regedit'а

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

Добавлено через 10 минут
Ну из-за того что я добавил иконку и программа чудесным образом перестала работать в XP то придётся опять переделывать чтобы в XP работала. Хрюшка она такая старенькая и капризная, вот не понравилась иконка... Ну чем ей не понравилась моя иконка... Придётся загружать иконку с помощью API-функций, но так даже лучше, так как программа не будет создавать TMP-файл теперь.

Добавим в форму:

Visual Basic
1
2
3
4
5
6
7
8
9
Private Declare Function ExtractIconEx Lib "shell32" Alias "ExtractIconExW" (ByVal lpszFile As Long, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
 
Private Const ICON_SMALL = 0
Private Const ICON_BIG = 1
Private Const WM_SETICON = &H80
 
Dim hIconSmall As Long
Dim hIconLarge As Long
И добавим код в загрузку самой формы:

Visual Basic
1
2
3
4
5
6
7
    Dim IconPath As String
    
    IconPath = AppPath & "\" & App.EXEName & ".exe"
 
    ExtractIconEx StrPtr(IconPath), 0, hIconLarge, hIconSmall, 1 ' Загрузить и большую и маленькую иконку
    SendMessage hWnd, WM_SETICON, ICON_SMALL, hIconSmall ' Установить маленькую иконку
    SendMessage hWnd, WM_SETICON, ICON_BIG, hIconLarge ' Установить большую иконку
Данный трюк, мною разработанный ни так давно кстати, позволяет загружать иконку на форму самому с помощью SendMessage и ExtractIconEx а так же мне придётся подключить модуль AppPath как хорошо что я нидавно все эти коды уже написал)

Добавлено через 4 минуты
testuser2, кстати даже в той версии, что я выложил последней, я уже сделал так, что программа закрывается сама автоматически, при закрытии окна редактора реестра, в случае если программа запускается в скрытом режиме через командную строку
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
07.07.2023, 20:00  [ТС]
Всё Ура! Доделал я наконец-то! Надеюсь уже до совершенства :-)

Итак, чтобы улучшить программу я добавил следующие ключи в команду запуска командной строки:
Ключи:
/hide - запустить программу в скрытом режиме
/32 - запустить 32-битный regedit (для 32-битных операционных систем не используется)
/no_address_bar - не встраивать адресную строку в редактор реестра (например для Windows 10 так как там уже есть адресная строка)
/no_focus_in_tree_view - не переводить фокус на дерево редактора реестра, после нажатия клавиши Enter в адресной строке (этот ключ не применяется вместе с /no_address_bar)
Вложения
Тип файла: zip RegEditJumpHacking2.zip (94.6 Кб, 2 просмотров)
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
08.07.2023, 10:46  [ТС]
Небольшое улучшение для оптимизации кода:

В модуле modEventHook.bas немного переделаем вызов хука SetWinEventHook и установим вызов хука только на процесс regedit.exe а не на всю систему и все процессы как это было, чтобы сэкономить системные ресурсы.

Visual Basic
1
hEvent = SetWinEventHook(EVENT_MIN, EVENT_MAX, 0, AddressOf WinEventProc, 0, 0, 0) ' Устанавливаем хук
поменяем на (установим pid отслеживания только для процесса регедит:

Visual Basic
1
hEvent = SetWinEventHook(EVENT_MIN, EVENT_MAX, 0, AddressOf WinEventProc, pid, 0, 0) ' Устанавливаем хук
Процедура будет теперь выглядеть следующим образом:

Visual Basic
1
2
3
4
5
6
7
' Начать захват
Public Sub Hook()
    Dim pid As Long
    
    GetWindowThreadProcessId hRegEdit, pid ' Вычисляем PID процесса regedit
    hEvent = SetWinEventHook(EVENT_MIN, EVENT_MAX, 0, AddressOf WinEventProc, pid, 0, 0) ' Устанавливаем хук
End Sub
Полностью весь код новой версии модуля modEventHook.bas:

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
Option Explicit
Private Declare Function SetWinEventHook Lib "user32" (ByVal eventMin As Long, ByVal eventMax As Long, ByVal hmodWinEventProc As Long, ByVal pfnWinEventProc As Long, ByVal idProcess As Long, ByVal idThread As Long, ByVal dwFlags As Long) As Long
Private Declare Function UnhookWinEvent Lib "user32" (ByVal hWinEventHook As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
 
Private Const EVENT_OBJECT_LOCATIONCHANGE As Long = &H800B&
Private Const EVENT_OBJECT_DESTROY As Long = &H8001&
Private Const EVENT_MIN = &H1
Private Const EVENT_MAX = &H7FFFFFFF
 
Global hEvent As Long
Global hRegEdit As Long
Global hSysTreeView32 As Long
Global hSysListView32 As Long
Global hwndTextBox As Long
Global IsSubclassed As Boolean
Global AutoHide As Boolean
 
' Начать захват
Public Sub Hook()
    Dim pid As Long
    
    GetWindowThreadProcessId hRegEdit, pid ' Вычисляем PID процесса regedit
    hEvent = SetWinEventHook(EVENT_MIN, EVENT_MAX, 0, AddressOf WinEventProc, pid, 0, 0) ' Устанавливаем хук
End Sub
 
' Закончить захват
Public Sub Unhook()
    UnhookWinEvent hEvent ' Снимаем хук
End Sub
 
' Здесь будем отлавливать события окна RegEdit вместо стандартного субклассирования окна (которое не фурычит в 64-битных процессах)
Private Sub WinEventProc(ByVal hWinEventHook As Long, ByVal dwEvent As Long, ByVal hWnd As Long, ByVal idObject As Long, ByVal idChild As Long, ByVal dwEventThread As Long, ByVal dwmsEventTime As Long)
    Dim TextBoxText As String
    
    If hWnd = hSysTreeView32 Then
        If dwEvent = EVENT_OBJECT_LOCATIONCHANGE Then ' Если изменились размеры окна
            Form1.ChangeWindowsRegEdit
        End If
    End If
    
    If hWnd = hRegEdit Then
        If dwEvent = EVENT_OBJECT_DESTROY Then ' Если закрывается редактор реестра
            IsSubclassed = False
            Unhook
            If AutoHide = True Then Unload Form1 ' Выход из программы, в случае если программа была запущена в скрытом режиме
        End If
    End If
End Sub
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
08.07.2023, 10:54  [ТС]
Новая окончательная версия программы
Вложения
Тип файла: zip RegEditJumpHacking2 (2).zip (94.8 Кб, 2 просмотров)
0
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
08.07.2023, 12:21  [ТС]
testuser2, пришли мне, пожалуйста, скриншот, если можешь редактора реестра с адресной строкой из Windows 8 своего я хочу посмотреть как моя программа встраивает в Windows 8 всё ли хорошо там не глючит ли окно (у меня просто только XP и семёрка) а у тебя Windows 8
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
08.07.2023, 12:57
Если были глюки я бы сказал
Миниатюры
Как встроить адресную строку в стандартный редактор реестра Windows 7 или Windows XP  
1
Вернулся
 Аватар для HackerVlad
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
12.07.2023, 15:58  [ТС]
testuser2, слушай нашёл на гитхабе: https://github.com/testuser2 это не твой репозиторий? О_о
0
1401 / 860 / 92
Регистрация: 08.02.2017
Сообщений: 3,660
Записей в блоге: 2
12.07.2023, 16:09
HackerVlad, неа, у меня нет профиля на гитхабе, я только пользуюсь плодами чужих трудов, иногда могу ценную критику проивети и посетовать на чьи-то недоработки ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2023, 16:09

Рухнула Windows 8 на ноутбуке Dell. Как установить заново Windows 8 или Windows 7?
при попытке восстановить систему с widows 8 пишет что не удалось восстановить,ни одним из предлагаемых способов. запускаю установку с...

Можно ли вызвать стандартный диалог Windows API (Windows 95) 'Выбор папки' в модуле VBA for Office 97?
Можно ли вызвать стандартный диалог Windows API (Windows 95) 'Выбор папки' в модуле VBA for Office 97 и, если можно, как получить от него...

Крах системы при попытке использовать стандартный антивирус, или Неопознанная угроза (Windows XP)
Собственно всё началось с того, что запустив дефрагментатор Smart Defrag 2 на системном диске С, обратил внимание на некритичное подвисание...

Хочу сделать программу невидимой для Windows XP или Windows 2000 или Windows NT
Ya hochu sdelat` programu nevidimuyu na Windows XP ili Windows 2000 ili Windows NT Nashel funkciu dlya Windows 9x, amne nuzno dlya vise...

Paint от Windows 7 на Windows XP или аналог у которого оформление 100% как у paint Windows 7
Добрый вечер. Собственно ситуация: знакомой надо в школе показывать материал на уроках информатики. На компах учеников - win7 и...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru