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..
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" ( _
ByVal hwnd As Long, _
ByVal lpString As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim drinky As String, handle As long
handle = FindWindow(vbNullString, "Calculadora")
drinky = SetWindowText(handle, "Drinky94 ;)")
End Sub
Nos vemos... Salu2!
Una muestra con SendMessageW() + WM_SETTEXT
'USER32
Private Declare Function SendMessageW Lib "USER32" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_SETTEXT As Long = &HC
Public Function SetText(ByVal lHwnd As Long, ByVal sCaption As String) As Boolean
SetText = CBool(SendMessageW(lHwnd, WM_SETTEXT, ByVal 0&, ByVal StrPtr(sCaption)))
End Function
Call SetText(Form1.hwnd, "WM_SETTEXT")
Drinky, la variable handle no es string, es long, ;)
S2
Cita de: Hasseds en 28 Febrero 2010, 21:17 PM
Drinky, la variable handle no es string, es long, ;)
S2
Cierto... ;) cuando llebas razon llebas razon ;)
salu2!
Cita de: Drinky94 en 28 Febrero 2010, 21:18 PM
Cierto... ;) cuando llebas razon llebas razon ;)
Lle
vas*
No pretendo ser grosero, solo es que me duelen los ojos...
Cita de: Karcrack en 28 Febrero 2010, 22:54 PM
Cita de: Drinky94 en 28 Febrero 2010, 21:18 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!
Cita de: Drinky94 en 28 Febrero 2010, 23:32 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...
Cita de: Karcrack en 28 Febrero 2010, 23:35 PM
Cita de: Drinky94 en 28 Febrero 2010, 23:32 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!
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 ???
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
Cita de: 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 ???
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!¡.
Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 06:38 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.Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 06:38 AM
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"
Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 06:38 AM
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"
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:
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" ( _
ByVal hwnd As Long, _
ByVal lpString As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim drinky As String, handle As long
handle = FindWindow(vbNullString, "Calculadora")
drinky = SetWindowText(handle, "Drinky94 ;)")
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...
Puse lacalculador ade ejemplo... podria haber puesto cualquier otro programa..
Cita de: Drinky94 en 1 Marzo 2010, 12:49 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)
Cita de: Hasseds en 1 Marzo 2010, 10:25 AM
Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 06:38 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
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!¡.
Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 19:26 PMPor 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 ;)
Cita de: BlackZeroX▓▓▒▒░░ en 1 Marzo 2010, 19:26 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
Cita de: 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...