我用程序在注册表中修改了鼠标的指针,但是要重新进入系统才可以生效,用什么办法可以让它立即生效的呢?给个代码,谢谢了:)

解决方案 »

  1.   

    在你的程序修改注册表的代码段的后面加上一句:
    SystemParametersInfo(SPI_SETCURSORS,0,NULL,SPIF_SENDCHANGE);      就可以了
      

  2.   

    注意: 要在RegCloseKey(hkey);  后面
      

  3.   

    不行啊?
    我设置的是:
    Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Control Panel\Cursors]
    @="MYMouse"
    "Scheme Source"=dword:00000002
    "Arrow"="E:\\Application Project\\out\\MouseStyle\\Cursor.cur"
    "Help"="E:\\Application Project\\out\\MouseStyle\\Help.cur"
    "AppStarting"="E:\\Application Project\\out\\MouseStyle\\Working.ani"
    "Wait"="E:\\Application Project\\out\\MouseStyle\\Busy.ani"
    "Crosshair"="E:\\Application Project\\out\\MouseStyle\\Cross.cur"
    "IBeam"="E:\\Application Project\\out\\MouseStyle\\Beam.cur"
    "NWPen"="E:\\Application Project\\out\\MouseStyle\\Pen.cur"
    "No"="E:\\Application Project\\out\\MouseStyle\\Unavailable.cur"
    "SizeNS"="E:\\Application Project\\out\\MouseStyle\\Size Horz.cur"
    "SizeWE"="E:\\Application Project\\out\\MouseStyle\\Size Vert.cur"
    "SizeNWSE"="E:\\Application Project\\out\\MouseStyle\\Resize Right.cur"
    "SizeNESW"="E:\\Application Project\\out\\MouseStyle\\Resize Left.cur"
    "SizeAll"="E:\\Application Project\\out\\MouseStyle\\Resize All.cur"
    "UpArrow"="E:\\Application Project\\out\\MouseStyle\\Alternate.cur"
    "Hand"=hex(2):00,00
    请问怎么刷新呢?
    楼上大哥给的代码可以编辑通过,但是没有起作用啊?
      

  4.   

    palmax(南宫煌) 你的方法我也试过了不行。HKEY_CURRENT_USER\Keyboard Layout\Preload我是在这里修改输入法的顺序,修改后不能立即生效,需要注销一下才行。
      

  5.   

    To楼主: 如果你是用程序改的注册表,用我的那句:SystemParametersInfo(SPI_SETCURSORS,0,NULL,SPIF_SENDCHANGE);是没有问题的
    楼主按下面的试试:HKEY hKey;
    struct HKEY__*RootKey;
    TCHAR *SubKey;
    TCHAR *ValueName;
    LPBYTE SetContent_S;
    RootKey=HKEY_CURRENT_USER;
    SubKey="Control Panel\\Cursors";
    ValueName="AppStarting";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Working.ani");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="Arrow";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Cursor.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="Crosshair";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Cross.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="Hand";
    SetContent_S=LPBYTE("");      //这里使用windows默认
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="Help";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Help.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="IBeam";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Beam.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="No";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Unavailable.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="NWPen";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Pen.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="SizeAll";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Resize All.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="SizeNESW";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Resize Left.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="SizeNS";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Size Horz.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="SizeNWSE";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Resize Right.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="SizeWE";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Size Vert.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="UpArrow";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Alternate.cur");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    ValueName="Wait";
    SetContent_S=LPBYTE("E:\\Application Project\\out\\MouseStyle\\Busy.ani");
    RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);
    RegSetValueEx(hKey,ValueName,NULL,REG_EXPAND_SZ,SetContent_S,CString(SetContent_S).GetLength());
    RegCloseKey(hKey);
    SystemParametersInfo(SPI_SETCURSORS,0,NULL,SPIF_SENDCHANGE);
    MessageBox("鼠标主题转换已完成!","OK",MB_ICONINFORMATION);另Tora3(啄木鸟):不同的修改向系统发的消息是不同的,不能一概而论;修改输入法好象必须重启或注销
      

  6.   

    KillProcess 掉 explorer.exe
    然后再 Createprocess explorer.exe
      

  7.   

    谢谢你palmax(南宫煌)朋友,
    你说的方法可以实现,是我自己把ANI文件的路径给错了,:)
    非常感谢你!