2017-01-18 2 views

Antwort

2

Wenn Sie das Standard-Maus-Cursor Thema ändern:

enter image description here

Sie können es nur in der Registrierung ändern:

Es gibt drei Hauptregistrierungsschlüssel, die ins Spiel kommen, .

  1. der Registrierungsschlüssel HKEY_CURRENT_USER \ Control Panel \ Cursors enthält die aktiven Benutzer Cursor

    1a) Die Werte unterhalb dieser die verschiedenen Arten von Cursorn
    1b) Die Regelung Quelle gibt den Typ der Cursor-Schema sind das wird gerade verwendet.

    Die unterschiedlichen Werte sind:

    "0" - Windows-Standard
    "1" - Benutzer Scheme
    "2" - System Scheme

  2. Der Registrierungsschlüssel HKEY_CURRENT_USER \ Control Panel \ Cursors enthält die benutzerdefinierten Cursorschemata (dh Scheme Source = 1)

  3. Der Registrierungsschlüssel HKEY_LOCAL_MACHINE \ SOFTWA RE \ Microsoft \ Windows \ CurrentVersion \ Systemsteuerung \ Schemas enthält die Systemcursorschemas (d. H. Scheme Source = 2)

enter image description here

Wenn Sie bereits verändert den Pfad zu einer der Cursor-Typ in HKCU \ Control Panel \ Cursors und erkannte, dass es nichts zu tun hat. Sie haben Recht, nur das Aktualisieren eines Schlüssels - zum Beispiel HKCU \ Control Panel \ Cursors \ Arrow - reicht nicht aus. Sie müssen Windows sagen, dass der neue Cursor geladen werden soll.

Hier kommt der SystemParametersInfo Aufruf herein. Um dies auszuprobieren, gehen wir weiter und ändern HKCU \ Control Panel \ Cursors \ Arrow zu C: \ WINDOWS \ Cursors \ appstar3.ani (vorausgesetzt, Sie haben dieses Symbol) und dann Rufen Sie SystemParametersInfo auf.

In AutoHotKey Drehbuch:

SPI_SETCURSORS := 0x57 
result := DllCall("SystemParametersInfo", "UInt", SPI_SETCURSORS, "UInt", 0, "UInt", 0, "UInt", '0') 
MsgBox Error Level: %ErrorLevel% `nLast error: %A_LastError%`nresult: %result% 

zu C# übersetzt:

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] 
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni); 

const int SPI_SETCURSORS = 0x0057; 
const int SPIF_UPDATEINIFILE = 0x01; 
const int SPIF_SENDCHANGE = 0x02; 
SystemParametersInfo(SPI_SETCURSORS, 0, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE); 

zum Standard Ändern der Windows Cursor

Jetzt kommt der schwierige Teil. Wenn Sie HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Systemsteuerung \ Schemas betrachten, werden Sie bemerken, dass "Windows Default" als ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, zu tatsächlichen Cursorn!

Was jetzt zu tun? Mach dir keine Sorgen. Alles, was Sie tun müssen, ist, die verschiedenen Cursortypen auf eine leere Zeichenfolge zu setzen und dann den Aufruf von SystemParametersInfo wie gewohnt durchzuführen. Tatsächlich können Sie jeden beliebigen Cursortyp in einem beliebigen Schema auf eine leere Zeichenfolge setzen, und Windows wird standardmäßig auf den entsprechenden Wert im Schema "Windows Default" festgelegt.

REF:

https://thebitguru.com/articles/programmatically-changing-windows-mouse-cursors/3

https://social.msdn.microsoft.com/Forums/vstudio/en-US/977e2f40-3222-4e13-90ea-4e8d0cdf289c/faq-item-how-to-change-the-systems-cursor-using-visual-cnet?forum=csharpgeneral

+0

Ich habe versucht, den Wert zu ändern, aber nichts passiert, es ist immer noch der Standardcursor –

+0

Siehe Update - Sie müssen SystemParametersInfo aufrufen –

+0

Ich habe einige Fehler hier: http://i.imgur.com/Agns2vV.png. Das pvParam hat keinen Nullwert akzeptiert. Ich versuche, pvParam Wert auf "0" zu ändern, und es funktioniert gut. Ich danke dir sehr! –

1
using System; 
using System.ComponentModel; 
using System.Drawing; 
using System.Windows.Forms; 
using System.IO; 
using System.Runtime.InteropServices; 

namespace WindowsFormsApplication1 { 
    public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) { 
     Bitmap bmp = Properties.Resources.Image1; 
     bmp.MakeTransparent(Color.White); 
     IntPtr hIcon = bmp.GetHicon(); 
     Icon ico = Icon.FromHandle(hIcon); 
     Cursor cur = new Cursor(hIcon); 
     using (FileStream fs = new FileStream(@"c:\temp\test.cur", FileMode.Create, FileAccess.Write)) 
     ico.Save(fs); 
     cur.Dispose(); 
     ico.Dispose(); 
     DestroyIcon(hIcon); 

     // Test it 
     cur = new Cursor(@"c:\temp\test.cur"); 
     this.Cursor = cur; 
    } 
    [DllImport("user32.dll")] 
    extern static bool DestroyIcon(IntPtr handle); 
    } 
} 

REF: https://social.msdn.microsoft.com/Forums/windows/en-US/9ea0bf74-760f-4f40-b64c-0cf7b0a56939/save-custom-cursor?forum=winforms

+0

Vielen Dank für Ihre Antwort, aber ich möchte, dass alle Maus-Cursor ändern (Hand, Pfeil, Hart arbeiten, Hilfe wählen ...) nicht nur für Strom Cursor –

3

Sie mögen dies tun können. Rufen Sie die Datei Cursor.cur auf, um den benutzerdefinierten Cursor zu laden. Unter MouseLeave den Standardcursor für das Formular festlegen.

public static Cursor ActuallyLoadCursor(String path) 
    { 
     return new Cursor(LoadCursorFromFile(path)); 
    } 

    [DllImport("user32.dll")] 
    private static extern IntPtr LoadCursorFromFile(string fileName); 

Button btn = new Button(); 
btn.MouseLeave += Btn_MouseLeave; 
btn.Cursor = ActuallyLoadCursor("Cursor.cur"); 

private static void Btn_MouseLeave(object sender, EventArgs e) 
    { 
     this.Cursor = Cursors.Default; 
    } 
+0

Ich möchte alle Windows-Cursor nicht nur für das Formular ändern. Danke für Ihre Hilfe! –

Verwandte Themen