elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  API SetCursor
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: API SetCursor  (Leído 4,015 veces)
DarkMatrix

Desconectado Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
API SetCursor
« en: 21 Diciembre 2010, 08:09 am »

Buenas, tengo un pequeño problema con una aplicacion que no me carga un cursor, debido a esto me vi obligado a usar varias APIs para cargar el cursor. En si la aplicacion si cargo el cursor correctamente pero solo hasta que se mueve el mouse luego de eso regresa al anterior :S.

La idea es cargar el cursor en la aplicacion y cuando esta cierre que el cursor quede como estaba.

Aca les dejo el code que encontre pero es el que cambia al mover el cursor:

Código
  1.  
  2.    Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
  3.    Private Declare Function SetCursor Lib "user32.dll" (ByVal hCursor As Long) As Long
  4.  
  5.    ' Display the application starting (arrow and hourglass) Windows
  6.    ' cursor for three seconds. The cursor resource is loaded from Windows. Then
  7.    ' restore the old cursor (whatever it happens to be).
  8.  
  9.    Dim hcursor    As Long ' receives handle to application starting cursor
  10.    Dim holdcursor As Long ' receives handle to previously used cursor
  11.    Dim retval     As Long ' throw-away return value
  12.  
  13.    hcursor = LoadCursor(0, IDC_APPSTARTING) ' load Windows's application starting cursor
  14.    holdcursor = SetCursor(hcursor) ' set it to the new cursor
  15.  
  16.    Sleep 3000 ' wait for 3 seconds
  17.  
  18.    retval = SetCursor(holdcursor) ' set it to the previous cursor
  19.  
  20.  

NOTA: Intente cambiando el cursor actual con SetSystemCursor pero no creo que eso sea buena idea ya que despues hay que restaurar el cursor de forma manual :S.


En línea

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: API SetCursor
« Respuesta #1 en: 21 Diciembre 2010, 14:33 pm »

No uses Sleep, usa doevents, BlackZeroX tiene una funcion que te puede ayudar


En línea

DarkMatrix

Desconectado Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
Re: API SetCursor
« Respuesta #2 en: 21 Diciembre 2010, 18:04 pm »

Si lo intente con DoEvents pero inmediatamente despues de cambiar el cursor vuelve al anterior :S
En línea

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: API SetCursor
« Respuesta #3 en: 21 Diciembre 2010, 18:07 pm »

HOLA!!!

Intentaste no usar el cursor, usa un shape o form o picturebox o lo que sea que persiga al mouse, entonces tenes un mouse "visible".

GRACIAS POR LEER!!!
En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: API SetCursor
« Respuesta #4 en: 21 Diciembre 2010, 18:24 pm »

Si lo intente con DoEvents pero inmediatamente despues de cambiar el cursor vuelve al anterior :S

Esporque tenes que hacer doevents mediante 3 segundos, con algun bucle o algo :P
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: API SetCursor
« Respuesta #5 en: 21 Diciembre 2010, 21:07 pm »

Esporque tenes que hacer doevents mediante 3 segundos, con algun bucle o algo :P
:¬¬ Entonces porque no usar Sleep() :huh:

Aun asi, la cosa seria como esto:
Código:
Sub Wait(lMs as long)
dim lTimer as long
lTimer = Timer()
do
 DoEvents
loop while (Timer() - lTimer < lMs)
end sub
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: API SetCursor
« Respuesta #6 en: 21 Diciembre 2010, 21:35 pm »

Karcrack, porque el sleep congela todo :xD
En línea

DarkMatrix

Desconectado Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
Re: API SetCursor
« Respuesta #7 en: 21 Diciembre 2010, 23:17 pm »

Creo que no me entendieron mucho de que se trata :S, bueno aqui subi un projecto de ejemplo: http://www.megaupload.com/?d=T0HXO5OF

Ok el codigo es este:

Código
  1. Option Explicit
  2.  
  3. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  4. Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
  5. Private Declare Function SetCursor Lib "user32.dll" (ByVal hCursor As Long) As Long
  6.  
  7. Private Sub Form_Load()
  8.  
  9.    Dim hCursor    As Long
  10.    Dim holdcursor As Long
  11.    Dim retval     As Long
  12.  
  13.    hCursor = LoadCursorFromFile(App.Path & "\AB1.cur")
  14.  
  15.    If hCursor = 0 Then End
  16.  
  17.    holdcursor = SetCursor(hCursor)
  18.  
  19.    Sleep 3000 ' Mientras la aplicacion se encuentra pausada el cursor se mantiene
  20.  
  21.    retval = SetCursor(holdcursor) ' si se anula esta linea para no restaurar el cursor anterior, igual vuelve a como estaba antes :S.
  22.  
  23. End Sub
  24.  
  25.  

Lo que quiero lograr es que el cursor se mantenga hasta finalizar la aplicacion o llamar a la funcion para restaurarlo. Alguna idea del porque el cursor vuelve a como estaba?
En línea

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: API SetCursor
« Respuesta #8 en: 21 Diciembre 2010, 23:44 pm »

Código
  1. Option Explicit
  2.  
  3. Private Declare Function SetCursor Lib "user32.dll" (ByVal hcursor As Long) As Long
  4. Private Declare Function GetTickCount Lib "kernel32" () As Long
  5. Private Const IDC_APPSTARTING As Long = 32650
  6. Private Const IDC_ARROW As Long = 32512&
  7. Private Declare Function LoadCursor Lib "user32.dll" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Any) As Long
  8. Dim normal As Long, wait As Long
  9.  
  10. Private Sub Form_Load()
  11.    wait = LoadCursor(0&, IDC_APPSTARTING)
  12.    normal = LoadCursor(0&, IDC_ARROW)
  13.    Esperar 3000
  14.    Call SetCursor(normal) ' set it to the previous cursor
  15. End Sub
  16.  
  17. Public Sub Esperar(Miliseconds As Long)
  18.    Dim retraso As Long
  19.    'GetTickCount devuelve un valor inicial, y se lo sumamos al de retraso
  20.    retraso = Miliseconds + GetTickCount
  21.    While retraso >= GetTickCount
  22.        DoEvents
  23.        Call SetCursor(wait)
  24.    Wend
  25. End Sub
  26.  

El problema fue que apenas se ponia el cursor, se cambiaba el cursor a otro segun el evento de una ventana  :P por eso en ese bucle, forzamos a mostrar nuestro cursor :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: API SetCursor
« Respuesta #9 en: 21 Diciembre 2010, 23:56 pm »

¿Lo que buscas no es esto? :huh:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
  4. Private Declare Function SetCursor Lib "user32.dll" (ByVal hCursor As Long) As Long
  5.  
  6. Private hOldCursor              As Long
  7. Private bStop                   As Boolean
  8.  
  9. Private Sub Form_Load()
  10. Dim hCursor                     As Long
  11.  
  12.    hCursor = LoadCursorFromFile("c:\bullseye.cur")
  13.  
  14.    If hCursor = 0 Then End
  15.  
  16.    Me.Show: DoEvents
  17.  
  18.    Do While bStop = False
  19.        hOldCursor = SetCursor(hCursor)
  20.        DoEvents
  21.    Loop
  22. End Sub
  23.  
  24. Private Sub Form_Unload(Cancel As Integer)
  25.    bStop = True
  26.    Call SetCursor(hOldCursor)
  27. End Sub

DoEvents! :P
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines