Hola,
Existe alguna forma de saber cuando un juego cargo completamente sus librerías ?
Saludos
Puedes saber en un momento determinado que librerias tiene en memoria un proceso, luego necesitas saber si las que tiene en ese momento son todas las que se supone que deba cargar. Lo primero lo puedes hacer enumerando cada modulo en el proceso (OpenProcess/EnumProcessModules). Para lo segundo te podrias hacer hacer un listado de todas las librerias que carga el proceso en su ejecucion como base de comparacion
Saludos
Como te dijo el buen compañero @ThunderCls , lista los modulos , o tambien el numero de modulos que ha cargado el juego y asi lo comparas.
aqui te dejo una funcion simple que hize :
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As UInt32, ByVal bInheritHandle As Int32, ByVal dwProcessId As UInt32) As IntPtr
Public Shared Function GetProcessModules(ByVal Process_Name As String) As String
Dim DataS As New StringBuilder
Dim pc As Process() = Process.GetProcessesByName(Process_Name)
Dim hndProc As IntPtr = OpenProcess(&H2 Or &H8 Or &H10 Or &H20 Or &H400, 1, CUInt(pc(0).Id))
If hndProc = IntPtr.Zero Then
Return "Error"
End If
Dim ModulesCount As Integer = pc(0).Modules.Count - 1
For index As Integer = 0 To ModulesCount
DataS.Append(pc(0).Modules(index).FileName & vbNewLine)
Next
Return DataS.ToString
End Function
Con esta funcion listas los modulos (librerias) de un proceso, el primer modulo siempre es el proceso como tal se le denomina el MainModule vendria siendo el .exe, los demas son las librerias.
Modo de empleo :
TextBox1.Text = GetProcessModules("nombredelProcesoDeljuego")
asi obtienes la lista de librerias que Emplea el juego , podes hacer una comparacion , pero soy el unico que piensa que lo que estas intentando hacer es inutil? digo un proceso carga rapidamente todas sus librerias al iniciar y no tarda mas de 4s .
No das mucho detalle de lo que intentas hacer, pero como dijo **Aincrad**, debes tener en cuenta que una vez que un proceso carga una libreria y usa la funcion que necesita, la libera de memoria, por lo que es muy poco probable que en el punto que hagas el listado de modulos obtengas absolutamente todas las librerias que el proceso ha usado o usara en el futuro. Repito, no se lo que intentas hacer, pero puedo decir un par de ideas
1- Lanzar tu aplicacion como debugger del juego y depurarlo a tu gusto (WaitForDebugEvent/ContinueDebugEvent)
2- Inyectarte en el proceso justo antes de que se cargue completamente (ejecute su ep) y hacer hook en LoadLibrary
Saludos