一个控制声音的程序(代码如下:)

这是一个C++程序,通过Windows API控制声音。它实现了注册热键以增加、减少和静音音量,以及在任务栏托盘区域显示图标进行操作。程序通过混频器句柄获取声音设备信息,并通过回调函数处理各种消息。
摘要由CSDN通过智能技术生成

#include <windows.h>
#include <stdio.h>
#include "release/resource.h"

#define WM_SETSOUND     WM_USER+1
#define WM_MY_TRAY_NOTIFICATION     WM_USER+2
#define WM_CHOOSEWAY    WM_USER+3

#pragma comment(lib,"winmm.lib")

//回调函数声明
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

//全局函数声明
//BOOL TrayMessage(HWND,DWORD,HICON,PSTR);
BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, PSTR pszTip)
{
 BOOL res;

    NOTIFYICONDATA tnd;

    tnd.cbSize  = sizeof(NOTIFYICONDATA);
    tnd.hWnd  = hWnd;
    tnd.uID   = ID_TRAYICON;
 tnd.uFlags  = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    tnd.uCallbackMessage= WM_MY_TRAY_NOTIFICATION;
    tnd.hIcon  = hIcon;
    lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip));

    res = Shell_NotifyIcon(dwMessage, &tnd);
 return res;
}

//主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
       LPSTR lpcmdLine,int nCmdShow)
{
 
 static TCHAR szAppName[]=TEXT("volume ctrl");
 static TCHAR szClassName[]=TEXT("volume ctrl");
 HWND hwnd;
 MSG msg;
 WNDCLASS wndclass;
 
 wndclass.style=CS_HREDRAW | CS_VREDRAW;
 wndclass.lpfnWndProc=WndProc;
 wndclass.cbClsExtra=0;
 wndclass.cbWndExtra=0;
 wndclass.hInstance=hInstance;
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 wndclass.lpszMenuName=NULL;
 wndclass.lpszClassName=szClassName;
 
 if(!RegisterClass(&wndclass))
 {
  MessageBox(NULL,"Register WNDCLASS FAILTURE!",szAppName,MB_ICONERROR);
  return FALSE;
 }
 
 hwnd=CreateWindow(szClassName,"VOLUME CTRL",
  WS_OVERLAPPEDWINDOW ,CW_USEDEFAULT,CW_USEDEFAULT,
  CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
 
 //下两句取消可使窗口最开始时就不可见
 //ShowWindow(hwnd,nCmdShow);
 //UpdateWindow(hwnd);
 
 while(GetMessage(&msg,NULL,0,0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 
 return msg.wParam;
}


//回调函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 //变量声明
 static HINSTANCE hInstance;
    static HMIXER hMixer;       //混频器句柄
 static HMIXER hMixerWave;   //WAVEOUT句柄
    static DWORD m_controlnum;  //用于保存声道数
 static DWORD m_controlid;   //声道的ID
 static LONG m_min;  //声音最小值
 static LONG m_max;   //声音最大值
 static LONG vr,vl;       //左右声道
 static HICON hIcon;
 static HKEY hKey;
 static bChMenu=FALSE,bWave=FALSE,bNoVoilce=FALSE;
 static iChCtrl=0;
 LPTSTR lpBuffer=NULL;
 DWORD dwRegAttr;

 char test[20];

 switch(message)
 {
 case WM_CREATE:
  hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值