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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Abrir ejecutable en un form - ¿Es posible abrir Chrome?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Abrir ejecutable en un form - ¿Es posible abrir Chrome?  (Leído 19,033 veces)
NsTeam

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« en: 31 Enero 2015, 23:58 pm »

Tengo el siguiente código que es para abrir un ejecutable en un exe.

Código
  1. Option Explicit
  2.  
  3. Private Declare Function GetGUIThreadInfo Lib "user32.dll" ( _
  4.                 ByVal idThread As Long, _
  5.                 ByRef pgui As GUITHREADINFO) As Long
  6.  
  7. Private Declare Function SetParent Lib "user32" _
  8.                (ByVal hWndChild As Long, _
  9.                 ByVal hWndNewParent As Long) As Long
  10.  
  11. Private Declare Function GetAncestor Lib "user32.dll" _
  12.                (ByVal hwnd As Long, _
  13.                 ByVal gaFlags As Long) As Long
  14.  
  15. Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
  16.                (ByVal lpApplicationName As String, _
  17.                 ByVal lpCommandLine As String, _
  18.                 lpProcessAttributes As SECURITY_ATTRIBUTES, _
  19.                 lpThreadAttributes As SECURITY_ATTRIBUTES, _
  20.                 ByVal bInheritHandles As Boolean, _
  21.                 ByVal dwCreationFlags As Long, _
  22.                 lpEnvironment As Any, ByVal _
  23.                 lpCurrentDriectory As String, _
  24.                 lpStartupInfo As STARTUPINFO, _
  25.                 lpProcessInformation As PROCESS_INFORMATION) As Long
  26.  
  27. Private Declare Function SetWindowPos Lib "user32" _
  28.                (ByVal hwnd As Long, _
  29.                 ByVal hWndInsertAfter As Long, _
  30.                 ByVal x As Long, _
  31.                 ByVal y As Long, _
  32.                 ByVal cx As Long, _
  33.                 ByVal cy As Long, _
  34.                 ByVal wFlags As Long) As Long
  35.  
  36. Private Type RECT
  37.        Left As Long
  38.        Top As Long
  39.        Right As Long
  40.        Bottom As Long
  41. End Type
  42.  
  43. Private Type GUITHREADINFO
  44.        cbSize As Long
  45.        flags As Long
  46.        hwndactive As Long
  47.        hwndFocus As Long
  48.        hwndCapture As Long
  49.        hwndMenuOwner As Long
  50.        hwndMoveSize As Long
  51.        hwndcaret As Long
  52.        rcCaret As RECT
  53. End Type
  54. Private Type STARTUPINFO
  55.        cb As Long
  56.        lpReserved As String
  57.        lpDesktop As String
  58.        lpTitle As String
  59.        dwX As Long
  60.        dwY As Long
  61.        dwXSize As Long
  62.        dwYSize As Long
  63.        dwXCountChars As Long
  64.        dwYCountChars As Long
  65.        dwFillAttribute As Long
  66.        dwFlags As Long
  67.        wShowWindow As Integer
  68.        cbReserved2 As Integer
  69.        lpReserved2 As Long
  70.        hStdInput As Long
  71.        hStdOutput As Long
  72.        hStdError As Long
  73. End Type
  74.  
  75. Private Type PROCESS_INFORMATION
  76.        hProcess As Long
  77.        hThread As Long
  78.        dwProcessId As Long
  79.        dwThreadId As Long
  80. End Type
  81.  
  82. Private Type SECURITY_ATTRIBUTES
  83.        nLength As Long
  84.        lpSecurityDescriptor As Long
  85.        bInheritHandle As Boolean
  86. End Type
  87.  
  88. Private Const GA_PARENT = 1
  89. Private Const SWP_NOOWNERZORDER = &H200
  90. Private Const SWP_NOZORDER = &H4
  91. Private Const SWP_SHOWWINDOW = &H40
  92.  
  93. Private udtGUI As GUITHREADINFO
  94. Private udtProc As PROCESS_INFORMATION
  95.  
  96. Private Function StartProcess(strProgram As String) As Long
  97. Dim udtStartup As STARTUPINFO
  98. Dim udtSec As SECURITY_ATTRIBUTES
  99. Dim lngReturn As Long
  100. udtStartup.cb = Len(udtStartup)
  101. udtSec.nLength = Len(udtSec)
  102. udtSec.bInheritHandle = True
  103. '
  104. ' Start the process
  105. '
  106. lngReturn = CreateProcess(strProgram, vbNullString, udtSec, udtSec, _
  107.                         True, ByVal 0, ByVal 0, vbNullString, _
  108.                         udtStartup, _
  109.                         udtProc)
  110. txtProcess.Text = Hex(udtProc.dwThreadId)
  111. lngReturn = GetAncestor(udtProc.hProcess, GA_PARENT)
  112. txtParent.Text = Hex(lngReturn)
  113. udtGUI.cbSize = Len(udtGUI)
  114. '
  115. ' Wait for an hWnd to be allocated
  116. '
  117. Do
  118.    lngReturn = GetGUIThreadInfo(udtProc.dwThreadId, udtGUI)
  119.    DoEvents
  120. Loop Until udtGUI.hwndactive <> 0
  121. StartProcess = udtGUI.hwndactive
  122. End Function
  123. Private Sub PositionWindow(hwnd As Long)
  124. Dim lngReturn As Long
  125. lngReturn = SetWindowPos(hwnd, hwnd, 250&, 0&, 250&, 250&, SWP_NOZORDER Or SWP_SHOWWINDOW)
  126. End Sub
  127. Private Sub cmdIE_Click()
  128. Dim lngReturn As Long
  129. Dim strProg As String
  130. strProg = "C:\Program Files (x86)\FileZilla FTP Client\filezilla.exe"
  131. lngReturn = StartProcess(strProg)
  132. End Sub
  133.  
  134.  
  135. Private Sub Command1_Click()
  136. '
  137. ' Change the Parent
  138. '
  139. Dim lngReturn As Long
  140. Dim lngStyle As Long
  141. lngReturn = SetParent(udtGUI.hwndactive, Me.hwnd)
  142. Call PositionWindow(udtGUI.hwndactive)
  143. lngReturn = GetAncestor(udtGUI.hwndactive, GA_PARENT)
  144. txtParent.Text = Hex(lngReturn)
  145. End Sub
  146.  
  147. Private Sub Form_Load()
  148. txtMe.Text = Hex(Me.hwnd)
  149. '
  150. ' Scalemode = Pixel
  151. '
  152. Me.ScaleMode = 3
  153. End Sub
  154.  
  155.  

Y efectivamente hace lo que yo quiero, abre un programa dentro del formulario, lo probé con la calculadora de Windows e incluso con otros programas



Pero lo que no entiendo es por qué no pasa lo mismo con Chrome, me refiero a que lo abre en una nueva ventana mas no dentro del formulario.

Me urge terminarlo cuanto antes, espero puedan ayudarme, muchas gracias!


« Última modificación: 1 Febrero 2015, 00:47 am por NsTeam » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Abrir ejecutable en un form - Ayuda con este código, por favor.
« Respuesta #1 en: 1 Febrero 2015, 00:04 am »

no será porque chrome crea un proceso base y abre un proceso hijo por ventana? tendrías que capturar todos los childs de chrome... si te fijas en el administrador de taréas el siempre abre unas 2 o 3 instancias y luego una por ventana más otras por los flash y "accesorios"


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
NsTeam

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Abrir ejecutable en un form - Ayuda con este código, por favor.
« Respuesta #2 en: 1 Febrero 2015, 00:12 am »

no será porque chrome crea un proceso base y abre un proceso hijo por ventana? tendrías que capturar todos los childs de chrome... si te fijas en el administrador de taréas el siempre abre unas 2 o 3 instancias y luego una por ventana más otras por los flash y "accesorios"

Hola compañero, gracias por tu respuesta...

Es lógico lo que me dices y tienes razón cuando lo vi en el administrador de tareas, pero creer que haya alguna forma de hacerlo modificando el código que tengo, es posible?
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Abrir ejecutable en un form - Ayuda con este código, por favor.
« Respuesta #3 en: 1 Febrero 2015, 00:17 am »

lo siento... solo di una respuesta racional con respecto al problema... pero realmente no se sobre visual basic... esperemos que pase un conocedor de estos temas  ;D
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
NsTeam

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #4 en: 2 Febrero 2015, 18:59 pm »

