Autor Tema: embeber una aplicacion  (Leído 4031 veces)

0 Usuarios y 1 Visitante están viendo este tema.

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
embeber una aplicacion
« en: Agosto 15, 2016, 04:23:14 pm »
Buenas tardes con todos, como puedo hacer para abrir una calculadora de windows y que esta siempre este  al costado de mi formulario ya se moviendo o este quieto mi formulario. muchas gracias
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:embeber una aplicacion
« Respuesta #1 en: Agosto 16, 2016, 09:32:41 pm »
hola carlitos no se si te referis dentro a un costado si decis dentro podes utilizar el api setParent en recursosvisualbasic seguro hay un ejemplo, si te referis a un costado podes utilizar un modulo clase que esta aca
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57095&lngWId=1
descargalo y en el form principal pones esto
Código: [Seleccionar]
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function MoveWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2 '


Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public oMagneticWnd As New cMagneticWnd

Private Sub Form_Load()
    Call oMagneticWnd.AddWindow(Me.hWnd)
End Sub

Private Sub cmdNewForm_Click()
    Dim hwndCalc As Long, pid As Long
    Dim tRect As RECT
   
    pid = Shell("Calc.exe", vbMaximizedFocus)
   
    hwndCalc = FindWindow(vbNullString, "Calculadora")
   
    Do While hwndCalc = 0
        DoEvents
        hwndCalc = FindWindow(vbNullString, "Calculadora")
    Loop
   
    GetWindowRect Me.hWnd, tRect

    Sleep 1000

    SetWindowPos hwndCalc, 0, tRect.Right, tRect.Top, 0, 0, SWP_NOSIZE
                           
    Call oMagneticWnd.AddWindow(hwndCalc, fMain.hWnd)
   
     
End Sub

esto anda a medias pero es para que te des una idea si te sirve despues cualquier cosa vemos porque a la segunda llamada no funciona y ahora no tengo mucho tiempo para verlo.

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:embeber una aplicacion
« Respuesta #2 en: Agosto 17, 2016, 06:12:37 pm »
si esto era lo que estaba buscando, muchas gracias leandro, pero el problema es que cuando cierro la calculadora y lo vuelvo abrir ya no hace esa funcion de ponerse al costado y moverse cuando muevo el formulario porque sera?

despues de analizar...

cuando ejecuto el programa y le doy click al boton me abre la calculadora y esta calculadora se ve reflejado en el administrador de tareas y cuando cierro la calculadora que esta al costado de mi formulario y le vuelvo a dar click al boton(sin esperar que desaparezca en el administrador de tareas) ahi es el problema no lo toma en cuenta la nueva calculadora que se llama

y cuando cierro esta calculadora y espero que tambien se desaparezca en el administrador de tareas y vuelvo a dar click en el boton entonces todo sigue normal siempre al costado de mi formulario


hay solucion para esto uhmmm
« última modificación: Agosto 17, 2016, 06:20:18 pm por k_arlytos »
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:embeber una aplicacion
« Respuesta #3 en: Agosto 18, 2016, 06:41:49 am »
Si poreso te decia esta un poco rengo el codigo, proba  de esta forma:
Código: (vb6) [Seleccionar]
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1


Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public oMagneticWnd As New cMagneticWnd

Private Sub Form_Load()
    Call oMagneticWnd.AddWindow(Me.hWnd)
End Sub

Private Sub cmdNewForm_Click()
    Dim hwndCalc As Long, pid As Long
    Dim tRect As RECT
   
    Do While FindWindow(vbNullString, "Calculadora")
        Shell "taskkill /f /im Calculator.exe", vbHide
        DoEvents
        Sleep 100
    Loop
   
    pid = Shell("Calc.exe")
   
    hwndCalc = FindWindow(vbNullString, "Calculadora")
   
    Do While hwndCalc = 0
        DoEvents
        hwndCalc = FindWindow(vbNullString, "Calculadora")
    Loop

    GetWindowRect Me.hWnd, tRect
   
    Sleep 1000
    SetWindowPos hwndCalc, 0, tRect.Right, tRect.Top, 0, 0, SWP_NOSIZE
                           
    Call fMain.oMagneticWnd.AddWindow(hwndCalc, fMain.hWnd)
         
End Sub

En Windows 10 , claro que calculadora está en castellano, si se ejecutase en otro idioma tendrías un problema, pero bueno supongo que lo vas a usar en algo local.