Oprettet fre. d. 10. april 2009 kl. 14:41:29

fbisen
fbisen (15.375 point. Point ude: 0)

Se hvilket ikom musen har

Hej Eksperter

Nu har jeg i længere tid ledt lidt efter et stykke kode som kan tjekke om et specielt ikon bliver brugt til musen lige nu.

Jeg har kun brug for at tjekke ikonet på Windows, men det er ikke en Windows standard ikon.

Jeg har brugt GetCursorInfo ( http://msdn.microsoft.com/ (...)(VS.85).aspx ) for at få fat på et handle til musen.
Handles har det med at ændre sig, og derfor kan jeg ikke bruge denne værdi til at se om det er mit specifikke ikon der bruges, da værdien bliver ændret når programmet genstartes. Efter at have fået fat i handlet bruger jeg GetIconInfo ( http://msdn.microsoft.com/ (...)(VS.85).aspx ), som får dette handle med til at få nogle flere information er om ikonet.

Her får jeg hBMMask, men dette ændrer sig også hele tiden, selvom ikonet er det samme. hBMColor er i programmet altid 0.

Jeg har ikke et program i C/C++ da jeg bruger AutoHotKey til at lave alt dette. Koden for AutoHotKey er følgende:

Loop
{
    Sleep 1000
    VarSetCapacity(mi, 20, 0)
    mi := Chr(20)
    DllCall("GetCursorInfo", "Uint", &mi)
    bShow  := NumGet(mi, 4)
    hCursor := NumGet(mi, 8)
    xCursor := NumGet(mi,12)
    yCursor := NumGet(mi,16)

    VarSetCapacity(ni, 20, 0)   
    DllCall("GetIconInfo", "Uint", hCursor, "Uint", ∋)
    fIcon := NumGet(ni, 0)
    xHotspot := NumGet(ni, 4)
    yHotspot := NumGet(ni, 8)
    hBMMask  := NumGet(ni,12)
    hBMColor := NumGet(ni,16)
   
    TrayTip, test, bShow = %bShow%`nhCursor = %hCursor%`nxCursor = %xCursor%`nyCursor = %yCursor%`nfIcon = %fIcon%`nxHotspot = %xHotspot%`nyHotspot = %yHotspot%`nhBMMask = %hBMMask%`nhBMColor = %hBMColor%, 10
}

Jeg tænker om man kan bruge handlet til BMMask (det jeg har kaldt hBMMask) til at få noget at vide om det billede der bruges til musens ikon?

Jeg regner med dette er svært, da ikke mange har brug for at tjekke hvilket ikon der bliver brugt på musen. Jeg håber dog en af Jer eksperter har prøvet dette eller måske har mere erfaring med MSDN.

Hvis muligt vil jeg helst have kode i AutoHotKey syntax, men C++ syntax kan jeg også bruge.

Jeg håber på støtte :)

Skrevet fre. d. 10. april 2009 kl. 23:46:37| #1

bertelbrander
bertelbrander (16.740 point)
Har du overvejet at bruge GetIconInfoEx:
http://msdn.microsoft.com/ (...)(VS.85).aspx
Den giver lidt flere informationer.

Hvordan kan/vil du checke hvilket ikon der bliver brugt?

Blot af nysgerrighed, hvorfor vil du checke hvilket ikon der bliver brugt?

Skrevet søn. d. 12. april 2009 kl. 17:32:23| #2

fbisen
fbisen (15.375 point)
Det har jeg overvejet og prøvet, uden held. Jeg har prøvet følgende kode i AutoHotKey, hvor alle værdier er 0 eller "", undtagen cbSize som er 546.

Loop
{
    Sleep 1000
    VarSetCapacity(mi, 20, 0)
    mi := Chr(20)
    DllCall("GetCursorInfo", "Uint", &mi)
    bShow  := NumGet(mi, 4)
    hCursor := NumGet(mi, 8)
    xCursor := NumGet(mi,12)
    yCursor := NumGet(mi,16)

    VarSetCapacity(ni, 546, 0)
    NumPut(546, ni)
    DllCall("GetIconInfoEx", "Uint", hCursor, "Uint", &ni)
    cbSize := NumGet(ni, 0)
    fIcon := NumGet(ni, 4)
    xHotspot := NumGet(ni, 8)
    yHotspot := NumGet(ni, 12)
    hBMMask  := NumGet(ni,16)
    hBMColor := NumGet(ni,20)
    VarSetCapacity(szModName, 260)
    VarSetCapacity(szResName, 260)
    wResID := NumGet(ni,24,"Ushort")
    DllCall("RtlMoveMemory", "str", szModName, "Uint", &ni+ 26, "Uint", 260)
    DllCall("RtlMoveMemory", "str", szResName, "Uint", &ni+286, "Uint", 260)
   
    TrayTip, test, bShow = %bShow%`nhCursor = %hCursor%`nxCursor = %xCursor%`nyCursor = %yCursor%`ncbSize = %cbSize%`nfIcon = %fIcon%`nxHotspot = %xHotspot%`nyHotspot = %yHotspot%`nhBMMask = %hBMMask%`nhBMColor = %hBMColor%`nwResID = %wResID%`nszModName = %szModName%`nszResName = %szResName%`nA_Cursor = %A_Cursor%, 10
}

Jeg har brugt handlet til at tjekke om et ikon er specifikt, men det kræver at man først angiver handlet, som jo ændrer sig, hver gang. Det er langtfra optimalt. Min anden ide er om man kunne bruge handlet til bitmappet for ikonet til at tjekke om det havde nogen speciel værdi.

Jer er igang med at lave et lille makroscript som skal åbne et MMORPG spil og automatisk logge ind. Jeg vil her flytte musen rundt indtil jeg finder username feltet som laver en speciel musemakør.

Skrevet søn. d. 12. april 2009 kl. 20:17:41| #3

bertelbrander
bertelbrander (16.740 point)
Var det ikke lettere at finde handlen til vinduet, og gennem den vinduets placering?

Skrevet man. d. 13. april 2009 kl. 11:22:18| #4

fbisen
fbisen (15.375 point)
Det kan jeg nemt finde. Og jeg kan også løse problemet på den måde. Men der kan komme mange små-problemer i det (skærmstørelse, fullscreen) og derfor ville jeg prøve med musen.

Jeg tænker at det må være muligt at få musens icon, og hvis man kan det, må det også være muligt at tjekke hvilket musseikon der bliver brugt.

Det er i hvert fald denne løsning jeg gerne vil bruge, da den også kan bruges ved andre mindre små-problemer jeg skal løse for at logge ind.

Skrevet søn. d. 22. august 2010 kl. 10:24:17| #5

fbisen
fbisen (15.375 point)
Det har ikke været muligt at få et svar til dette. Tak for forsøget bertelbrander. Jeg har på fornemmelsen at problemet er at Windows ikke husker fillokationen på musens curser, men kun hvordan den ser ud. Hvis fillokationen var til at få fat i, ville det være en smal sag at tjekke hvilket ikon der blev brugt.

Lukker

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Regex sætning i C++

Oprettet den 30. januar 2012 kl. 22.55
kjeldsted giver 150 point for svar | Giv et svar »

Bog om strukturering

Oprettet den 25. januar 2012 kl. 07.26
keepy giver 30 point for svar | Giv et svar »

Opsnap keypress globalt.

Oprettet den 24. januar 2012 kl. 16.14
xited giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Gør dig selv en tjeneste: Køb et ordentligt SD-kort

Der kan være meget stor hastighedsforskel på to umiddelbare ens SD-kort. Se her hvad du skal være opmærksom på, når du køber ekstra hukommelse til din mobil, tablet eller kamera.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Gratis flysimulator fra Microsoft

Den legendariske Flight Simulator fra Microsoft genopstår den 29. februar - og denne gang er spillet gratis.


Nyheder fra Computerworld

Teaser billede

Bank: Derfor er login uden NemID helt i orden

Der er ikke hold i påstanden om sikkerhedsproblemer i forbindelse med bankkunders login uden brug af NemID, lyder det fra Nykredit Bank.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger