Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta en Mayo 01, 2016, 01:10:54 pm

Título: Abrir ventana con ShellExecute pero a un mismo tamaño y posicion
Publicado por: YAcosta en Mayo 01, 2016, 01:10:54 pm
Una consulta amigos.

Fijense, con este código abro una web:
Código: (VB) [Seleccionar]
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
Título: Re:Abrir ventana con ShellExecute pero a un mismo tamaño y posicion
Publicado por: coco en Mayo 01, 2016, 07:12:43 pm
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
Título: Re:Abrir ventana con ShellExecute pero a un mismo tamaño y posicion
Publicado por: YAcosta en Mayo 02, 2016, 12:11:06 am
Gracias Coco, voy a checarlo
Título: Re:Abrir ventana con ShellExecute pero a un mismo tamaño y posicion
Publicado por: LeandroA en Mayo 02, 2016, 04:49:58 am
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.

Citar
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.
Título: Re:Abrir ventana con ShellExecute pero a un mismo tamaño y posicion
Publicado por: YAcosta en Mayo 02, 2016, 01:53:44 pm
Genial, muchas gracias Lea.


EDITO: Muchas gracias Lea, me fui por tu camino y la solución funciona ferpectamente, muchas gracias.