Alguien podría ayudarme, por favor. Aún no puedo dar con la solución :(
En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #5 en: 3 Febrero 2015, 18:22 pm »

Hola

Me resultó interesante tu idea. Así que he estado trabajando un poquillo en el tema. A mi me funciona:
- Crea un Picture (que sea un poco grande)
- Crea un CommandButton
-Intruduce el siguiente código en un form
Código
  1.   '//Funciones API para incrustar el programa en el picture
  2.    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long,  _
  3. ByVal hWndParent As Long) As Long
  4.    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,  _
  5. ByVal nCmdShow As Long) As Long
  6.    Const SHOWMAXIMIZED_eSW = 3&
  7.  
  8.    '//Funciones API para obtener el handle de la aplicación que queremos meter en un picture
  9.    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"  _
  10. (ByVal lpClassName As String,  _
  11. ByVal lpWindowName As String) As Long
  12.  
  13.    '//Ejecuta el programa
  14.    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _
  15. ByVal lpOperation As String,  _
  16. ByVal lpFile As String,  _
  17. ByVal lpParameters As String,  _
  18. ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  19.  
  20.    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
  21.    ByVal wMsg As Long, _
  22.    ByVal wParam As Long, _
  23.    lParam As Any) As Long
  24.  
  25.  
  26.    Const WM_SYSCOMMAND = &H112
  27.    Const SC_CLOSE = &HF060&
  28.  
  29. 'ClassName Chrome
  30. 'Chrome_RenderWidgetHostHWND  <---hijo
  31. 'Chrome_WidgetWin_1  <----Padre
  32. Private Sub Command1_Click()
  33.    Dim hwnd As Long
  34.    ' "C:\Program Files\Google\Chrome\Application\chrome.exe", vbHide 'No sirve
  35.    ShellExecute Me.hwnd, "Open", "C:\Program Files\Google\Chrome\Application\chrome.exe",  _
  36. "www.elhacker.net", "", 1
  37.    Espera (5) 'Espera cinco segundos a que se cargue
  38.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString) 'Obtiene el handle padre
  39. Call SetParent(hwnd, Picture1.hwnd) 'Meter la apcliación en el picture
  40. Call ShowWindow(hwnd, SHOWMAXIMIZED_eSW) 'Lo ajusta al cuadro
  41. End Sub
  42.  
  43. Private Sub Espera(Segundos As Single)
  44.  Dim ComienzoSeg As Single
  45.  Dim FinSeg As Single
  46.  ComienzoSeg = Timer
  47.  FinSeg = ComienzoSeg + Segundos
  48.  Do While FinSeg > Timer
  49.      DoEvents
  50.      If ComienzoSeg > Timer Then
  51.          FinSeg = FinSeg - 24 * 60 * 60
  52.      End If
  53.  Loop
  54. End Sub
  55.  
  56.    Private Sub Cerrar_Google(hwnd As Long)
  57.    If hwnd <> 0 Then
  58.    Call SetParent(hwnd, 0)  ' Libera el programa
  59.    Call SendMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&) 'Cierra el programa
  60.    hwnd = 0
  61.    End If
  62.    End Sub
  63.  
  64.  
  65. Private Sub Form_Unload(Cancel As Integer)
  66.    Dim hwnd As Long
  67.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
  68.    Call Cerrar_Google(hwnd) 'cierra Google
  69. End Sub

NOTA IMPORTANTE:
Tan sólo hay un problemilla. Cuando le des al botón, Chrome se iniciará pero fuera de form, pasado un par de segundos se introduce en el form. Lo suyo sería iniciarlo en modo hide (oculto) y luego volverlo a hacer visible.  Estoy mirando a ver, el shell "programa", vbhide, no funciona.

La ventaja que tiene usar ShellExecute es que puedes elegir la URL que quieres que muestre

Si usas 64Bits, la dirección del programa debes cambiarla a "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" y bueno ya tu ya sabes, el directorio debe ser el que tu tengas en tu compu o sea

Saludos
« Última modificación: 4 Febrero 2015, 15:40 pm por okik » En línea

NsTeam

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #6 en: 3 Febrero 2015, 21:54 pm »

Hola @okik , probé tu código y funciona perfecto. Tengo una duda, ¿Es posible detectar automáticamente la Ruta de Chrome, sin necesidad de que el usuario busque la ruta, en mi caso es "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"?, me preguntaba si hay alguna forma de detectar la ruta de chrome.exe automáticamente.

