Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta en Mayo 01, 2016, 01:10:54 pm
-
Una consulta amigos.
Fijense, con este código abro una web:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_NORMAL = 1
Private Sub btnCommand1_Click()
Dim X
X = ShellExecute(Me.hWnd, "Open", "https://player.vimeo.com/video/97494784?portrait=0&color=999", &O0, &O0, SW_NORMAL)
End Sub
Y todo bien, pero la ventana se abre "recordando" el tamaño y posición de la ultima vez que se abrió. ¿sera posible abrirlo en un tamaño y posición especificado por mi? así sea que el usuario halla abierto esa ventana y modificado su tamaño quiero que al volverle a dar clic se abra en el tamaño y posición que le indique desde el exe.
Muchas gracias
-
Aca tenes como abrir algo y obtener el hWnd de dicha ventana.
http://www.vb-helper.com/howto_pid_to_hwnd.html
Con ese handle de la ventana simplemente llama a SetWindowPos y posicionala donde quieras con el tamaño que quieras.
ejemplo: SetWindowPos (https://www.activevb.de/cgi-bin/apiwiki/SetWindowPos) (donde dice Fenster neu positionieren:)
saludos
-
Gracias Coco, voy a checarlo
-
hola es medio garrón esto de los navegadores ya que trabajan de una forma diferente al parecer es como que un exe llama a otro exe y entonces el pid se pierde por el camino, esto pasa cuando ya hay una instancia de la aplicación corriendo, asi que puede que lo mas fácil sea esperar a que cambie la ventana activa y tomar su hwnd y listo.
Option Explicit
Private Declare Sub 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)
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub CommandButton1_Click()
ShellBrowserUrl "https://player.vimeo.com/video/97494784?portrait=0&color=999", 10, 10, 400, 400
End Sub
Private Function ShellBrowserUrl(ByVal sUrl As String, Left As Long, Top As Long, Width As Long, Height As Long)
Dim oShell As Object
Dim sDefaulBrowserPath As String
Dim hWnd As Long
Set oShell = CreateObject("WScript.shell")
sDefaulBrowserPath = Split(oShell.RegRead("HKEY_CLASSES_ROOT\HTTP\shell\open\command\"), Chr(34))(1)
hWnd = GetForegroundWindow
Call Shell(sDefaulBrowserPath & " " & sUrl, vbNormalFocus)
Do While hWnd = GetForegroundWindow
DoEvents
Loop
SetWindowPos GetForegroundWindow, 0, Left, Top, Width, Height, 0
End Function
pd: esto también se puede hacer con ShellExecute use el clásico shell porque estaba probando lo que sugirió coco.
-
Genial, muchas gracias Lea.
EDITO: Muchas gracias Lea, me fui por tu camino y la solución funciona ferpectamente, muchas gracias.