📄 vc常用源码.htm
字号:
volumestep;//步长<BR>//加入消息映射函数<BR>ON_MESSAGE(MM_MIXM_CONTROL_CHANGE,
OnMixerCtrlChange)<BR>//当系统音量改变时调用此函数<BR>LONG OnMixerCtrlChange(UINT
wParam, LONG lParam)<BR>{<BR>//响应控件音量改变的消息,然后获得当前音量并设置滚动条 <BR>if
((HMIXER)wParam == m_hMixer && (DWORD)lParam ==
m_dwVolumeControlID)<BR>{<BR>amdGetMasterVolumeValue(nowvolume);<BR>multiple=nowvolume;<BR>double
percent;<BR>}<BR>if ((HMIXER)wParam == m_hMixer && (DWORD)lParam
==
m_dwMuteControlID)<BR>{<BR>amdGetMasterMuteValue(muteornot);<BR>}<BR>return
0L;<BR>}<BR>//在Init函数中加入<BR>if
(amdInitialize())<BR>{<BR>//获得音量控制控件的ID和名称<BR>amdGetMasterVolumeControl();<BR>//
获得当前音量值,并设置滚动条的初始位置<BR>amdGetMasterVolumeValue(nowvolume);<BR>amdGetMasterMuteValue(muteornot);<BR>multiple=nowvolume;<BR>difference=(long)(m_dwMaximum-m_dwMinimum);<BR>}<BR>//函数<BR>BOOL
amdInitialize()//初始化<BR>{<BR>//获取当前混合设备数量 <BR>m_nNumMixers =
::mixerGetNumDevs();<BR>m_hMixer = NULL;<BR>::ZeroMemory(&m_mxcaps,
sizeof(MIXERCAPS));<BR>if (m_nNumMixers != 0)<BR>{<BR>//打开混合设备<BR>if
(::mixerOpen(&m_hMixer,<BR>0,<BR>(DWORD)this->GetSafeHwnd(),<BR>NULL,<BR>MIXER_OBJECTF_MIXER
| CALLBACK_WINDOW)<BR>!= MMSYSERR_NOERROR)<BR>return FALSE;</FONT></P>
<P><FONT color=#006633 size=2>// 获取混合器性能 <BR>if
(::mixerGetDevCaps((UINT)m_hMixer, &m_mxcaps, sizeof(MIXERCAPS))<BR>!=
MMSYSERR_NOERROR)<BR>return FALSE;<BR>}<BR>return TRUE;<BR>}<BR>BOOL
amdGetMasterVolumeControl()//获得音量控制控件的ID和名称<BR>{<BR>m_strDstLineName.Empty();<BR>m_strVolumeControlName.Empty();<BR>if
(m_hMixer == NULL)<BR>return FALSE;<BR>//获得混合器性能<BR>MIXERLINE
mxl;<BR>mxl.cbStruct = sizeof(MIXERLINE);<BR>mxl.dwComponentType =
MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;<BR>if
(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,<BR>&mxl,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_GETLINEINFOF_COMPONENTTYPE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>MIXERCONTROL mxc;<BR>MIXERLINECONTROLS mxlc;<BR>mxlc.cbStruct =
sizeof(MIXERLINECONTROLS);<BR>mxlc.dwLineID =
mxl.dwLineID;<BR>mxlc.dwControlType =
MIXERCONTROL_CONTROLTYPE_VOLUME;//此值表示取得音量<BR>mxlc.cControls =
1;<BR>mxlc.cbmxctrl = sizeof(MIXERCONTROL);<BR>mxlc.pamxctrl =
&mxc;<BR>//获得混合器线控件<BR>if
(::mixerGetLineControls((HMIXEROBJ)m_hMixer,<BR>&mxlc,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_GETLINECONTROLSF_ONEBYTYPE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>//记录控件的信息<BR>m_strDstLineName =
mxl.szName;<BR>m_strVolumeControlName = mxc.szName;<BR>m_dwMinimum =
mxc.Bounds.dwMinimum;<BR>m_dwMaximum =
mxc.Bounds.dwMaximum;<BR>m_dwVolumeControlID =
mxc.dwControlID;<BR>mxlc.dwControlType =
MIXERCONTROL_CONTROLTYPE_MUTE;//此值表示取得静音与否<BR>if
(::mixerGetLineControls((HMIXEROBJ)m_hMixer,<BR>&mxlc,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_GETLINECONTROLSF_ONEBYTYPE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>m_dwMuteControlID = mxc.dwControlID;<BR>return
TRUE;<BR>}<BR>BOOL amdGetMasterVolumeValue(DWORD &dwVal)//
获得当前音量值,并设置滚动条的初始位置<BR>{<BR>if (m_hMixer == NULL
||<BR>m_strDstLineName.IsEmpty() ||
m_strVolumeControlName.IsEmpty())<BR>return
FALSE;<BR>MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;<BR>MIXERCONTROLDETAILS
mxcd;<BR>mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);<BR>mxcd.dwControlID
= m_dwVolumeControlID;<BR>mxcd.cChannels = 1;<BR>mxcd.cMultipleItems =
0;<BR>mxcd.cbDetails =
sizeof(MIXERCONTROLDETAILS_UNSIGNED);<BR>mxcd.paDetails =
&mxcdVolume;<BR>//获取指定混合器控件 <BR>if
(::mixerGetControlDetails((HMIXEROBJ)m_hMixer,<BR>&mxcd,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_GETCONTROLDETAILSF_VALUE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>dwVal = mxcdVolume.dwValue;<BR>return TRUE;<BR>}<BR>BOOL
amdGetMasterMuteValue(BOOL &yorn)//是否静音<BR>{<BR>if (m_hMixer == NULL
||<BR>m_strDstLineName.IsEmpty() ||
m_strVolumeControlName.IsEmpty())<BR>return
FALSE;<BR>MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;<BR>MIXERCONTROLDETAILS
mxcd;<BR>mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);<BR>mxcd.dwControlID
= m_dwMuteControlID;<BR>mxcd.cChannels = 1;<BR>mxcd.cMultipleItems =
0;<BR>mxcd.cbDetails =
sizeof(MIXERCONTROLDETAILS_UNSIGNED);<BR>mxcd.paDetails =
&mxcdVolume;<BR>//获取指定混合器控件 <BR>if
(::mixerGetControlDetails((HMIXEROBJ)m_hMixer,<BR>&mxcd,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_GETCONTROLDETAILSF_VALUE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>yorn = mxcdVolume.dwValue;<BR>return TRUE;<BR>}<BR>BOOL
amdSetMasterMuteValue(BOOL &yorn)//设置静音与否<BR>{<BR>if (m_hMixer == NULL
||<BR>m_strDstLineName.IsEmpty() ||
m_strVolumeControlName.IsEmpty())<BR>return
FALSE;<BR>MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { yorn
};<BR>MIXERCONTROLDETAILS mxcd;<BR>mxcd.cbStruct =
sizeof(MIXERCONTROLDETAILS);<BR>mxcd.dwControlID =
m_dwMuteControlID;<BR>mxcd.cChannels = 1;<BR>mxcd.cMultipleItems =
0;<BR>mxcd.cbDetails =
sizeof(MIXERCONTROLDETAILS_UNSIGNED);<BR>mxcd.paDetails =
&mxcdVolume;<BR>//放置混合器控件 <BR>if
(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,<BR>&mxcd,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_SETCONTROLDETAILSF_VALUE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>return TRUE;<BR>}<BR>BOOL amdSetMasterVolumeValue(DWORD
dwVal)//设置音量<BR>{<BR>if (m_hMixer == NULL ||<BR>m_strDstLineName.IsEmpty()
|| m_strVolumeControlName.IsEmpty())<BR>return
FALSE;<BR>MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal
};<BR>MIXERCONTROLDETAILS mxcd;<BR>mxcd.cbStruct =
sizeof(MIXERCONTROLDETAILS);<BR>mxcd.dwControlID =
m_dwVolumeControlID;<BR>mxcd.cChannels = 1;<BR>mxcd.cMultipleItems =
0;<BR>mxcd.cbDetails =
sizeof(MIXERCONTROLDETAILS_UNSIGNED);<BR>mxcd.paDetails =
&mxcdVolume;<BR>//放置混合器控件 <BR>if
(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,<BR>&mxcd,<BR>MIXER_OBJECTF_HMIXER
|<BR>MIXER_SETCONTROLDETAILSF_VALUE)<BR>!= MMSYSERR_NOERROR)<BR>return
FALSE;<BR>return TRUE;<BR>}<BR>BOOL amdUninitialize()//关闭<BR>{<BR>BOOL
bSucc = TRUE;<BR>if (m_hMixer != NULL)<BR>{ <BR>//关闭混合器<BR>bSucc =
::mixerClose(m_hMixer) == MMSYSERR_NOERROR;<BR>m_hMixer =
NULL;<BR>}<BR>return bSucc;<BR>}<BR>//在OnDestroy()
中加入<BR>amdUninitialize();</FONT></P>
<P><FONT color=#006633
size=2>//编辑注册表*******************************************************</FONT></P>
<P><FONT color=#006633 size=2>DWORD disp,valuelength=260;<BR>HKEY
parentkey;<BR>HKEY childkey;<BR>char
filepath[MAX_PATH];<BR>//打开主键<BR>RegOpenKeyEx(HKEY_LOCAL_MACHINE,"software\\microsoft\\windows\\currentversion\\run",//注册启动信息<BR>0L,KEY_WRITE,&parentkey);</FONT></P>
<P><FONT color=#006633
size=2>//查询键值<BR>RegQueryValueEx(parentkey,"Windows秘书",0,NULL,(unsigned
char
*)filepath,&valuelength);<BR>//写入键值<BR>RegSetValueEx(parentkey,"Windows秘书",0,REG_SZ,(const
unsigned char
*)filepath,strlen(filepath));<BR>//删除键值<BR>RegDeleteValue(parentkey,"Windows秘书");<BR>//关闭<BR>RegCloseKey(parentkey);<BR>//建立子键<BR>RegOpenKeyEx(HKEY_LOCAL_MACHINE,"software",<BR>0L,KEY_WRITE,&parentkey);//打开主键<BR>RegCreateKeyEx(parentkey,"宇光软件",NULL,"CWindowsDlg",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,<BR>NULL,&childkey,&disp);//把子键保存在childkey中<BR>RegCloseKey(parentkey);<BR>//在子键中写入子键值<BR>RegSetValueEx(childkey,"Windows秘书",0,REG_SZ,(const
unsigned char
*)filepath,strlen(filepath));<BR>RegCloseKey(childkey);</FONT></P>
<P><FONT color=#006633
size=2>//创建桌面快捷图标和创建开始菜单组****************************************************</FONT></P>
<P><FONT color=#006633 size=2>//初始化<BR>CoInitialize
(NULL);<BR>//建立桌面快捷图标函数<BR>void CreateDesttop(char
*filepath)<BR>{<BR>strcat(filepath,"\\Windows秘书.exe");<BR>LPITEMIDLIST
pidlBeginAt;<BR>char szLink[MAX_PATH]="";//快捷方式的数据文件名 <BR>//
取得桌面的PIDL<BR>SHGetSpecialFolderLocation( HWND_DESKTOP,
<BR>CSIDL_DESKTOPDIRECTORY, &pidlBeginAt) ;<BR>//
把PIDL转换为路径名<BR>SHGetPathFromIDList( pidlBeginAt, szLink)
;<BR>strcat(szLink,"\\Windows秘书.lnk");<BR>IShellLink * psl
;<BR>IPersistFile* ppf ;<BR>WORD wsz[ MAX_PATH]
;<BR>//创建一个IShellLink实例<BR>CoCreateInstance( CLSID_ShellLink,
NULL,<BR>CLSCTX_INPROC_SERVER, IID_IShellLink,<BR>(void **)&psl)
;<BR>//设置目标应用程序<BR>psl -> SetPath( filepath)
;<BR>//设置快捷键(此处设为Shift+Ctrl+'R')<BR>psl -> SetHotkey( MAKEWORD(
'Q',<BR>HOTKEYF_SHIFT |HOTKEYF_CONTROL|HOTKEYF_ALT))
;<BR>//从IShellLink获取其IPersistFile接口<BR>//用于保存快捷方式的数据文件 (*.lnk)<BR>psl
-> QueryInterface( IID_IPersistFile,<BR>(void**)&ppf) ;<BR>//
确保数据文件名为ANSI格式<BR>MultiByteToWideChar( CP_ACP, 0, szLink, -1, <BR>wsz,
MAX_PATH) ;<BR>//调用IPersistFile::Save<BR>//保存快捷方式的数据文件 (*.lnk)<BR>ppf
-> Save( wsz, STGM_READWRITE) ;<BR>//释放IPersistFile和IShellLink接口<BR>ppf
-> Release( ) ;<BR>psl -> Release( ) ;</FONT></P>
<P><FONT color=#006633 size=2>SHChangeNotify(
SHCNE_CREATE|SHCNE_INTERRUPT,<BR>SHCNF_FLUSH |
SHCNF_PATH,<BR>szLink,0);<BR>//取得szPath的父目录<BR>char* p;<BR>for(
p=szLink+lstrlen(szLink)-1;<BR>*p != '\\';
<BR>p--);<BR>*p='\0';<BR>SHChangeNotify(SHCNE_UPDATEDIR<BR>|SHCNE_INTERRUPT,
<BR>SHCNF_FLUSH | SHCNF_PATH,szLink,0);<BR>}<BR>//创建开始菜单组的函数<BR>void
CWindowsDlg::CreateStarMenu(char *filepath)<BR>{<BR>LPITEMIDLIST
pidlBeginAt;<BR>char szPath[ MAX_PATH] ;<BR>//
取得开始菜单的PIDL<BR>SHGetSpecialFolderLocation( HWND_DESKTOP,
//<BR>CSIDL_STARTMENU, &pidlBeginAt) ;<BR>SHGetPathFromIDList(
pidlBeginAt, szPath) ;// 把PIDL转换为路径名<BR>strcat(szPath,"\\宇光软件");<BR>if(
!CreateDirectory( szPath, NULL))return ;<BR>SHChangeNotify(
SHCNE_MKDIR|SHCNE_INTERRUPT,<BR>SHCNF_FLUSH |
SHCNF_PATH,<BR>szPath,0);<BR>//取得szPath的父目录<BR>char* p;<BR>for(
p=szPath+lstrlen(szPath)-1;<BR>*p != '\\';
<BR>p--);<BR>*p='\0';<BR>SHChangeNotify(SHCNE_UPDATEDIR<BR>|SHCNE_INTERRUPT,
<BR>SHCNF_FLUSH |
SHCNF_PATH,szPath,0);<BR>strcat(filepath,"\\Windows秘书.exe");<BR>strcat(szPath,"\\宇光软件\\Windows秘书.lnk");<BR>IShellLink
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -