Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: fary en 28 Febrero 2010, 18:26 pm



Título: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: fary en 28 Febrero 2010, 18:26 pm
Hola gente esta tarde me aburria y m e puesto a hacer este pequeño code, cirve para cambiarle el texto a una ventana. Usa dos Apis Findwindow para recuperar el handle de la ventana y Setwindowtext para cambiar el nombre. Si mas que hablar les dejo el code..

Código
  1. Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" ( _
  2.    ByVal hwnd As Long, _
  3.    ByVal lpString As String) As Long
  4. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
  5.    ByVal lpClassName As String, _
  6.    ByVal lpWindowName As String) As Long
  7. Private Sub Command1_Click()
  8.    Dim drinky As String, handle As long
  9.    handle = FindWindow(vbNullString, "Calculadora")
  10.    drinky = SetWindowText(handle, "Drinky94 ;)")
  11. End Sub
  12.  

Nos vemos... Salu2!


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 28 Febrero 2010, 20:06 pm
Una muestra con SendMessageW() + WM_SETTEXT
Código
  1. 'USER32
  2. Private Declare Function SendMessageW Lib "USER32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
  3.  
  4. Private Const WM_SETTEXT    As Long = &HC
  5.  
  6. Public Function SetText(ByVal lHwnd As Long, ByVal sCaption As String) As Boolean
  7.    SetText = CBool(SendMessageW(lHwnd, WM_SETTEXT, ByVal 0&, ByVal StrPtr(sCaption)))
  8. End Function
Código
  1. Call SetText(Form1.hwnd, "WM_SETTEXT")


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Hasseds en 28 Febrero 2010, 21:17 pm
Drinky, la variable handle no es string, es long,  ;)

S2


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: fary en 28 Febrero 2010, 21:18 pm
Drinky, la variable handle no es string, es long,  ;)

S2

Cierto... ;) cuando llebas razon llebas razon ;)

salu2!


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 28 Febrero 2010, 22:54 pm
Cierto... ;) cuando llebas razon llebas razon ;)
Llevas*

No pretendo ser grosero, solo es que me duelen los ojos...


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: fary en 28 Febrero 2010, 23:32 pm
Cierto... ;) cuando llebas razon llebas razon ;)
Llevas*

No pretendo ser grosero, solo es que me duelen los ojos...

Tampoco me anden con finerias xD que eso ya sique es ganas de acer el tonto xD



salu2!


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 28 Febrero 2010, 23:35 pm
Tampoco me anden con finerias xD que eso ya sique es ganas de acer el tonto xD
hacer*
Es importante escribir bien, no es ninguna fineria... no poner acentos y tal aún, pero hay fallos graves...


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: fary en 28 Febrero 2010, 23:47 pm
Tampoco me anden con finerias xD que eso ya sique es ganas de acer el tonto xD
hacer*
Es importante escribir bien, no es ninguna fineria... no poner acentos y tal aún, pero hay fallos graves...

Pero tio no me vengas con estas que la mitad del foro ace esto xD y solo me lo decis a mi!


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Hasseds en 1 Marzo 2010, 00:27 am
Dinky, solo son errores que si no lo cometes es mejor, por ejemplo (ya te lo habia dicho en otro post) usas mal FindWindow

handle = FindWindow (vbNullString, "Calculadora")' solo para un windows en castellano

handle = FindWindow("SciCalc", vbNullString) ' para windows con cualquier idioma

No te enojes, que tal si Clausuramos esa calculadora ???

Código:
Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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 EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Private Sub Command1_Click()
  Call EnableWindow(FindWindow("SciCalc", vbNullString), 1)
End Sub

Private Sub Form_Load()
  Shell "calc"
  Dim handle  As Long
  handle = FindWindow("SciCalc", vbNullString)
  Call SendMessage(handle, &HC, 0, ByVal "CLAUSURADO")
  Call EnableWindow(handle, 0)
  Dim handle2  As Long
  handle2 = FindWindowEx(handle, 0, "Edit", vbNullString)
  Call SendMessage(handle2, &HC, 0, ByVal "POR EH")
End Sub










Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: BlackZeroX en 1 Marzo 2010, 06:38 am
Dinky, solo son errores que si no lo cometes es mejor, por ejemplo (ya te lo habia dicho en otro post) usas mal FindWindow

handle = FindWindow (vbNullString, "Calculadora")' solo para un windows en castellano

handle = FindWindow("SciCalc", vbNullString) ' para windows con cualquier idioma

No te enojes, que tal si Clausuramos esa calculadora ???

Código:
Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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 EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Private Sub Command1_Click()
  Call EnableWindow(FindWindow("SciCalc", vbNullString), 1)
End Sub

Private Sub Form_Load()
  Shell "calc"
  Dim handle  As Long
  handle = FindWindow("SciCalc", vbNullString)
  Call SendMessage(handle, &HC, 0, ByVal "CLAUSURADO")
  Call EnableWindow(handle, 0)
  Dim handle2  As Long
  handle2 = FindWindowEx(handle, 0, "Edit", vbNullString)
  Call SendMessage(handle2, &HC, 0, ByVal "POR EH")
End Sub


Ese código esta mal, en primera no debe pasarse una api que devuelve cosas inestables directamente en otra en este caso findwindow dentro de Enablewindow
NI TAMPOCO directamente pasar el handle devuelto, directamente a procesar en la siguiente linea.
En pocas palabras debe verificarse que se a obtenido lo deseado y evitar jaladas de pelos posteriores.

P.D.: No es necesario que Drinky use a huevo findwindow pero con la clase de ventana... así que... dejen que aprende a su modo, tampoco es de recalcarse lo en cada post...

Sangrientas Lunas!¡.


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Hasseds en 1 Marzo 2010, 10:25 am

Ese código esta mal, en primera] no debe pasarse una api que devuelve cosas inestables  directamente en otra   en este caso findwindow dentro de Enablewindow


Si te referis a esto

Private Sub Command1_Click()
  Call EnableWindow(FindWindow("SciCalc", vbNullString), 1)
End Sub

Es solo una puerta de escape para que no tenga que usar el administrador de tareas para cerrar la calculadora,  y si vamos a hilar fino que nay que usar de hwnd en Enablewindow ?, una variable como devuelve FindWindows  en este caso ? ... si no es asi entonces estas diciendo que en hwnd de Enablewindow o de cualquier API van Constantes  ? ...  bueno, si es así no lo sabia, me estoy enterando en este momente que la variable hwnd as Long es una constante.




NI TAMPOCO directamente pasar el handle devuelto, directamente a procesar en la siguiente linea.
En pocas palabras debe verificarse que se a obtenido lo deseado y evitar jaladas de pelos posteriores.


  handle = FindWindow("SciCalc", vbNullString)
  Call SendMessage(handle, &HC, 0, ByVal "CLAUSURADO")
  Call EnableWindow(handle, 0)

En esta si,  estamos de acuerdo , falta el "if handle <> 0 Then"




No es necesario que Drinky use a huevo findwindow pero con la clase de ventana,,,


creo que te referis a esto :

handle = FindWindow (vbNullString, "Calculadora")' solo para un windows en castellano
handle = FindWindow("SciCalc", vbNullString) ' para windows con cualquier idioma

Para mi es logico, no tengo dudas. No es a huevo porque en este caso se ejecuta  la calculadora en la linea anterior y el Hwnd es el correcto (aunque haya mas calculadoras abiertas) .


PD: En este post hice solo dos acotaciones a Drinky, una que el valor de Hwnd es Long y no String y  la otra acotacion fue el uso de FindWindows. Ninguna de las dos con "mala leche"


















Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 1 Marzo 2010, 12:34 pm
B0X se refiere a que tienes que comprobar que el Handle sea distinto a 0, sino la cosa no funcionara...

Respecto al codigo inicial que presento Drinky:
Código
  1. Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" ( _
  2.    ByVal hwnd As Long, _
  3.    ByVal lpString As String) As Long
  4. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
  5.    ByVal lpClassName As String, _
  6.    ByVal lpWindowName As String) As Long
  7. Private Sub Command1_Click()
  8.    Dim drinky As String, handle As long
  9.    handle = FindWindow(vbNullString, "Calculadora")
  10.    drinky = SetWindowText(handle, "Drinky94 ;)")
  11. End Sub
SetWindowText(): Devuelve un Boolean, no una cadena de texto... asi que la cadena 'drinky' ademas no volver a ser usada es del tipo incorrecto...
FindWindow(): Como te dije por MSN hace tiempo mejor que trabajes con el ClassName :P

Y en general, cuando compartas codigos mejor que los prepares en forma de funcion, y no en funcion a un command y a ser posible que tenga parametros, como en este caso la ventana (Hwnd) y el titulo nuevo...


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: fary en 1 Marzo 2010, 12:49 pm
Puse lacalculador ade ejemplo... podria haber puesto cualquier otro programa..


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 1 Marzo 2010, 13:00 pm
Puse lacalculador ade ejemplo... podria haber puesto cualquier otro programa..
Pues eso te comento, que es mejor hacerlo en forma de funcion... Y luego si quieres pones un ejemplo con la calculadora (SciCalc)


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: BlackZeroX en 1 Marzo 2010, 19:26 pm

Ese código esta mal, en primera] no debe pasarse una api que devuelve cosas inestables  directamente en otra  en este caso findwindow dentro de Enablewindow


creo que te referis a esto :
Private Sub Command1_Click()
  Call EnableWindow(FindWindow("SciCalc", vbNullString), 1)
End Sub

Es solo una puerta de escape para que no tenga que usar el administrador de tareas para cerrar la calculadora,  y si vamos a hilar fino que nay que usar de hwnd en Enablewindow ?, una variable como devuelve FindWindows  en este caso ? ... si no es asi entonces estas diciendo que en hwnd de Enablewindow o de cualquier API van Constantes  ? ...  bueno, si es así no lo sabia, me estoy enterando en este momente que la variable hwnd as Long es una constante.


1. KarCrack ya te respondió por mi.
2. Me reservo gran parte {Drinky no hace mucho que inicio con el uso de las APIS tengo entendido}, aun que se tiene razón con buscar por la clase de form, solo que es la segunda vez que lo veo de tu parte {la 1era fue en un off en un tema nada q ver}.

Por que B0X ... Maldito SharKI, me puso el diminutivo y ya se expandió.

Dulces Lunas!¡.


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Karcrack en 2 Marzo 2010, 00:10 am
Por que B0X ... Maldito SharKI, me puso el diminutivo y ya se expandió.
SharkI te puso ese diminutivo? :laugh: Que casualidad... no? :xD

He puesto eso pues por que como ha Hacker_Zero lo llamo H0... y soy muy vago... :P
Si te moelsta tranquilo, copiare tu nick tal cual, tampoco es tanto esfuerzo ;)


Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: Hasseds en 2 Marzo 2010, 16:35 pm

1. KarCrack ya te respondió por mi.
2. Me reservo gran parte {Drinky no hace mucho que inicio con el uso de las APIS tengo entendido}, aun que se tiene razón con buscar por la clase de form, solo que es la segunda vez que lo veo de tu parte {la 1era fue en un off en un tema nada q ver}.


Si, "se tiene razon" con buscar por la clase de form" y Tambien que HWnd es long
Si,  "es la segunda vez que lo vez de mi parte", es porque nuevamente no se usó la clase (SciCalc)
Si, "la 1era fue en un off en un tema nada q ver"...  tal vez para mi si tenia sentido (no tengo que pedirte permiso para meter un comentario off o in)

No me quedó claro si a lo que te referis en el primer parrafo de mi anterior post es lo que respondio KarCrack sobre checar el cero o fue la "sentencia" de : "no debe pasarse una api que devuelve cosas inestables directamente en otra "  

No tengo ganas de sueguir gastando energia en esto









Título: Re: [MINI SOURCE]Cambiar el nombre a una ventana
Publicado por: BlackZeroX en 2 Marzo 2010, 19:16 pm
B0X se refiere a que tienes que comprobar que el Handle sea distinto a 0, sino la cosa no funcionara...