Muchas gracias nuevamente.
« Última modificación: 3 Febrero 2015, 22:56 pm por NsTeam » En línea

okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #7 en: 4 Febrero 2015, 13:53 pm »

Hola @okik , probé tu código y funciona perfecto. Tengo una duda, ¿Es posible detectar automáticamente la Ruta de Chrome, sin necesidad de que el usuario busque la ruta, en mi caso es "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"?, me preguntaba si hay alguna forma de detectar la ruta de chrome.exe automáticamente.

Muchas gracias nuevamente.

Si claro que se puede. Se me ocurren varias maneras.

Pero antes de nada permíteme corregir unas líneas del código que te he dado antes. Hice un copia y pega de mi propio código en Form_Unload y se han colado un par de líneas que no tienen utilidad ahí, se trata de la variable hWndChild   que fue un intento de introducir sólamente la Web en el Picture, funcionaba con el Notepad por ejemplo, pero no con Google Chrome. Lo borré en otras partes del código, pero no en el Form_Load, se me pasó. También está lo de Espera(5) que si que es necesario más arriba, porque hay que esperar a que se cargue Google Chrome antes de introducirlo en el Picture, pero para cerrar no hace falta.

Código
  1. Private Sub Form_Unload(Cancel As Integer)
  2.    Dim hwnd As Long
  3.    Dim hWndChild As Long  '<---- BORRAR ESTA LÍNEA
  4.    'Espera (5) '<---- BORRAR ESTA LÍNEA
  5.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
  6.    Call Cerrar_Google(hwnd) 'cierra Google
  7. End Sub

Debería ser así:

Código
  1. Private Sub Form_Unload(Cancel As Integer)
  2.    Dim hwnd As Long
  3.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
  4.    Call Cerrar_Google(hwnd) 'cierra Google
  5. End Sub

En cuanto a lo de
- Primera opción: Crear un código de busqueda de Chrome.exe y obtener su directorio (ideal para programas que al actualizarse van cambiando la ubicación) por ejemplo si fuera "\Google\Chrome\Application\V0014\Chrome.exe" y al actualizarse cambiara a  "\Google\Chrome\Application\V00321\Chrome.exe". Que no es el caso. Te lo digo por si alguna vez te encuentras alguna cosa así.

- Segunda opción: Obtener mediante la función Environ el directorio de \program files\ del sistema:
Código
  1. Private Sub Command1_Click()
  2. Print Environ("programfiles")
  3. End Sub
  4.  
y luego añades el resto  "\Google\Chrome\Application\chrome.exe"
Código
  1. Print Environ("programfiles") & "\Google\Chrome\Application\chrome.exe"

- Tercera opción: accediendo al registro de windows



« Última modificación: 4 Febrero 2015, 14:03 pm por okik » En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #8 en: 4 Febrero 2015, 14:22 pm »

Si claro que se puede. Se me ocurren varias maneras.

Pero antes de nada permíteme corregir unas líneas del código que te he dado antes. Hice un copia y pega de mi propio código en Form_Unload y se han colado un par de líneas que no tienen utilidad ahí, se trata de la variable hWndChild   que fue un intento de introducir sólamente la Web en el Picture, funcionaba con el Notepad por ejemplo, pero no con Google Chrome. Lo borré en otras partes del código, pero no en el Form_Load, se me pasó. También está lo de Espera(5) que si que es necesario más arriba, porque hay que esperar a que se cargue Google Chrome antes de introducirlo en el Picture, pero para cerrar no hace falta.

Código
  1. Private Sub Form_Unload(Cancel As Integer)
  2.    Dim hwnd As Long
  3.    Dim hWndChild As Long  '<---- BORRAR ESTA LÍNEA
  4.    'Espera (5) '<---- BORRAR ESTA LÍNEA
  5.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
  6.    Call Cerrar_Google(hwnd) 'cierra Google
  7. End Sub

Debería ser así:

Código
  1. Private Sub Form_Unload(Cancel As Integer)
  2.    Dim hwnd As Long
  3.    hwnd = FindWindow("Chrome_WidgetWin_1", vbNullString)
  4.    Call Cerrar_Google(hwnd) 'cierra Google
  5. End Sub

