16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"もう一つのBeep音の再生方法"
この発言に対し以下のコメントが寄せられています
#01424 いさやん さん RE:もう一つのBeep音の再生方法
Windows.Beep や Windows.MessageBeep を使用しないもう一つの
Beep音再生方法です。
おそらく確実に再生することが可能です。
function Beep2(nCnt: Integer):Boolean; //成功or失敗
var
FTempF:TFileStream;//キー入力ファイル
fSuccess:Boolean; //CreateProccessが成功したかどうか
si:TSTARTUPINFO;
pi:TPROCESSINFORMATION;
szCommandPath:string;
szSystemPath,szPath,szBuff:array [0..255] of Char;
begin
Result := False;
//TSTARTUPINFOの初期化
FillChar(si,SizeOf(si),0);
si.cb := SizeOf(TSTARTUPINFO);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
if IsWindowsNT() then
begin //NTなら....
GetSystemDirectory(szSystemPath,SizeOf(szSystemPath));
szCommandPath := StrPas(szSystemPath)+'\CMD.EXE';
end else
begin //NTでないなら....
GetWindowsDirectory(szSystemPath,SizeOf(szSystemPath));
szCommandPath := StrPas(szSystemPath)+'\COMMAND.COM';
end;
//コマンドラインの作成
StrPCopy(szBuff, Format('%s /c echo %s',[szCommandPath, StringOfChar(#7, nCnt
)]));
try
fSuccess := CreateProcess(nil,szBuff,nil,nil,True,0,nil,nil,si,pi);
if not fSuccess then Exit; //失敗したらExit
while WaitForSingleObject(pi.hProcess,0) = WAIT_TIMEOUT do
Application.ProcessMessages; //終了するまで待つ
finally
//コンソールの破棄
if Boolean(pi.hThread) then CloseHandle(pi.hThread);
if Boolean(pi.hProcess) then CloseHandle(pi.hProcess);
end;
Result := True;
end;
例)
procedure TForm1.Button1Click(Sender: TObject);
begin
Beep2(1);
end;
みてわかると思いますがECHO コマンドを利用してます。
まぁこんな方法もあるってことで^^;
作成にあたり、十兵衛さんのFormatCom
nifty:FDELPHI/mes/16/00558
を参考にしました。感謝_(._.)_
@ノ" いさやん
~~~~~
Original document by いさやん 氏 ID:(YIB02642)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|