Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

288 lines
9.6 KiB

VERSION 5.00
Begin VB.Form FindWorkingForm
BorderStyle = 3 'Fixed Dialog
Caption = "Find"
ClientHeight = 1305
ClientLeft = 45
ClientTop = 330
ClientWidth = 3330
Icon = "FindWrk.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 1305
ScaleWidth = 3330
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton CancelButton
Caption = "Cancel"
Default = -1 'True
Height = 345
Left = 1920
TabIndex = 1
Top = 840
Width = 1260
End
Begin VB.PictureBox picIcon
AutoSize = -1 'True
BorderStyle = 0 'None
ClipControls = 0 'False
Height = 480
Left = 240
Picture = "FindWrk.frx":0442
ScaleHeight = 337.12
ScaleMode = 0 'User
ScaleWidth = 337.12
TabIndex = 0
Top = 240
Width = 480
End
Begin VB.Label Label1
Caption = "Searching the Metabase..."
Height = 255
Left = 960
TabIndex = 2
Top = 360
Width = 2175
End
End
Attribute VB_Name = "FindWorkingForm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Option Compare Text
DefInt A-Z
'Metabase globals
Const ALL_METADATA = 0
Const DWORD_METADATA = 1
Const STRING_METADATA = 2
Const BINARY_METADATA = 3
Const EXPANDSZ_METADATA = 4
Const MULTISZ_METADATA = 5
'Form Parameters
Public Target As String
Public SearchKeys As Boolean
Public SearchNames As Boolean
Public SearchData As Boolean
Public WholeMatch As Boolean
Public NewSearch As Boolean
Dim StopSearch As Boolean
Dim LastKey As String
Dim LastProperty As Long
Private Sub Form_Load()
Target = ""
SearchKeys = True
SearchNames = True
SearchData = True
WholeMatch = True
NewSearch = False
StopSearch = False
LastKey = ""
LastProperty = 0
End Sub
Private Sub Form_Activate()
Dim Key As Variant
Dim Property As Object
Dim FoundLastKey As Boolean
Dim FoundLastProperty As Boolean
Dim i As Long
Dim Data As Variant
StopSearch = False
If NewSearch Then
NewSearch = False
LastKey = ""
LastProperty = 0
For Each Key In MainForm.MetaUtilObj.EnumAllKeys("")
LastKey = Key
'Check key name
If SearchKeys And (InStr(GetChildFromFull(LastKey), Target) <> 0) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
Exit Sub
End If
'Dont block
DoEvents
If StopSearch Then Exit Sub
If SearchNames Or SearchData Then
For Each Property In MainForm.MetaUtilObj.EnumProperties(Key)
LastProperty = Property.Id
'Check property name
If SearchKeys And (InStr(CStr(Property.Name), Target) <> 0) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
MainForm.SelectProperty String(10 - Len(Str(Property.Id)), " ") + Str(Property.Id)
Exit Sub
End If
'Check property data
If SearchData Then
If SearchPropertyData(Property) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
MainForm.SelectProperty String(10 - Len(Str(Property.Id)), " ") + Str(Property.Id)
Exit Sub
End If
End If
'Dont block
DoEvents
If StopSearch Then Exit Sub
Next 'Property
LastProperty = 0
End If 'SearchNames Or SearchData
Next 'Key
Else
'Resume old search
If LastKey <> "" Then
FoundLastKey = False
FoundLastProperty = False
For Each Key In MainForm.MetaUtilObj.EnumAllKeys("")
If (Not FoundLastKey) And (CStr(Key) = LastKey) Then
FoundLastKey = True
End If
If FoundLastKey Then
'Check key name if we didn't just catch up
If CStr(Key) <> LastKey Then
LastKey = Key
'Check key name
If SearchKeys And (InStr(GetChildFromFull(LastKey), Target) <> 0) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
Exit Sub
End If
End If
'Dont block
DoEvents
If StopSearch Then Exit Sub
If SearchNames Or SearchData Then
For Each Property In MainForm.MetaUtilObj.EnumProperties(Key)
If ((Not FoundLastProperty) And (Property.Id = LastProperty)) Or _
(LastProperty = 0) Then
FoundLastProperty = True
End If
If FoundLastProperty Then
'Check data if we didn't just catch up
If Property.Id <> LastProperty Then
LastProperty = Property.Id
'Check property name
If SearchKeys And (InStr(CStr(Property.Name), Target) <> 0) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
MainForm.SelectProperty String(10 - Len(Str(Property.Id)), " ") + Str(Property.Id)
Exit Sub
End If
'Check property data
If SearchData Then
If SearchPropertyData(Property) Then
'Found
Me.Hide
MainForm.SelectKey LastKey
MainForm.SelectProperty String(10 - Len(Str(Property.Id)), " ") + Str(Property.Id)
Exit Sub
End If
End If
End If
'Dont block
DoEvents
If StopSearch Then Exit Sub
End If 'FoundLastProperty
Next 'Property
LastProperty = 0
End If 'SearchNames Or SearchData
End If 'FoundLastKey
Next 'Key
End If 'LastKey <> ""
End If 'NewSearch
Me.Hide
MsgBox "Done searching.", vbInformation + vbOKOnly, "Find Next"
End Sub
Private Sub CancelButton_Click()
StopSearch = True
Me.Hide
End Sub
Private Function SearchPropertyData(ByRef Property As Object) As Boolean
Dim Found As Boolean
Dim DataType As Long
Dim Data As Variant
Dim i As Long
Found = False
DataType = Property.DataType
Data = Property.Data
If DataType = DWORD_METADATA Then
If Target = Str(Data) Then
Found = True
End If
ElseIf DataType = STRING_METADATA Or _
DataType = EXPANDSZ_METADATA Then
If InStr(CStr(Data), Target) <> 0 Then
Found = True
End If
ElseIf DataType = BINARY_METADATA Then
'Not supported
ElseIf DataType = MULTISZ_METADATA Then
If IsArray(Data) Then
For i = LBound(Data) To UBound(Data)
If InStr(CStr(Data(i)), Target) <> 0 Then
Found = True
End If
Next
End If
End If
SearchPropertyData = Found
End Function
Private Sub picIcon_Click()
If Target = "Fnord" Then MsgBox "There are no Easter eggs in this program.", vbExclamation + vbOKOnly, "Fnord!"
End Sub
Private Function GetChildFromFull(FullPath As String) As String
Dim Child As String
Dim Ch As String
Dim i As Long
'Find the first slash
i = Len(FullPath)
Ch = CStr(Mid(FullPath, i, 1))
Do While (i > 0) And (Ch <> "/") And (Ch <> "\")
i = i - 1
If (i > 0) Then Ch = CStr(Mid(FullPath, i, 1))
Loop
Child = Right(FullPath, Len(FullPath) - i)
GetChildFromFull = Child
End Function