1 Attribute VB_Name
= "Principal"
2 'Programado por Vlad para SVCommunity.org y TodoSV.com
3 'Este código no tiene licencia que lo proteja, uselo a su voluntad.
5 Private Declare Function ShellExecute _
7 Alias "ShellExecuteA" (ByVal hwnd
As Long, _
8 ByVal lpOperation
As String, _
9 ByVal lpFile
As String, _
10 ByVal lpParameters
As String, _
11 ByVal lpDirectory
As String, _
12 ByVal nShowCmd
As Long) As Long
13 Private Type tipo_Marcas
17 PluginAsociado
As String
19 ProgamaAsociado
As String
21 Private Const iden_desCorta
As String = "desCorta"
22 Private Const iden_desLarga
As String = "desLarga"
23 Private Const iden_Extension
As String = "Extension"
24 Private Const iden_PluginAsociado
As String = "PluginAsociado"
25 Private Const iden_dirWeb
As String = "dirWeb"
26 Private Const iden_ProgamaAsociado
As String = "ProgamaAsociado"
27 Private buff_Marcas
As New Collection
28 Private buff_MarcasEx
As tipo_Marcas
29 Private Ruta_INI
As String
30 Private Bandera_Marca_Encontrada
As Boolean
31 Public Type tIdentificar
35 Public sIdentificar
As tIdentificar
37 Public Archivo
As String
39 Public objRegExp
As New RegExp
41 Public Mostrar_HexDump
As Boolean
42 Public Mostrar_AscDump
As Boolean
43 Public Ofrecer_Ejecucion
As Boolean
44 Public Mostrar_Coincidencia
As Boolean
48 On Error GoTo Main_Err
51 100 Ruta_INI
= App
.Path
& "\marcas.ini"
52 101 Set buff_Marcas
= mINI_Obtener_Nombre_Secciones(Ruta_INI
)
54 102 If Len(Command
$) = 0 Then
59 104 Archivo
= Command$
60 105 Archivo
= Replace
$(Archivo, """", "")
61 107 sIdentificar
= Identificar(Archivo
)
63 109 Open App
.Path
& IO_Titulo_de_Archivo(sIdentificar
.sArchivo
) & ".resultado.txt" For Binary Access Write
As #Canal
64 110 Put #Canal
, , sIdentificar
.Salida
70 Controlar_Error Erl
, Err
.Description
, "P10XB.Principal.Main.Ref 7/6/2008 : 13:03:02"
75 Private Function Convertir_Caracteres(ByVal Texto
As String) As String
77 On Error GoTo Convertir_Caracteres_Err
84 102 Convertir_Caracteres
= Convertir_Caracteres
& Right
$("00" & Hex
$(Asc(Mid$(Texto, i
, 1))), 2)
89 Convertir_Caracteres_Err:
90 Controlar_Error Erl
, Err
.Description
, "P10XB.Principal.Convertir_Caracteres.Ref 7/6/2008 : 11:57:57"
95 Public Sub Controlar_Error(ByRef nErl
As Long, _
96 ByRef Descripcion
As String, _
100 2 X_Err
= MsgBox("El siguiente error se produjo: " & vbNewLine
& Descripcion
& vbNewLine
& "En el módulo: " & Donde
& ", en la linea " & nErl
& vbCrLf
& "El programa puede estar inestable, sin embargo puede continuar, ¿desea hacerlo? ([SI] continúa, [NO] termina el programa)", vbYesNo
+ vbCritical
)
113 Public Function Comparar_Marca(ByVal Texto
As String) As String
115 On Error GoTo Comparar_Marca_Err
118 Dim Resultado
As String
120 100 For i
= 1 To buff_Marcas
.Count
121 101 Resultado
= RegEx(buff_Marcas
.Item(i
), Texto
)
123 102 If Resultado
<> "" Then
124 103 Debug
.Print Resultado
125 104 Cargar_datos_marcas i
126 105 Comparar_Marca
= "Coincide con la marca de un archivo del tipo:" & vbNewLine
& buff_MarcasEx
.desCorta
& " (" & buff_MarcasEx
.Extension
& ")" & vbNewLine
& vbNewLine
& "Se describe como:" & vbNewLine
& buff_MarcasEx
.desLarga
& vbNewLine
& vbNewLine
& "Puedes encontrar más información en esta ubicación: " & buff_MarcasEx
.dirWeb
& vbNewLine
& vbNewLine
& "Puedes usar este (estos) programa(s) para abrir este tipo de archivo: " & vbNewLine
& Replace
$(buff_MarcasEx.ProgamaAsociado, "|", vbNewLine
)
128 106 If Mostrar_Coincidencia
Then Comparar_Marca
= Comparar_Marca
& vbNewLine
& vbNewLine
& "Detectado por: " & vbNewLine
& Resultado
129 107 Bandera_Marca_Encontrada
= True
135 108 Bandera_Marca_Encontrada
= False
136 109 buff_MarcasEx
.desCorta
= ""
137 110 buff_MarcasEx
.desLarga
= ""
138 111 buff_MarcasEx
.dirWeb
= ""
139 112 buff_MarcasEx
.Extension
= ""
140 113 buff_MarcasEx
.PluginAsociado
= ""
141 114 buff_MarcasEx
.ProgamaAsociado
= ""
142 115 Comparar_Marca
= "Marca desconocida, por favor notifique a los creadores de este programa sobre este archivo."
146 Controlar_Error Erl
, Err
.Description
, "P10XB.Principal.Comparar_Marca.Ref 7/6/2008 : 11:57:57"
151 Public Sub Cargar_datos_marcas(Posicion_en_Buff_Marcas
As Long)
153 On Error GoTo Cargar_datos_marcas_Err
155 100 buff_MarcasEx
.desCorta
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_desCorta
)
156 101 buff_MarcasEx
.desLarga
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_desLarga
)
157 102 buff_MarcasEx
.dirWeb
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_dirWeb
)
158 103 buff_MarcasEx
.Extension
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_Extension
)
159 104 buff_MarcasEx
.PluginAsociado
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_PluginAsociado
)
160 105 buff_MarcasEx
.ProgamaAsociado
= mINI_Leer_Clave_de_Seccion(Ruta_INI
, buff_Marcas
.Item(Posicion_en_Buff_Marcas
), iden_ProgamaAsociado
)
163 Cargar_datos_marcas_Err:
164 Controlar_Error Erl
, Err
.Description
, "P10XB.Principal.Cargar_datos_marcas.Ref 7/6/2008 : 11:57:57"
169 Public Function Identificar(Archivo
As String) As tIdentificar
171 On Error GoTo Identificar_Err
174 Dim Entrada
As String
178 ' Verificar si existe el archivo.
179 100 If Len(Dir
$(Archivo)) = 0 Or Len(Archivo
) = 0 Then
180 101 Salida
= "Error: El archivo no pudo abrirse: " & Archivo
181 102 Archivo
= "\error " & Hour(Time
) & "." & Minute(Time
) & ".txt"
184 ' Verificar si es un directorio.
185 103 If GetAttr(Archivo
) = vbDirectory
Then
186 104 Salida
= "Error: Era un directio: " & Archivo
188 ' Ok es un archivo y existe.
191 106 If FileLen(Archivo
) < 10000 Then
192 107 Entrada
= Space
$(FileLen(Archivo))
194 108 Entrada
= Space
$(1000)
197 109 Open Archivo$
For Binary Access Read
As #Canal
198 110 Get #Canal
, , Entrada
200 'Convertir los 1000 bytes a HEX
201 112 Marca
= Convertir_Caracteres(Entrada
)
202 'Comparar los 1000 bytes con todas las marcas.
203 113 Salida
= Comparar_Marca(Marca
) & vbNewLine
& vbNewLine
205 114 If Mostrar_AscDump
Then Salida
= Salida
& "Muestra ASCII del archivo: " & vbNewLine
& Entrada
& vbNewLine
& vbNewLine
206 115 If Mostrar_HexDump
Then Salida
= Salida
& "Muestra HEX del archivo: " & vbNewLine
& Marca
& vbNewLine
& vbNewLine
& vbNewLine
207 116 Salida
= Salida
& "Archivo generado por P10XB @ SvCommunity.org & TodoSV.com"
209 117 If Bandera_Marca_Encontrada
= True Then
210 Dim Extensiones() As String
212 118 If RegEx(LCase(IO_Extension_de_Archivo(Archivo
)), LCase(buff_MarcasEx
.Extension
)) = "" Then
213 119 If MsgBox("La extensión del archivo procesado es """ & IO_Extension_de_Archivo(Archivo
) & """, no coincide con la que P10XB cree que es la correcta """ & buff_MarcasEx
.Extension
& """" & vbNewLine
& "¿Quisiera que P10XB cambiara la extensión del archivo?", vbQuestion
+ vbYesNo
, "Solicito acción del usuario") = vbYes
Then
214 120 Name Archivo
As Archivo
& "." & buff_MarcasEx
.Extension
215 121 Archivo
= Archivo
& "." & buff_MarcasEx
.Extension
220 'Verificamos que el plugin exista:
221 122 If Len(buff_MarcasEx
.PluginAsociado
) <> 0 Then
223 Dim Plugin_Parametros
224 123 Plugin_Nombre
= Trim
$(Replace(Left$(buff_MarcasEx.PluginAsociado, InStr(1, buff_MarcasEx
.PluginAsociado
, "$") - 1), ".\
", App.Path & "\
"))
225 124 Plugin_Parametros = Mid$(buff_MarcasEx.PluginAsociado, InStr(1, buff_MarcasEx.PluginAsociado, "$"))
226 125 Plugin_Parametros
= Replace
$(Plugin_Parametros, "$1", """" & Archivo & """")
228 126 If Ofrecer_Ejecucion Then
229 127 If MsgBox("P10XB cree conocer el programa con el que el archivo puede abrirse
. " & vbNewLine & "Se ejecutará el siguiente comando para intentarlo
: " & vbNewLine & Plugin_Nombre & " " & Plugin_Parametros & vbNewLine & "¿Esta de acuerdo?
", vbYesNo + vbQuestion) = vbYes Then
230 128 If Len(buff_MarcasEx.PluginAsociado) <> 0 Then ShellExecute 0, "Open
", Plugin_Nombre, Plugin_Parametros, 0, 1
238 129 Identificar.Salida = Salida
239 130 Identificar.sArchivo = Archivo
243 Controlar_Error Erl, Err.Description, "P10XB
.Principal
.Identificar
.Ref
7/6/2008 : 12:11:59"
248 Public Function Escapar_TextBox(ByRef Texto As String) As String
251 On Error GoTo Escapar_TextBox_Err
253 100 Texto = Replace$(Texto, Chr(0), "[0]")
254 101 Escapar_TextBox = Texto
258 Controlar_Error Erl, Err.Description, "P10XB
.Principal
.Escapar_TextBox
.Ref
7/6/2008 : 11:57:57"
263 Function RegEx(myPattern As String, myString As String)
265 On Error GoTo RegEx_Err
268 Dim objMatch As Match
269 Dim colMatches As MatchCollection
270 ' Set Case Insensitivity.
271 100 objRegExp.IgnoreCase = True
272 'Set global applicability.
273 101 objRegExp.Global = True
274 'Set the pattern by using the Pattern property.
275 102 objRegExp.Pattern = myPattern
277 'Test whether the String can be compared.
278 103 If (objRegExp.Test(myString) = True) Then
280 104 Set colMatches = objRegExp.Execute(myString) ' Execute search.
282 105 For Each objMatch In colMatches ' Iterate Matches collection.
283 106 RetStr = RetStr & "Coincidencia encontrada en pos
. "
284 107 RetStr = RetStr & objMatch.FirstIndex & ". Valor de la coincidencia es
"
285 108 RetStr = RetStr & objMatch.Value & vbCrLf
296 Controlar_Error Erl, Err.Description, "P10XB
.Principal
.RegEx
.Ref
7/6/2008 : 11:57:57"