En cuanto a lo de
- Primera opción: Crear un código de busqueda de Chrome.exe y obtener su directorio (ideal para programas que al actualizarse van cambiando la ubicación) por ejemplo si fuera "\Google\Chrome\Application\V0014\Chrome.exe" y al actualizarse cambiara a  "\Google\Chrome\Application\V00321\Chrome.exe". Que no es el caso. Te lo digo por si alguna vez te encuentras alguna cosa así.

- Segunda opción: Obtener mediante la función Environ el directorio de \program files\ del sistema:
Código
  1. Private Sub Command1_Click()
  2. Print Environ("programfiles")
  3. End Sub
  4.  
y luego añades el resto  "\Google\Chrome\Application\chrome.exe"
Código
  1. Print Environ("programfiles") & "\Google\Chrome\Application\chrome.exe"

- Tercera opción: accediendo al registro de windows





Sin hardcodear:

Código
  1. GetModuleFileName(NULL, EXEFullPath, MAX_PATH);
  2.  

El NULL es el baseaddress, yo lo llamo desde un hook (DLL) y cuando pasa por una función mia, estoy seguro que es del thread del mismo exe y no de mi thread de la DLL.

PD: éso si está en ejecución, de lo contrario es fijarse en el Registro en donde está la lista de todos los programas instalados.
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
okik


Desconectado Desconectado

Mensajes: 462


Ver Perfil
Re: Abrir ejecutable en un form - ¿Es posible abrir Chrome?
« Respuesta #9 en: 4 Febrero 2015, 15:13 pm »

Sin hardcodear:

Código
  1. GetModuleFileName(NULL, EXEFullPath, MAX_PATH);
  2.  

El NULL es el baseaddress, yo lo llamo desde un hook (DLL) y cuando pasa por una función mia, estoy seguro que es del thread del mismo exe y no de mi thread de la DLL.

PD: éso si está en ejecución, de lo contrario es fijarse en el Registro en donde está la lista de todos los programas instalados.

¿Sin hardcodear? jajaja, ¿Eso está en el diccionario? ¿Qué significa? Es igual, lo supongo :P

"sin hardcodear" otra forma que hay de obtener el /Program files/ del sistema que tenía por ahí guardada y que estaba buscando es esta:

Código
  1. Private Sub Command1_Click()
  2. Dim X As Variant
  3. Dim Y As Variant
  4.   Set X = CreateObject("Wscript.Shell")
  5.    Set Y = X.Environment("Process")
  6.    Print Y("PROGRAMFILES")
  7. End Sub


En cuanto  a lo que has posteado  Miseryk , lo de GetModuleHandle no lo he probado y no se muy bien como va. He probado lo siguiente:
Código
  1. Dim hModule%, Buffer$, Length%, Msg$
  2.         hModule% = GetModuleHandle("notepad.exe")
  3.         Buffer$ = Space$(255)
  4.         Length% = GetModuleFileName(hModule%, Buffer$, Len(Buffer$))
  5.         Buffer$ = Left$(Buffer$, Length%)
  6.         Msg$ = Buffer$
  7.         Msgbox Msg$
:

Pero me da el directorio de VB6.EXE y no el del notepad.exe en este caso, ni siquiera estando en ejecución. He probado sustituyendo hModule% por el hande de la aplicación (en ejecución). Pero nada, que tampoco.

Al usar NULL supongo que tu vas por C++ y no VB, ya que NULL  no es válido en VB6, en sustitución sería vbNull
« Última modificación: 4 Febrero 2015, 15:33 pm por okik » En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Abrir nuevo Form C++
.NET (C#, VB.NET, ASP)
Lokoo 1 9,914 Último mensaje 10 Noviembre 2008, 22:16 pm
por BETA_V
Abrir un form desde otro form con netbeans en java
Java
murdock_ 3 47,650 Último mensaje 1 Enero 2009, 03:44 am
por sapito169
Efecto al abrir el Form
Programación Visual Basic
Nardo[N] 5 7,980 Último mensaje 10 Febrero 2011, 01:51 am
por Nardo[N]
Abrir ejecutable al abrir una carpeta
Windows
Kurolox 2 4,019 Último mensaje 15 Julio 2014, 20:54 pm
por Eleкtro
Abrir Chrome dentro de un form
Programación Visual Basic
NsTeam 4 9,000 Último mensaje 3 Febrero 2015, 13:49 pm
por okik
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines