Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: k_arlytos 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
-
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
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.
-
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
-
Si poreso te decia esta un poco rengo el codigo, proba de esta forma:
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.