让windows7的蜂鸣器响起来【需要自己增加pcie硬件了。。】

从网上找了一段代码,稍做调整,在win7上调试可以通过:

add备注:由于win7主板修改问题,还是走声卡的。如需要使用,需要自己增加pcie硬件。。。坑啊。。。。

备注:工程属性请选用multi char!

#include <Windows.h>
#include <WinIoCtl.h>
#include   <Stdio.h>  

#define     DeviceName   "\\Device\\Beep"   
#define     SymbolicName   "DosBeep"   


//   copy   from   NT   DDK   
#define   IOCTL_BEEP_SET   CTL_CODE(FILE_DEVICE_BEEP,   0,   METHOD_BUFFERED,   FILE_ANY_ACCESS)   


#define   BEEP_FREQUENCY_MINIMUM   0x25   
#define   BEEP_FREQUENCY_MAXIMUM   0x7FFF   


typedef   struct   _BEEP_SET_PARAMETERS   {   
    ULONG   Frequency;   
    ULONG   Duration;   
}   BEEP_SET_PARAMETERS,   *PBEEP_SET_PARAMETERS;   


int _tmain(int argc, _TCHAR* argv[])
{

 BOOL         bReturn;   
    HANDLE     hBeep;   
    CHAR       szFileName[MAX_PATH];   
    int           iIndex;   
    DWORD       dwReturn;   
    OSVERSIONINFO           ver;       
    BEEP_SET_PARAMETERS   param;   


    ver.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFO);   
    GetVersionEx(&ver);   
    if(ver.dwPlatformId!=VER_PLATFORM_WIN32_NT)   
    {   
        MessageBox(NULL,"This   program   must   run   on   NT!","",MB_OK);   
        return   0;   
    }   


    //   Create   a   symbolic   object   to   beep   device   
    //   so   I   can   access   this   device   in   user   mode.   
    bReturn   =   DefineDosDevice(DDD_RAW_TARGET_PATH,                 SymbolicName,                 DeviceName);   
    if(bReturn==FALSE)   
    {   
        MessageBox(NULL,"DefineDosDevice   Error!","",MB_OK);   
        return   0;   
    }   

    sprintf(szFileName,"\\\\.\\%s",SymbolicName);   

    hBeep   =   CreateFile(szFileName,   
        0,   
        0,   
        NULL,   
        OPEN_EXISTING,   
        FILE_ATTRIBUTE_NORMAL,   
        NULL);   


    if(hBeep==INVALID_HANDLE_VALUE)   
    {   
        MessageBox(NULL,"CreateFile   Error!","",MB_OK);   
        return   0;   
    }   


    for (int i=0; i<100; i++)
    {
        param.Duration   =   100;   
        param.Frequency   =   2500;   
        DeviceIoControl(hBeep,   
            IOCTL_BEEP_SET,   
            (LPVOID)&param,   
            sizeof(BEEP_SET_PARAMETERS),   
            NULL,   
            0,   
            &dwReturn,   
            NULL);   
        Sleep(50);
    }


    for(iIndex=1;iIndex<50;iIndex++)   
    {   
        param.Duration   =   100;   
        param.Frequency   =   2000   +   iIndex*50;   
        //   send   device   io   control   IRP   to   beep   device   
        DeviceIoControl(hBeep,   
            IOCTL_BEEP_SET,   
            (LPVOID)&param,   
            sizeof(BEEP_SET_PARAMETERS),   
            NULL,   
            0,   
            &dwReturn,   
            NULL);   
        //   sleep   
        Sleep(param.Duration);   
    }   


    CloseHandle(hBeep);   
    //   remove   the   symbolic   object   
    DefineDosDevice(DDD_REMOVE_DEFINITION,   
        SymbolicName,   
        DeviceName);   
    return   0;   

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值