elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Ejecutar Exe con Funcion determinada
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecutar Exe con Funcion determinada  (Leído 5,412 veces)
seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ejecutar Exe con Funcion determinada
« Respuesta #10 en: 13 Mayo 2009, 01:59 am »

este modulo lo hizo cobein , aca lo pongo porque no encontre el proyecto para bajarlo...todos los creditos a el..

Código
  1. '---------------------------------------------------------------------------------------
  2. ' Module      : mReadCommandLine
  3. ' DateTime    : 26/12/2007 22:48
  4. ' Author      : Me and some others :D
  5. ' Mail        : cobein27@hotmail.com
  6. ' Purpose     : Read command line parameters from an external proc
  7. ' Requirements: None
  8. '---------------------------------------------------------------------------------------
  9. Option Explicit
  10.  
  11. Private Type OBJECT_ATTRIBUTES
  12.    Length As Long
  13.    RootDirectory As Long
  14.    ObjectName As Long
  15.    Attributes As Long
  16.    SecurityDescriptor As Long
  17.    SecurityQualityOfService As Long
  18. End Type
  19.  
  20. Private Type CLIENT_ID
  21.    UniqueProcess As Long
  22.    UniqueThread  As Long
  23. End Type
  24.  
  25. Private Type PROCESSENTRY32
  26.  dwSize As Long
  27.  cntUsage As Long
  28.  th32ProcessID As Long
  29.  th32DefaultHeapID As Long
  30.  th32ModuleID As Long
  31.  cntThreads As Long
  32.  th32ParentProcessID As Long
  33.  pcPriClassBase As Long
  34.  dwFlags As Long
  35.  szExeFile As String * 260
  36. End Type
  37.  
  38. Private Declare Function NtOpenProcess Lib "NTDLL.DLL" (ByRef ProcessHandle As Long, ByVal AccessMask As Long, ByRef ObjectAttributes As OBJECT_ATTRIBUTES, ByRef ClientID As CLIENT_ID) As Long
  39. Private Declare Function NtClose Lib "NTDLL.DLL" (ByVal ObjectHandle As Long) As Long
  40. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  41. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  42. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  43. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  44. Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
  45. Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
  46. Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  47. Private Const TH32CS_SNAPPROCESS = &H2
  48.  
  49. Public Function ProcessCommandLine(ByVal lProcessId As Long) As String
  50.    Dim tCLIENT_ID              As CLIENT_ID
  51.    Dim tOBJECT_ATTRIBUTES      As OBJECT_ATTRIBUTES
  52.    Dim lRet                    As Long
  53.    Dim sData                   As String
  54.    Dim lProcess                As Long
  55.    Dim lAddress                As Long
  56.    Dim lRead                   As Long
  57.  
  58.    tOBJECT_ATTRIBUTES.Length = Len(tOBJECT_ATTRIBUTES)
  59.    tCLIENT_ID.UniqueProcess = lProcessId
  60.  
  61.    lRet = NtOpenProcess(lProcess, &H10, tOBJECT_ATTRIBUTES, tCLIENT_ID)
  62.    If lProcess = 0 Then Exit Function
  63.  
  64.    lAddress = GetProcAddress(GetModuleHandle("kernel32"), "GetCommandLineA")
  65.  
  66.    Call CopyMemory(lAddress, ByVal lAddress + 1, &H4)
  67.  
  68.    If ReadProcessMemory(lProcess, ByVal lAddress, lAddress, 4, lRead) Then
  69.        sData = String(260, vbNullChar)
  70.        If ReadProcessMemory(lProcess, ByVal lAddress, ByVal sData, 260, lRead) Then
  71.            ProcessCommandLine = Left(sData, InStr(sData, vbNullChar) - 1)
  72.        End If
  73.    End If
  74.  
  75.    Call NtClose(lProcess)
  76.  
  77. End Function
  78.  
  79.  
  80. Public Function ObtenerPID(ByVal sEXE As String) As Long
  81.    Dim bCopied As Long, lSnapShot As Long
  82.    Dim sName As String
  83.    Dim tPE As PROCESSENTRY32
  84.  
  85.    lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
  86.    If lSnapShot < 0 Then Exit Function
  87.    tPE.dwSize = Len(tPE)
  88.    bCopied = Process32First(lSnapShot, tPE)
  89.    Do While bCopied
  90.        sName = Left$(tPE.szExeFile, InStr(tPE.szExeFile, Chr(0)) - 1)
  91.        sName = Mid(sName, InStrRev(sName, "\") + 1)
  92.        If InStr(sName, Chr(0)) Then
  93.          sName = Left(sName, InStr(sName, Chr(0)) - 1)
  94.        End If
  95.        bCopied = Process32Next(lSnapShot, tPE)
  96.        If StrComp(sEXE, sName, vbTextCompare) = 0 Then
  97.          ObtenerPID = tPE.th32ProcessID
  98.          Exit Do
  99.        End If
  100.    Loop
  101. End Function
  102.  

eso obtiene los comandos...para hacer funcionarlo tenes que pasarle el PID del proceso que queres saber...para eso hay api's busca que hay en internet...

saludos.


« Última modificación: 14 Mayo 2009, 02:41 am por seba123neo » En línea

ranslsad


Desconectado Desconectado

Mensajes: 492


Dim Ranslsad as String * :P - Que Vicio!


Ver Perfil WWW
Re: Ejecutar Exe con Funcion determinada
« Respuesta #11 en: 13 Mayo 2009, 14:42 pm »

eso obtiene los comandos...para hacer funcionarlo tenes que pasarle el PID del proceso que queres saber...para eso hay api's busca que hay en internet...

saludos.

Bueno gracias .. pero igual no supe utilizarlo.. por ahora
conseguir averiguar el PID del Exe con Este codigo:

En Modulo:
Código
  1. Option Explicit
  2. Public theid As Integer
  3. Public Const NORMAL_PRIORITY_CLASS As Long = &H20
  4.  
  5. Public Type STARTUPINFO
  6. cb As Long
  7. lpReserved As String
  8. lpDesktop As String
  9. lpTitle As String
  10. dwX As Long
  11. dwY As Long
  12. dwXSize As Long
  13. dwYSize As Long
  14. dwXCountChars As Long
  15. dwYCountChars As Long
  16. dwFillAttribute As Long
  17. dwFlags As Long
  18. wShowWindow As Integer
  19. cbReserved2 As Integer
  20. lpReserved2 As Long
  21. hStdInput As Long
  22. hStdOutput As Long
  23. hStdError As Long
  24. End Type
  25. Public Type PROCESS_INFORMATION
  26. hProcess As Long
  27. hThread As Long
  28. dwProcessId As Long
  29. dwThreadID As Long
  30. End Type
  31. Public Declare Function CreateProcess Lib "kernel32" Alias _
  32. "CreateProcessA" (ByVal lpAppName As String, _
  33. ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, _
  34. ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, _
  35. ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, _
  36. ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, _
  37. lpProcessInformation As PROCESS_INFORMATION) As Long
  38.  
  39. ' Returns 0 when successful, process ID and handle are in ProcessInfo
  40. Public Function StartProcess(ByRef sCommandLine As String, _
  41. ByRef ProcessInfo As PROCESS_INFORMATION) As Long
  42. Dim ret As Long
  43. Dim sWokingDir As String
  44. Dim Start As STARTUPINFO
  45.  
  46. If Len(sCommandLine) > 0 Then
  47. ' Initialize the STARTUPINFO structure:
  48. Start.cb = Len(Start)
  49. sWokingDir = App.Path
  50.  
  51. ' Start the process
  52. ret = CreateProcess(vbNullString, sCommandLine, 0&, 0&, 1&, _
  53. NORMAL_PRIORITY_CLASS, 0&, sWokingDir, Start, ProcessInfo)
  54. If ret <> 0 Then
  55. ' Success
  56. StartProcess = 0
  57. Else
  58. ' Failed to start process
  59. Debug.Print "StartProcess failed: LastDllError = " & _
  60. Err.LastDllError
  61. StartProcess = 1
  62. End If
  63. End If
  64. End Function
  65.  
  66. ' Close process and thread handles, must be called when no longer needed
  67. Public Sub ReleaseProcessData(ByRef ProcessInfo As PROCESS_INFORMATION)
  68. If ProcessInfo.hProcess <> 0 Then
  69. 'CloseHandle ProcessInfo.hThread
  70. 'CloseHandle ProcessInfo.hProcess
  71. 'ProcessInfo.hProcess = 0
  72. 'ProcessInfo.hThread = 0
  73. End If
  74. End Sub

En Form:
Código
  1. Option Explicit
  2.  
  3. Private Sub Command1_Click()
  4. Dim ProcessInfo As PROCESS_INFORMATION
  5.  
  6. StartProcess "C:\Archivos de programa\Black Isle\BGII - SoA\baldur.exe", ProcessInfo
  7. Text1.Text = "Process ID: " & ProcessInfo.dwProcessId
  8. Text1.Text = Text1.Text & vbNewLine & "Process handle: " & ProcessInfo.hProcess
  9.  
  10. ReleaseProcessData ProcessInfo
  11. End Sub


Con eso saco el ID del exe...
Y nose si soy un poco Ignorante o no me doy cuenta,
pero a tu codigo intente de llamarlo asi:
Código
  1. Private Sub Command2_Click()
  2. ProcessCommandLine(theid)
  3. End Sub

Pero nada sucede... Quizas no se le llame asi o quizas si.. pero nose...

Yo en teoria lo que intento de conseguir es por ejemplo:
Ejecutar Baldurs Gate II Shadows Of Amn y que directamente al ejecutar el juego entre a una partida multijugador como ya dije antes estilo (Zone o el Nuevo IGZones)
Si alguien lo conoce seguro que saben a que me refiero(jugar age of empires en internet)

PD: llame a la funcion asi:
Código
  1. MsgBox ProcessCommandLine(theid)
Mmm pero me muestra la direccion del Juego(Dir del Exe)
PD2: Me di cuenta que el archivo Baldur.exe es un launcher y el archivo BGMain.exe es el juego en Si... pero al intentar de ejecutar ese exe me tira el siguiente error:

Quizas haya que ejecutar ese exe con un parametro.. ahora me queda averiguar como averiguarlo hehe.
PD3: Si voy a la carpeta y hago doble click sobre el archivo BGMain.exe.. si se abre...
PD4: Bueno he ejecutado el BGMain.exe normal, he conseguido su PID y he hecho un timer con la siguiente funcion:
Código
  1. List1.AddItem ProcessCommandLine(theid)
la cual funcionaba mientras yo en el juego toqueteaba botones y eso.. pero no muestra nada...
No se como hacer funcionar este codigo  :-\

Desde ya, gracias y sepan disculpar mi ignorancia :huh:

Salu2

Ranslsad


« Última modificación: 13 Mayo 2009, 15:31 pm por ranslsad » En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Ejecutar Exe con Funcion determinada
« Respuesta #12 en: 14 Mayo 2009, 02:43 am »

ahi edite el post anterior y agrege para obtener el PID de un proceso segun su nombre...y lo unico que tendrias que hacer es:

Código
  1. MsgBox ProcessCommandLine(ObtenerPID("calc.exe"))

saludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Ejecutar Exe con Funcion determinada
« Respuesta #13 en: 14 Mayo 2009, 07:44 am »

OTra forma aparte de la que te proporsionaron es sustituir el EXE de tu juego por un EXE que le haga de intermediario es decir algo asi:

Modulo:

Código
  1. Sub Main()
  2.    Dim RutEXE As String, RutEXEParam As String
  3.    ' Un Fix si App.patch devuelve \ al final, claro ejemplo C:\ u otra unidad.
  4.    RutEXE = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
  5.    RutEXEParam = RutEXE & "APP.exe " & Command$
  6.    Open RutEXE & "Log_Parametros.log" For Binary As 1
  7.        Seek 1, LOF(1) + 1
  8.        Put 1, , RutEXEParam & vbNewLine
  9.    Close 1
  10.    Shell RutEXEParam, vbNormalFocus
  11. End Sub
  12.  

Es facil compila este codigo con el mismo nombre y en dado caso extensión si es requerido por el exe a ver sus parametros directamente

El Archivo que es lanzado habitualmente es un EXE cambiale el nombre a App.exe y este que has compilado ponlo en su lugar, todo ira normal como si nada solo que ese exe intermediario registrara TODOS los parametros antes de ejecutar el eXE Original pedido por tu launcher. es a prueba de error.¡!
En línea

The Dark Shadow is my passion.
ranslsad


Desconectado Desconectado

Mensajes: 492


Dim Ranslsad as String * :P - Que Vicio!


Ver Perfil WWW
Re: Ejecutar Exe con Funcion determinada
« Respuesta #14 en: 14 Mayo 2009, 15:46 pm »

OTra forma aparte de la que te proporsionaron es sustituir el EXE de tu juego por un EXE que le haga de intermediario es decir algo asi:

Modulo:

Código
  1. Sub Main()
  2.    Dim RutEXE As String, RutEXEParam As String
  3.    ' Un Fix si App.patch devuelve \ al final, claro ejemplo C:\ u otra unidad.
  4.    RutEXE = IIf(Right(App.Path, 1) = "\", App.Path, App.Path & "\")
  5.    RutEXEParam = RutEXE & "APP.exe " & Command$
  6.    Open RutEXE & "Log_Parametros.log" For Binary As 1
  7.        Seek 1, LOF(1) + 1
  8.        Put 1, , RutEXEParam & vbNewLine
  9.    Close 1
  10.    Shell RutEXEParam, vbNormalFocus
  11. End Sub
  12.  

Es facil compila este codigo con el mismo nombre y en dado caso extensión si es requerido por el exe a ver sus parametros directamente

El Archivo que es lanzado habitualmente es un EXE cambiale el nombre a App.exe y este que has compilado ponlo en su lugar, todo ira normal como si nada solo que ese exe intermediario registrara TODOS los parametros antes de ejecutar el eXE Original pedido por tu launcher. es a prueba de error.¡!

Bueno les comento como hice todo....
Primero baje el GameSpy que tiene los comandos para tal juego =)
Luego utilice el codigo de ░▒▓BlackZeroҖ▓▒░ [Te amo :P] que es la caña!!
Y ya tengo el comando!!!!

Gracias a todos!!!!!

Salu2

Ranslsad
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ejecutar programa por una determinada interfaz de red??
Redes
qtpirex 1 2,350 Último mensaje 13 Enero 2012, 17:40 pm
por HdM
[C#] Lanzar navegador en url determinada
.NET (C#, VB.NET, ASP)
[u]nsigned 3 6,907 Último mensaje 25 Octubre 2012, 14:58 pm
por seba123neo
[Pregunta]: Ejecutar Funcion JS
Desarrollo Web
Leguim 1 1,699 Último mensaje 12 Noviembre 2018, 19:16 pm
por Drakaris
Batch ejecutar función a X hora
Scripting
rafaeljoseyepez 2 9,014 Último mensaje 17 Agosto 2021, 03:39 am
por DtxdF
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines