我电脑(XP)中有2个声音输出设备,要如何切换?看到要使用Win API中的waveOutMessage,但是不会具体调用。
解决方案 »
- 对sql 2000数据的文本字段添加数据时,出现错误?
- 数据导出问题!
- 请问ServerSocket的OnAccepte和OnClientConnect有什么区别
- 如何用数字键盘的回车键模拟TAB键?
- 哪有DELPHI6.0的汉化包啊~~~~~~~~~~~~~~~~~
- 请问“网络营销”的搜索原理是什么
- 我的dbcombobox的style属性是dropdown,readonly=false,但为什么不能编辑呢?
- 怎样调用WINDOWS中的画板,并且能打开指定BMP图片用什么语句具体怎么写
- 把几个MenuItem的GroupIndex设为同一值,radioButton设为True,为何,运行时菜单前方是一个小黑圆点,而不是以前我同一设置时的一个具有3D特
- 有关WINSOCK API 函数GetHostName()问题
- 从新安装系统后,quickreport预览和打印出来的字形变了?
- listbox怎么更改某一项item的显示顺序?见图
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem;type
TMainForm = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure GetOutDevices;
procedure GetInDevices;
procedure GetMidiOutDevices;
public
{ Public declarations }
end;var
MainForm: TMainForm;implementation{$R *.dfm}{ TMainForm }const
DRVM_MAPPER = $2000; // mmddk.h #define DRVM_MAPPER 0x2000
DRVM_MAPPER_PREFERRED_GET = DRVM_MAPPER+21; // mmddk.h
DRVM_MAPPER_PREFERRED_SET = DRVM_MAPPER+22; // in einer uralten version von mmddk.hfunction ChangePrimarySndOutDevice(dev: cardinal): integer;
{dev Bereich: 0 bis waveOutGetNumDevs - 1}
begin
result := waveOutMessage(HWAVEOUT(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);
end;function ChangePrimarySndInDevice(dev: cardinal): integer;
{dev Bereich: 0 bis waveInGetNumDevs - 1}
begin
result := waveInMessage(HWAVEIN(WAVE_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);
end;function ChangePrimaryMidiOutDevice(dev : cardinal): integer;
{dev Bereich: 0 bis midiOutGetNumDevs - 1}
begin
result := midiOutMessage(HMIDIOUT(MIDI_MAPPER), DRVM_MAPPER_PREFERRED_SET, dev, 0);
end;procedure TMainForm.Button1Click(Sender: TObject);
begin
if ChangePrimarySndOutDevice(Combobox1.ItemIndex) = MMSYSERR_NOERROR then
begin
GetOutDevices; //Windows setzt immer die primire Karte als 0, daher missen wir die Liste neu holen
MessageDlg('Primares Ausgabegerat wurde erfolgreich geandert', mtInformation, [mbOK], 0);
end else
MessageDlg('Fehler beim Setzen des primaren Ausgabegerates', mtError, [mbOK], 0); if ChangePrimarySndInDevice(Combobox2.ItemIndex) = MMSYSERR_NOERROR then
begin
GetInDevices; //Windows setzt immer die primire Karte als 0, daher missen wir die Liste neu holen
MessageDlg('Primares Aufnahmegerat wurde erfolgreich geandert', mtInformation, [mbOK], 0);
end else
MessageDlg('Fehler beim Setzen des primaren Aufnahmegerites', mtError, [mbOK], 0); if ChangePrimaryMidiOutDevice(Combobox3.ItemIndex) = MMSYSERR_NOERROR then
begin
GetMidiOutDevices; //Windows setzt immer die primare Karte als 0, daher mussen wir die Liste neu holen
MessageDlg('Primares MIDI-Ausgabegert wurde erfolgreich geandert', mtInformation, [mbOK], 0);
end else
MessageDlg('Fehler beim Setzen des primren MIDI-Ausgabegerates', mtError, [mbOK], 0);
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
GetOutDevices;
GetInDevices;
GetMidiOutDevices;
end;procedure TMainForm.GetInDevices;
var
dev: Integer;
caps: TWaveInCaps;
begin
ComboBox2.Clear;
for dev := 0 to waveInGetNumDevs - 1 do
begin
waveInGetDevCaps(dev, @caps, sizeof(TWaveInCaps));
ComboBox2.Items.Add(caps.szPname);
end;
ComboBox2.ItemIndex := 0;
end;procedure TMainForm.GetMidiOutDevices;
var
dev: Integer;
caps: TMidiOutCaps;
begin
ComboBox3.Clear;
for dev := 0 to midiOutGetNumDevs - 1 do
begin
midiOutGetDevCaps(dev, @caps, sizeof(TMidiOutCaps));
ComboBox3.Items.Add(caps.szPname);
end;
ComboBox3.ItemIndex := 0;
end;procedure TMainForm.GetOutDevices;
var
dev: Integer;
caps: TWaveOutCaps;
begin
ComboBox1.Clear;
for dev := 0 to waveOutGetNumDevs - 1 do
begin
waveOutGetDevCaps(dev, @caps, sizeof(TWaveOutCaps));
ComboBox1.Items.Add(caps.szPname);
end;
ComboBox1.ItemIndex := 0;
end;end.