Curseur animé avec SetSystemCursor

Résolu
Utilisateur anonyme - 5 avril 2015 à 18:08
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 5 avril 2015 à 23:49
Bonjour à toutes et à tous,

me voilà de nouveau avec un deuxième problème ce weekend.

Ma question est simple : serait-il possible d'utiliser des curseurs animés (.ani), et forcément, voir l'animation de ce curseur, avec l'utilisation de SetSystemCursor ?

Et si oui, comment faire, car jusque maintenant, chaque résultat obtenu a été un curseur figé.

Merci d'avance de votre aide.

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/04/2015 à 18:34
Bonjour,
Je viens de le faire sans aucun problème avec le curseur banana.ani, en appliquant très exactement ce que je t'ai dit dans ton autre discussion, notamment en utilisant (je te le rappelle) LoadCursorFromFile
Il est clair que ce curseur doit être du format attendu exact.
Banana.ani se trouve dans le répertoire cursors de Windows

EDIT : je viens de recommencer cette expérience avec le curseur barber.ani du dossier cursors du répertoire Windows ===>> succès également.

Je ne suis pas VB.Nettiste et ai testé avec VB6. Mais comme nous n'utilisons en fait que des fonctions de l'Api de Windows, tant pour extraire, que pour utiliser, VB n'a plus grand chose à dire lui-même !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Utilisateur anonyme
5 avril 2015 à 18:37
Après de nouvelles tentatives, il m'est bien possible d'afficher un curseur en .ani, mais il n'est pas animé, de plus, banana.ani n'est pas présent dans le dossier Cursors de Windows (C:\Windows\Cursors\).

J'ai fait les tests avec visual studio 2010 et 2013, et pour les deux cas, le curseur n'est pas animé.
J'utilise pourtant bien LoadCursorFromFile, pour ensuite m'en servir avec SetSystemCursor.
Je ne comprends pas pourquoi les curseurs ne s'animent pas.

Je précise au passage que je suis sous Windows 8.1 64 bits, et que je suis à jour.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/04/2015 à 18:47
Il se peut (je ne suis pas en 64 bits) que ton problème vienne de ces 64 bits.
J'en doute un peu, toutefois.
Montre ton code.

IMPORTANT : y compris (bien évidemment) les déclarations faites des fonctions/Windows utilisées.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Utilisateur anonyme
5 avril 2015 à 18:50
Private Declare Function SetSystemCursor Lib "user32.dll" (ByVal hCursor As IntPtr, ByVal id As Integer) As Boolean
Private Declare Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As IntPtr

Private Const IDC_ARROW As UInt32 = 32512

Dim SavedCursor As Icon

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

SavedCursor = Icon.FromHandle(Cursors.Arrow.CopyHandle)
Dim NewCursor As IntPtr = LoadCursorFromFile(Application.StartupPath & "\MyCursor.ani")

SetSystemCursor(NewCursor, IDC_ARROW)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim OldCursor As IntPtr = SavedCursor.Handle

SetSystemCursor(OldCursor, IDC_ARROW)
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2015 à 19:18
Je pense que sont responsables les choix que tu as fait des types donnés aux paramètres de tes fonctions/Windows
J'ignore ce qu'ils devraient être en appelant ces fonctions depuis VB.Net.
Le type qui mez "surprend" le plus, dans tes déclarations, est celui (booléen) que tu as attribué à la fonction setsystemcursor.

Je vois par ailleurs que tu veux utiliser un curseur "MyCursor.ani", ce qui donne à penser qu'il n'est peut-être pas au bon format, en dépit de son extension.
Fais tes tests, s'il te plait, avec des curseurs .ani de Windows
0
Utilisateur anonyme
5 avril 2015 à 19:32
Après quelques tests, j'ai remarqué que sous Windows 7 64 bits, il n'y a aucun problème car les curseurs sont bien animés (test réalisé avec les curseurs Windows et des curseurs personnalisés).

Sous Windows 8.1 64 bits, tout curseur animé .ani reste figé, y compris ceux de Windows.

Je me retrouve donc face à une impasse, serait-ce un bug ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2015 à 20:27
Je ne sais alors plus que te dire. Il me faudrait faire des tests avec ce que je n'ai pas (windows 8).
0
Utilisateur anonyme
5 avril 2015 à 20:52
Je vais faire de nouvelles recherches, et si résultat, je communiquerait le tout.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
5 avril 2015 à 20:57
Bonjour,

Jai Windows 8.1 64 bits et le seul curseur animé qui fonctionne est celui-ci:



si cela peut t'aider!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2015 à 20:59
Oui.
Car ce que tu trouverais aurait de l'importance pour les utilisateurs de Windows 8.
Il n'est pas impossible que cela soit finalement lié à une stratégie de sécurité de Windows 8.
Je crois en effet me rappeler avoir lu ici et là que les fichiers .ini pouvaient présenter des failles pouvant compromettre pal mal de choses, dont, carrément, la "prise en main malveillante" d'un PC.
Alors ... je ne sais pas ...
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 avril 2015 à 21:24
Salut

Peut être ainsi

Private Declare Unicode Function LoadCursorFromFile Lib "user32.dll" Alias "LoadCursorFromFileW" (ByVal filename As String) As IntPtr

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim hcur As IntPtr
hcur = LoadCursorFromFile(Application.StartupPath & "\mycursor.ani")
me.Cursor = New Cursor(hcur)

End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 avril 2015 à 21:49
Bonjour, cs_ShayW,

"Me", ce n'est pas QUE le form ?
Si oui, ce n'est pas ce qui est demandé !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/04/2015 à 23:52
Avant d'aller dormir, tout de même :
As-tu pensé à vérifier, sur ta machine win 8, qu'aucune manipulation malheureuse n'aurait modifié l'association correspondant à l'extension .ani ?
Regarde dans ta BDR. J'ignore comment est celle de Win 8

Dans la mienne, de BRD, j'examinerais ces deux clés :
HKEY_CLASSES_ROOT\.ani
HKEY_CLASSES_ROOT\anifile
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Rejoignez-nous