SystemParametersInfo (SPI_SETMOUSESPEED, 0,(PVOID)getmousemovespeed,0);

解决方案 »

  1.   

    int *getmousespeed=new int[1];SystemParametersInfo(112,0,(PVOID)getmousespeed,0);
    *getmousespeed=1;
    SystemParametersInfo(113,0,(PVOID)getmousespeed,0);我调用SystemParametersInfo用参数112读取鼠标速度时正确,得到默认值10,
    但当我用参数113设置鼠标速度时却变化。
    注:SPI_GETMOUSESPEED=112,  SPI_SETMOUSESPEED=113
    我在程序中包含了“winuser.h"后,compile时仍然不认此两个系统常量,不知原因。
      

  2.   

    #include "stdafx.h"
    #include <afxdllx.h>
    #include "mousehook.h"#pragma data_seg("mydata") 
    HWND glhPrevTarWnd=NULL;
    HWND glhDisplayWnd=NULL;  
    HHOOK glhHook=NULL;  
    HINSTANCE glhInstance=NULL;  
    #pragma data_seg() 
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    static AFX_EXTENSION_MODULE MousehookDLL = { NULL, NULL };extern "C" int APIENTRY
    DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved); if (dwReason == DLL_PROCESS_ATTACH)
    {
    TRACE0("MOUSEHOOK.DLL Initializing!\n");

    // Extension DLL one-time initialization
    if (!AfxInitExtensionModule(MousehookDLL, hInstance))
    return 0; // Insert this DLL into the resource chain
    // NOTE: If this Extension DLL is being implicitly linked to by
    //  an MFC Regular DLL (such as an ActiveX Control)
    //  instead of an MFC application, then you will want to
    //  remove this line from DllMain and put it in a separate
    //  function exported from this Extension DLL.  The Regular DLL
    //  that uses this Extension DLL should then explicitly call that
    //  function to initialize this Extension DLL.  Otherwise,
    //  the CDynLinkLibrary object will not be attached to the
    //  Regular DLL's resource chain, and serious problems will
    //  result. new CDynLinkLibrary(MousehookDLL);
    glhInstance=hInstance;
    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
    TRACE0("MOUSEHOOK.DLL Terminating!\n");
    // Terminate the library before destructors are called
    AfxTermExtensionModule(MousehookDLL);
    }
    return 1;   // ok
    }CMouseHook::CMouseHook()  

    } CMouseHook::~CMouseHook()  

    StopHook();
    } LRESULT WINAPI MouseProc(int nCode,WPARAM wparam,LPARAM lparam) 

    LPMOUSEHOOKSTRUCT pMouseHook=(MOUSEHOOKSTRUCT FAR *) lparam; 
    int *Getmousespeed=new int[1];
    char *p=new char[4],*q=new char[4];
    SystemParametersInfo(112,0,(PVOID)Getmousespeed,0);
    itoa(*Getmousespeed,p,10);
    *Getmousespeed=1;
    SystemParametersInfo(113,0,(PVOID)Getmousespeed,0);
    itoa(*Getmousespeed,q,10); if (nCode>=0) 

    HWND glhTargetWnd=pMouseHook->hwnd;   HWND ParentWnd=glhTargetWnd;
    while (ParentWnd !=NULL)

    glhTargetWnd=ParentWnd;
    ParentWnd=GetParent(glhTargetWnd);   } 
    if(glhTargetWnd!=glhPrevTarWnd) 

    char szCaption[100]; 

    GetWindowText(glhTargetWnd,szCaption,100);  
    strcat(szCaption,strcat(strcat(p," "),q));
    if(IsWindow(glhDisplayWnd)) 
    SendMessage(glhDisplayWnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)szCaption); 
    glhPrevTarWnd=glhTargetWnd;   } 

    delete Getmousespeed;
    delete p;
    delete q;
    return CallNextHookEx(glhHook,nCode,wparam,lparam);  } BOOL CMouseHook::StartHook(HWND hWnd)  { 
    BOOL bResult=FALSE; 
    glhHook=SetWindowsHookEx(WH_MOUSE,MouseProc,glhInstance,0); 
    if(glhHook!=NULL) 
    bResult=TRUE; 
    glhDisplayWnd=hWnd;  
    return bResult; 
    } BOOL CMouseHook::StopHook()  

    BOOL bResult=FALSE; 
    if(glhHook) 

    bResult= UnhookWindowsHookEx(glhHook); 
    if(bResult) 

    glhPrevTarWnd=NULL; 
    glhDisplayWnd=NULL;
    glhHook=NULL; 


    return bResult; 

      

  3.   

    SystemParametersInfo(113,0,(PVOID)Getmousespeed,0);调用后,我用
    SystemParametersInfo(112,0,(PVOID)Getmousespeed,0);
    读出鼠标速度信息后,速度与设定前一样,问题出在那儿?我的OS是WIN2000SERVER