Bueno como dice el titulo es un Injector de archivos dll . bueno yo lo uso mas que todo al jugar HALO o CS 1.6 . :rolleyes: :rolleyes: :rolleyes: HACKS jejeje.
source code :
[SOURCE-CODE] DLL Injector v0.2.4 Alpha . (https://mega.nz/#!gpNDEQra!OwhGukDt80h5SbFiyx7Tr8pt9oiN2yzrAId6FYrSo4o)
Programa :
DLL Injector v0.2.4 Alpha (https://mega.nz/#!VwcEhAIA!kTZUUxWu30zUYTW_rjtk5wIxTlj4kHbk798LKEHMths)
captura del programa :
(http://i65.tinypic.com/2ufpthu.jpg)
COMENTEN CUALQUIER CRITICA O COMENTARIO . :D
PD : La parte de RUN Tiene algunos pequeños bug al inyectar el DLL de resto funciona de maravilla. XD
Primero que nada,
GRACIAS por compartir en el foro. Ahora, vamos con las críticas constructivas:
1.¿Has pensado que ocurrirá si el usuario ha decidido instalar Firefox o Chrome en otro directorio, o si usa una versión portable, o si no se instaló ninguno de esos dos navegadores?.
If My.Computer.FileSystem.FileExists("C:\Program Files\Google\Chrome\Application\chrome.exe") Then
Dim Pr As New Process
Dim Psi As New ProcessStartInfo("C:\Program Files\Google\Chrome\Application\chrome.exe")
Psi.Arguments = "https://www.facebook.com/salvador.osvaldo.1"
Pr.StartInfo = Psi
Pr.StartInfo.WindowStyle = ProcessWindowStyle.Normal
Pr.Start()
Else
If My.Computer.FileSystem.FileExists("C:\Program Files\Mozilla Firefox\firefox.exe") Then
Dim Prm As New Process
Dim Psis As New ProcessStartInfo("C:\Program Files\Mozilla Firefox\firefox.exe")
Psis.Arguments = "https://www.facebook.com/salvador.osvaldo.1"
Prm.StartInfo = Psis
Prm.StartInfo.WindowStyle = ProcessWindowStyle.Normal
Prm.Start()
Else
System.Diagnostics.Process.Start("https://www.facebook.com/salvador.osvaldo.1")
End If
End If
...Como programador, es un punto positivo para ti que intentes controlar las posibles "variables" de cada configuración de sistema operativo en el que se vaya a usar tu programa, sin embargo, en esta ocasión es algo innecesario (y de todas formas, incompleto), debes dejar que
ShellEx se encargue él solo de iniciar el navegador predefinido en el sistema, tú por tu parte tan solo tienes que "iniciar" la dirección url (como si se tratase de un programa).
2.Una regla básica y universal en la programación es que se deben declarar nombres descriptivos para los miembros/métodos... ¿esto que narices es?:
Cita de: código fuente If DLLs.Items.Count > 0 Then
run2()
ters()
reae()
Else
run2()
End If
Me enfado solo de verlo (y vamos a obviar que además los nombres no están capitalizados en Camel-Case, eso no es tan importante, pero bueno).
run2,
ters,
reae,... Ay Dios. Si compartes un código fuente para que los demás lo puedan analizar y aprender algo nuevo, lo mínimo que puedes hacer es facilitarles un poco la comprensión escribiendo un nombre decente (que al menos no sean 4 letras aleatorias), o dejar una linea de comentario describiendo el propósito del método...
3.Cita de: **Aincrad** en 20 Diciembre 2017, 18:02 PM
PD : La parte de RUN Tiene algunos pequeños bug al inyectar el DLL de resto funciona de maravilla. XD
Es normal que tengas "pequeños bugs" y mil cosas más, puesto que estás usando el tipo de declaraciones
obsoletas de VB6 (sentencia
Declare Function) en lugar de usar la plataforma de invocación de .NET Framework,
Platform Invoking. Aparte, los tipos de las funciones nativas que declaraste no son portables, es decir, no son compatibles con 64 Bits... en general casi todos esos parámetros de tipo "Integer" (digo casi todos, por que depende de la definición de la función nativa) debes cambiarlos por un tipo de tamaño dinámico como es
IntPtr.
Antes de distribuir un código fuente como mínimo debes pasarle un análisis de código en Visual Studio (click derecho -> "Analyze" -> "Run Code Analysis on Solution") y corregir todos los warnings que te saldrán... la mitad de ellos referentes a lo que te acabo de decir, la portabilidad.
Yo en tu lugar directamente eliminaría todo este código que tienes al principio de la clase Form1:
Public Const PROCESS_VM_READ = &H10
Public Const TH32CS_SNAPPROCESS = &H2
Public Const MEM_COMMIT = 4096
Public Const PAGE_READWRITE = 4
Public Const PROCESS_CREATE_THREAD = (&H2)
Public Const PROCESS_VM_OPERATION = (&H8)
Public Const PROCESS_VM_WRITE = (&H20)
Dim DLLFileName As String
Public Declare Function ReadProcessMemory Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpBaseAddress As Integer, _
ByVal lpBuffer As String, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( _
ByVal lpLibFileName As String) As Integer
Public Declare Function VirtualAllocEx Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpAddress As Integer, _
ByVal dwSize As Integer, _
ByVal flAllocationType As Integer, _
ByVal flProtect As Integer) As Integer
Public Declare Function WriteProcessMemory Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpBaseAddress As Integer, _
ByVal lpBuffer As String, _
ByVal nSize As Integer, _
ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function GetProcAddress Lib "kernel32" ( _
ByVal hModule As Integer, ByVal lpProcName As String) As Integer
Private Declare Function GetModuleHandle Lib "Kernel32" Alias "GetModuleHandleA" ( _
ByVal lpModuleName As String) As Integer
Public Declare Function CreateRemoteThread Lib "kernel32" ( _
ByVal hProcess As Integer, _
ByVal lpThreadAttributes As Integer, _
ByVal dwStackSize As Integer, _
ByVal lpStartAddress As Integer, _
ByVal lpParameter As Integer, _
ByVal dwCreationFlags As Integer, _
ByRef lpThreadId As Integer) As Integer
Public Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Integer, _
ByVal bInheritHandle As Integer, _
ByVal dwProcessId As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Integer
Private Declare Function CloseHandle Lib "kernel32" Alias "CloseHandleA" ( _
ByVal hObject As Integer) As Integer
y lo reemplazaría por esto otro (todas estas definiciones las he extraido de mi framework comercial
ElektroKit):
Imports System.Diagnostics.CodeAnalysis
Imports System.Runtime.ConstrainedExecution
Imports System.Runtime.InteropServices
Imports System.Security
Imports System.Text
Imports System.Threading
Imports Microsoft.Win32.SafeHandles
<Flags>
Friend Enum LoadLibraryFlags As UInteger
DontResolveDllReferences = &H1
IgnoreCodeAuthzLevel = &H10
LoadLibraryAsDataFile = &H2
LoadLibraryAsDataFileExclusive = &H40
LoadLibraryAsImageResource = &H20
LoadLibrarySearchApplicationDir = &H200
LoadLibrarySearchDefaultDirs = &H1000
LoadLibrarySearchDllLoadDir = &H100
LoadLibrarySearchSystem32 = &H800
LoadLibrarySearchUserDirs = &H400
LoadWithAlteredSearchPath = &H8
End Enum
<Flags>
Friend Enum MemoryAllocationType As UInteger
Commit = &H1000
Reserve = &H2000
Reset = &H80000
ResetUndo = &H1000000
Physical = &H400000
TopDown = &H100000
LargePages = &H20000000
End Enum
<Flags>
Friend Enum MemoryProtectionOptions As UInteger
Execute = &H10
ExecuteRead = &H20
ExecuteReadWrite = &H40
ExecuteWriteCopy = &H80
NoAccess = &H1
[ReadOnly] = &H2
ReadWrite = &H4
WriteCopy = &H8
Guard = &H100
NoCache = &H200
WriteCombine = &H400
End Enum
<Flags>
Friend Enum ProcessAccessRights As Integer
AllAccess = (ProcessAccessRights.StandardRightsRequired Or ProcessAccessRights.Synchronize Or &HFFFF)
CreateThread = &H2
SetSessionId = &H4
VirtualMemoryOperation = &H8
VirtualMemoryRead = &H10
VirtualMemoryWrite = &H20
DuplicateHandle = &H40
CreateProcess = &H80
SetQuota = &H100
SetInformation = &H200
QueryInformation = &H400
SuspendResume = &H800
QueryLimitedInformation = &H1000
Synchronize = StandardAccessRights.Synchronize
Delete = StandardAccessRights.Delete
ReadControl = StandardAccessRights.ReadControl
WriteDac = StandardAccessRights.WriteDac
WriteOwner = StandardAccessRights.WriteOwner
StandardRightsRequired = StandardAccessRights.StandardRightsRequired
End Enum
<Flags>
Friend Enum StandardAccessRights As Integer
Delete = &H10000
ReadControl = &H20000
WriteDac = &H40000
WriteOwner = &H80000
Synchronize = &H100000
StandardRightsRequired = &HF0000
StandardRightsRead = StandardAccessRights.ReadControl
StandardRightsWrite = StandardAccessRights.ReadControl
StandardRightsExecute = StandardAccessRights.ReadControl
StandardRightsAll = &H1F0000
End Enum
<Flags>
Friend Enum ThreadCreationFlags As UInteger
CreateSuspended = &H4
StackSizeParamIsAReservation = &H10000
End Enum
''' <summary>
''' Represents a handle to a module returned by <see cref="NativeMethods.LoadLibrary"/>
''' or <see cref="NativeMethods.LoadLibraryEx"/> functions.
''' </summary>
Public NotInheritable Class SafeModuleHandle : Inherits SafeHandleZeroOrMinusOneIsInvalid
<SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")>
Public Sub New()
MyBase.New(ownsHandle:=True)
End Sub
<ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)>
Protected Overrides Function ReleaseHandle() As Boolean
Return NativeMethods.FreeLibrary(Me)
End Function
End Class
<DebuggerStepThrough>
<StructLayout(LayoutKind.Sequential)>
Friend Structure SecurityAttributes
Friend Length As Integer
Friend SecurityDescriptor As IntPtr
Friend InheritHandle As Integer
End Structure
<SuppressUnmanagedCodeSecurity>
Friend NotInheritable Class NativeMethods
Private Sub New()
End Sub
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function CloseHandle(ByVal hObject As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
ByVal threadAttributes As IntPtr,
ByVal stackSize As IntPtr,
ByVal startAddress As IntPtr,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
ByVal threadAttributes As IntPtr,
ByVal stackSize As IntPtr,
ByVal startAddress As UIntPtr,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
ByVal threadAttributes As IntPtr,
ByVal stackSize As IntPtr,
ByVal startAddress As ThreadStart,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
<[In]> ByRef refThreadAttributes As SecurityAttributes,
ByVal stackSize As IntPtr,
ByVal startAddress As IntPtr,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
<[In]> ByRef refThreadAttributes As SecurityAttributes,
ByVal stackSize As IntPtr,
ByVal startAddress As UIntPtr,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("kernel32.dll", SetLastError:=True)>
Friend Shared Function CreateRemoteThread(ByVal hProcess As IntPtr,
<[In]> ByRef refThreadAttributes As SecurityAttributes,
ByVal stackSize As IntPtr,
ByVal startAddress As ThreadStart,
ByVal threadParameter As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal creationFlags As ThreadCreationFlags,
ByRef refThreadId As UInteger
) As IntPtr
End Function
<DllImport("User32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function FindWindow(ByVal className As String,
ByVal windowName As String
) As IntPtr
End Function
<DllImport("User32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function FindWindowEx(ByVal hwndParent As IntPtr,
ByVal hwndChildAfter As IntPtr,
ByVal strClassName As String,
ByVal strWindowName As String
) As IntPtr
End Function
<DllImport("User32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function FindWindowEx(ByVal hwndParent As HandleRef,
ByVal hwndChildAfter As HandleRef,
ByVal strClassName As String,
ByVal strWindowName As String
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function FreeLibrary(ByVal handle As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function FreeLibrary(ByVal handle As SafeModuleHandle
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function GetModuleHandle(ByVal moduleName As String
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function GetProcAddress(ByVal hModule As IntPtr,
ByVal procName As String
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function GetProcAddress(ByVal hModule As SafeModuleHandle,
ByVal procName As String
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function LoadLibrary(ByVal fileName As String
) As SafeModuleHandle
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function LoadLibraryEx(ByVal fileName As String,
ByVal hFile As IntPtr,
<MarshalAs(UnmanagedType.U4)> ByVal flags As LoadLibraryFlags
) As SafeModuleHandle
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function OpenProcess(
<MarshalAs(UnmanagedType.U4)> ByVal processAccess As ProcessAccessRights,
ByVal inheritHandle As Boolean,
ByVal pid As Integer
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
ByVal buffer As IntPtr,
ByVal size As IntPtr,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
ByVal buffer As IntPtr,
ByVal size As UInteger,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
<Out> ByVal buffer As Byte(),
ByVal size As UInteger,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
<Out> ByVal buffer As StringBuilder,
ByVal size As Integer,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
ByVal buffer As IntPtr,
ByVal size As IntPtr,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
ByVal buffer As IntPtr,
ByVal size As Integer,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
<Out> ByVal buffer As Byte(),
ByVal size As Integer,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True, CharSet:=CharSet.Ansi, BestFitMapping:=False, ThrowOnUnmappableChar:=True)>
Friend Shared Function ReadProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
<Out> ByVal buffer As StringBuilder,
ByVal size As Integer,
ByRef refNumberOfBytesRead As Integer
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function VirtualAlloc(ByVal address As IntPtr,
ByVal size As UInteger,
<MarshalAs(UnmanagedType.U4)> ByVal allocationType As MemoryAllocationType,
<MarshalAs(UnmanagedType.U4)> ByVal protection As MemoryProtectionOptions
) As IntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function VirtualAlloc(ByVal address As UIntPtr,
ByVal size As UInteger,
<MarshalAs(UnmanagedType.U4)> ByVal allocationType As MemoryAllocationType,
<MarshalAs(UnmanagedType.U4)> ByVal protection As MemoryProtectionOptions
) As UIntPtr
End Function
<DllImport("Kernel32.dll", ExactSpelling:=True, SetLastError:=True)>
Friend Shared Function VirtualAllocEx(ByVal hProcess As IntPtr,
ByVal address As IntPtr,
ByVal size As UInteger,
<MarshalAs(UnmanagedType.U4)> ByVal allocationType As MemoryAllocationType,
<MarshalAs(UnmanagedType.U4)> ByVal protection As MemoryProtectionOptions
) As IntPtr
End Function
<DllImport("Kernel32.dll", ExactSpelling:=True, SetLastError:=True)>
Friend Shared Function VirtualAllocEx(ByVal hProcess As IntPtr,
ByVal address As UIntPtr,
ByVal size As UInteger,
<MarshalAs(UnmanagedType.U4)> ByVal allocationType As MemoryAllocationType,
<MarshalAs(UnmanagedType.U4)> ByVal protection As MemoryProtectionOptions
) As UIntPtr
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function WriteProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
ByVal buffer As Byte(),
ByVal size As IntPtr,
<Out> ByRef refNumberOfBytesWritten As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function WriteProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
ByVal buffer As Byte(),
ByVal size As IntPtr,
<Out> ByRef refNumberOfBytesWritten As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function WriteProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As IntPtr,
ByVal buffer As IntPtr,
ByVal size As IntPtr,
<Out> ByRef refNumberOfBytesWritten As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
<DllImport("Kernel32.dll", SetLastError:=True)>
Friend Shared Function WriteProcessMemory(ByVal hProcess As IntPtr,
ByVal baseAddress As UIntPtr,
ByVal buffer As IntPtr,
ByVal size As IntPtr,
<Out> ByRef refNumberOfBytesWritten As IntPtr
) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function
End Class
...Evidentemente vas a tener que realizar las adaptaciones necesarias en el resto de tu código, puesto que los parámetros de las funciones cambian de tipo (son portables), del código que tenías, al que te acabo de mostrar.
PD: fíjate que especifiqué el set de caracteres ANSI para las funcioens que toman un string, quizás quieras cambiarlo según tus necesidades.
Saludos.
ahh . corregiré esos errores . XD
acerca del punto 1 .
Citar¿Has pensado que ocurrirá si el usuario ha decidido instalar Firefox o Chrome en otro directorio, o si usa una versión portable, o si no se instaló ninguno de esos dos navegadores?.
si lo tome en cuenta , por eso es que primero comprueba si esta el croome.exe , si no esta, comprueba si existe el firefox.exe y si tampoco lo encuentra, abre el link normal mediante:
System.Diagnostics.Process.Start()
Perdona mi ignorancia, pero no entiendo estas importaciones, me la podrías explicar?
Imports System.Diagnostics.CodeAnalysis
Imports System.Runtime.ConstrainedExecution
Imports System.Runtime.InteropServices
Imports Microsoft.Win32.SafeHandles
Cita de: **Aincrad** en 20 Diciembre 2017, 20:44 PMno entiendo estas importaciones, me la podrías explicar?
¿Que significa exactamente cuando dices "
no entiendo estas importaciones"?, no sé si entiendo lo que estás preguntando exactamente. Eso son importaciones de namespaces necesarias para varios miembros en la clase que te mostré.
Saludos
olvida la pregunta , me puse a analizar un poco y ya .
PD : Al remplazar el código por el que me pusiste me laza errores por doquier.
a ti también te salen?
Cita de: **Aincrad** en 20 Diciembre 2017, 21:07 PMPD : Al remplazar el código por el que me pusiste me laza errores por doquier.
a ti también te salen?
No es una simple cuestión de copiar y pegar (no voy a modificarte todo el proyecto para hacer yo todas las correcciones, solo compartí contigo los P/Invokes que deberías usar en tu proyecto), como ya te comenté:
Cita de: Elektro...Evidentemente vas a tener que realizar las adaptaciones necesarias en el resto de tu código, puesto que los parámetros de las funciones cambian de tipo (son portables), del código que tenías, al que te acabo de mostrar.
Te van a salir muchos errores por que en tu código original usas
tipos diferentes para llamar a esas funciones, entre otras cosas.
Saludos