X q no sale la carpeta del explorer?

Iniciado por germixxx, 4 Diciembre 2005, 22:17 PM

0 Miembros y 2 Visitantes están viendo este tema.

germixxx

No entiendo q hago mal, le di un monton de vueltas pero no me sale, si quiero saber el titulo de la ventana me funciona, asi:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Const WM_GETTEXT = &HD

Private Sub Command1_Click()
Dim i As Long
Dim s As String
s = String$(100, " ")
i = FindWindow("cabinetwclass", vbNullString)
Call SendMessageByString(i, WM_GETTEXT, Len(s), s)
Text1.Text = s
End Sub

pero cuando quiero saber la carpeta me sale vacio, el codigo me quedo asi:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Const WM_GETTEXT = &HD

Private Sub Command1_Click()
Dim i As Long
Dim s As String
s = String$(100, " ")
i = FindWindow("cabinetwclass", vbNullString)
i = FindWindowEx(i, ByVal 0&, "WorkerW", vbNullString)
i = FindWindowEx(i, ByVal 0&, "Rebarwin32", vbNullString)
i = FindWindowEx(i, ByVal 0&, "ComboBoxEx32", vbNullString)
i = FindWindowEx(i, ByVal 0&, "combobox", vbNullString)
i = FindWindowEx(i, ByVal 0&, "edit", vbNullString)
Call SendMessageByString(i, WM_GETTEXT, Len(s), s)
Text1.Text = s
End Sub

pero no funciona :-\ , si alquien me puede dar una manito :)

NYlOn

no entiendo lo q keres hacer
podrias explicarte un pokito mas ??

germixxx

Lo q quiero hacer es identificar las ventanas del explorer y saber en q carpeta esta ubicado. Por ejempo si tenes una ventana del explorer abierta en "c:\german" q en el text1 aparezca "c:\german". Lo maximo q eh logrado es q aparezca el titulo de la ventana en este caso "german"

NYlOn

Bueno, eso se podria hacer si tienes la opcion "Mostrar la ruta completa en la barra de titulo" (Herramientas>Opciones de carpeta>Ver)

En ese caso si podrias ver todo, pero de otra forma la verdad no se me ocurre :S


Saludos.-

germixxx

MMMM de esa forma funcionaria pero es demasiado rebuscado, ya q si no tenes la opcion activada t manda error :'(. La forma q estoy intentado identifica la ventana y va escalando hacia las "subventanas" hasta llegar al cuadro de texto donde dice la direccion(edit es su classname). De todas formas tmb lo necesito para internet explorer q despues de hacer el de explorer comun solo le tengo q cambiar la primera llamada findwindow ya q los classnames de las "subventanas" hasta llegar el cuadro de texto de la direccion son los mismos, y el metodo de mostrar la ruta completa sobre la ventana fallaria x q cuando entras a una pagina en el internet explorer en la barra de titulo sale el titulo de la pagina no la direccion pagina en si

Este es el codigo q no entiendo donde falla, cuando empiezo a identificar subventanas con FindWindowEx me devuelve la cadena vacia.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Const WM_GETTEXT = &HD

Private Sub Command1_Click()
Dim i As Long
Dim s As String
s = String$(100, " ")
i = FindWindow("cabinetwclass", vbNullString)
i = FindWindowEx(i, ByVal 0&, "WorkerW", vbNullString)
i = FindWindowEx(i, ByVal 0&, "Rebarwin32", vbNullString)
i = FindWindowEx(i, ByVal 0&, "ComboBoxEx32", vbNullString)
i = FindWindowEx(i, ByVal 0&, "combobox", vbNullString)
i = FindWindowEx(i, ByVal 0&, "edit", vbNullString)
Call SendMessageByString(i, WM_GETTEXT, Len(s), s)
Text1.Text = s
End Sub


Para dar una idea necesito este codigo para grabar las paginas abiertas y las rutas de las ventanas del explorer, matar el explorer y despues reabrir las paginas y las ventanas de explorer con sus rutas correspondientes.

Slasher-K

Mira la función GetWindowModuleFileName, te devuelve la ruta de acceso del proceso que creó la ventana especificada.

Para enumerar las ventanas usa EnumWindows. No tengo tiempo sino posteo un ejemplo, pero busca en google que hay muchos ejemplos (creo que el la web de guille hay varios, de hecho).

Saludos.

P.D: Siento estar pasando poco por el foro pero me quedé sin inet y hasta que no vengan a instalarme inet en casa estoy aislado de la red  :'(.



A la reina de las profundidades que cuida los pasos de una sombra en la noche :*

germixxx

Bueno... supongo q lo de GetWindowModuleFileName no va a funcionar ya q si devuelve el procesos q creo la ventana va a delvolverme "explorer.exe". De todas formas voy a probarlo haber como va, creo q la unica manera de hacerlo es leer el cuadro de texto q dice el path del explorer, identificando el hwnd del textbox y haciendo sendmessage con WM_GETTEXT(pero no se donde falla mi codigo :'(). Igual voy a probar lo de GetWindowModuleFileName. Lo de enumwindows creo q no lo voy a necesitar ya q identifico la primera ventana(findwindow) con la clase "cabinetwclass" grabo el texto(la direccion) mato la ventana, identifico otra ves la primera ventana(findwindow) con la clase "cabinetwclass" mato la ventana y asi sucesivamente hasta q no encuentre mas ventanas. Igual voy  a intentar tu metodo Slasher-K, mucha gracias, despues posteo resulatados