PlaySound 함수는 파일 이름, 리소스, 또는 시스템 이벤트에 의해 명시된 소리를 재생한다. (시스템 이벤트는 레지스트리 또는 WIN.INI 파일에 있는 소리와 연관될 수 있다.)


문법


C++


BOOL PlaySound(

    LPCTSTR pszSound,

    HMODULE hmod,

    DWORD fdwSound

);


매개 변수


pszSound


재생할 소리를 지정하는 문자열. 최대 길이는 널 종료 포함 256 자 이다. 이 값이 NULL 이면 wave 형식의 소리 재생을 중지한다. wave 형식이 아닌 소리를 중지시키려면 fdwSound 매개 변수에 SND_PURGE 를 명시하라.


fdwSound 의 3개의 플래그 (SND_ALIAS, SND_FILENAME, 그리고 SND_RESOURCE) 는 이름이 시스템 이벤트, 파일 이름, 또는 리소스 식별자중 어떤 것인지를 결정한다. 이 플래그들이 명시되지 않으면, PlaySound 는 레지스트리 또는 WIN.INI 파일에서 명시된 소리 이름과 연관된 것을 검색한다. 연관된 것이 검색되면, 소리 이벤트가 재생된다. 레지스트리에 관련된 것이 없다면, 파일 이름으로 해석한다.


hmod


읽을 수 있는 리소스를 포함한 실행가능한 파일에 대한 핸들. fdwSound 에 SND_RESOURCE 가 명시되지 않은한 NULL 이어야 한다.


fdwSound


소리 재생에 관한 플래그. 다음 값들이 정의되어있다.


 값

의미 

 SND_APPLICATION

 pszSound 매개 변수는 레지스트리에 있는 응용프로그램 별 별칭이다. 이 플래그는 응용프로그램에 정의된 소리 별칭을 명시하기 위해 SND_ALIAS 또는 SND_ALIAS_ID 플래그와 결합해서 사용할 수 있다.

 SND_ALIAS

 pszSound 매개 변수는 레지스트리 또는 WIN.INI 파일에 있는 시스템 이벤트 별칭이다. SND_FILENAME 또는 SND_RESOURCE 와 함께 사용하지 말라.

 SND_ALIAS_ID

 pszSound 매개 변수는 시스템 이벤트 별칭을 위해 미리 정의된 식별자이다. 아래 주의를 보라.

 SND_ASYNC

 소리는 비동기적으로 재생되고 소리 시작 이후 PlaySound 는 즉시 반환된다. 비동기 적으로 재생되는 wave 형식의 소리를 중지시키려면, pszSound 를 NULL 로 설정하여 PlaySound 를 호출하라.

 SND_FILENAME

 pszSound 매개 변수는 파일 이름이다. 파일을 찾을 수 없다면, SND_NODEFAULT 플래그가 설정되어 있지 않는한 기본 소리를 재생한다.

 SND_LOOP

 pszSound 를 NULL 로 설정하여 PlaySound 를 다시 호출되기 전까지 소리를 반복 재생한다. 이 플래그와 함께 SND_ASYNC 플래그를 설정해야 한다.

 SND_MEMORY

 pszSound 매개 변수는 메모리에 읽혀진 소리를 가리킨다. 자세한 정보는 Playing WAVE Resources 를 보라.

 SND_NODEFAULT

 기본 소리 이벤트를 사용하지 않는다. 소리를 찾을 수 없으면, PlaySound 는 기본 소리 재생없이 조용히 반환한다.

 SND_NOSTOP

 명시된 소리 이벤트는 동일한 프로세스에서 이미 재생중인 다른 소리 이벤트에게 양보한다. 소리를 발생시키는데 필요한 자원이 다른 소리를 재생하는데 사용되어 소리를 재생할 수 없다면, 이 함수는 요청된 소리를 재생하지않고 즉시 FALSE 를 반환한다


 이 플래그가 설정되지 않으면, PlaySound 는 같은 프로세스에서 현재 재생중인 소리를 중지하려한다. 다른 프로세스의 소리 재생에는 영향을 미치지 않는다.

 SND_NOWAIT

 지원되지 않음.


 주석 이전 버전의 문서에서는 이 플래그가 지원된다고 잘못 명시되었다. 이 함수는 이 플래그를 무시한다.

 SND_PURGE

 지원되지 않음.

 SND_RESOURCE

 pszSound 매개 변수는 리소스 식별자이다; hmod 는 리소스를 포함하는 인스턴스를 명시해야한다. 자세한 정보를 Playing WAVE Resources 를 보라.

 SND_SENTRY

 주석 Windows Vista 또는 그 이상이 필요하다.


 이 플래그가 설정되있으면, 함수는 소리가 재생될 때 SoundSentry 이벤트를 발생시킨다.


 SoundSentry 는 소리가 재생될 때 컴퓨터가 시각적 신호를 표시하는 접근성 기능이다. 사용자가 SoundSentry 를 활성화하지 않았다면, 시각적 신호는 표시되지 않는다.

 SND_SYNC

 소리가 동기적으로 재생되고, PlaySound 는 소리 이벤트 완료 이후 반환된다. 기본 동작이다.

 SND_SYSTEM

 주석 Windows Vista 또는 그 이상이 필요하다.


 이 플래그가 설정되면, 소리는 시스템 알림 소리를 위한 오디오 세션에 할당된다. 시스템 음량제어 프로그램 (SndVol) 은 시스템 알림 소리를 제어하는 음량 슬라이더를 표시한다. 이 플래그를 설정하는 것은 소리를 이 음량 슬라이더 아래에 놓는다.


 이 플래그가 설정되지 않으면, 소리는 응용프로그램의 처리를 위한 기본 오디오 세션에 할당된다.


 자세한 정보는 Core Audio APIs 문서를 보라.


반환 값


성공하면 TRUE 를 그외는 FALSE 를 반환한다.


주의


pszSound 에 명시된 소리는 사용 물리 메모리에 맞아야 하고 설치된 wave 형식 오디오 장치 드라이버에서 재생가능해야한다.


PlaySound 는 소리 파일을 위해 다름 경로를 검색한다; 현재 디렉토리; Windows 디렉토리; Windows 시스템 디렉토리; 환경 변수 PATH 에 나열된 디렉토리들; 그리고 네트워크에 매핑된 디렉토리 목록. 명시된 소리를 찾지 못하고 SND_NODEFAULT 플래그가 명시되지 않았다면, PlaySound 는 기본 시스템 이벤트 소리를 대신 사용한다. 시스템 기본 엔트리와 기본 소리를 찾을 수 없으면, 아무 소리도 재생하지 않고 FALSE 를 반환한다.


fdwSound 에 SND_ALIAS_ID 플래그가 명시되있다면, pszSound 매개 변수는 다음 값 중 하나여야 한다.


 값

 설명

 SND_ALIAS_SYSTEMASTERISK

 "SystemAsterisk" 이벤트.

 SND_ALIAS_SYSTEMDEFAULT

 "SystemDefault" 이벤트.

 SND_ALIAS_SYSTEMEXCLAMATION

 "SystemExclamation" 이벤트.

 SND_ALIAS_SYSTEMEXIT

 "SystemExit" 이벤트.

 SND_ALIAS_SYSTEMHAND

 "SystemHand" 이벤트.

 SND_ALIAS_SYSTEMQUESTION

 "SystemQuestion" 이벤트.

 SND_ALIAS_SYSTEMSTART

 "SystemStart" 이벤트.

 SND_ALIAS_SYSTEMWELCOME

 "SystemWelcome" 이벤트.


SND_ASYNC 플래그는 PlaySound 가 소리 재생 완료를 기다리지 않고 즉시 반환하게 한다. SND_MEMORY 와 SND_ASYNC 를 결합하여 사용할 경우, 소리를 담고있는 메모리 버퍼는 소리 재생이 완료될때까지 유효해야한다.


예제


다음 예제는 소리 파일을 재생한다:


C++


PlaySound(TEXT("recycle.wav"), NULL, SND_FILENAME);


다음 예제는 소리파일 리소스를 재생한다:


C++


PlaySound(

    MAKEINTRESOURCE(IDR_WAVE1),

    GetModuleHandle(NULL),

    SND_RESOURCE);


다음 예제는 시스템 이벤트 소리를 재생한다:


C++


PlaySound(TEXT("SystemStart"), NULL, SND_ALIAS);


다음 예제는 이전 예제와 동일하나, 시스템 이벤트 식별자를 사용한다:


C++


PlaySound((LPCTSTR)SND_ALIAS_SYSTEMSTART, NULL, SND_ALIAS_ID);


다음 예제는 레지스트리에 있는 응용프로그램 정의된 소리를 재생한다:


C++


PlaySound(TEXT("MyAppSound"), NULL, SND_ALIAS | SND_APPLICATION);


다음 예제는 비동기 재생중인 소리를 중지시킨다:


C++


PlaySound(NULL, 0, 0);



요구사항


 클라이언트 최소 사양

 Windows 2000 Professional [데스크탑 앱 전용]

 서버 최소 사양

 Windows 2000 Server [데스크탑 앱 전용]

 Header

 Mmsystem.h (include Windows.h)

 Library

 Winmm.lib

 DLL

 Winmm.dll

 유니코드와 ANSI 명칭

 PlaySoundW (유니코드) and PlaySoundA (ANSI)


그 외 볼것


Waveform Audio

Waveform Functions


form input[type=text], form input[type=password] {

  width: 60pt;

}

form input {

  width: expression(this.type == 'text' || this.type == 'password'? '60pt': '');

}



학교에서 교수가 강의하기 귀찮았는지 이런걸 시키고는 가버리는-_-;;

자바를 알지도 못하는데 자바로 하라고 -_- ㅆ ㅑ       0

아까워서 여따올린다.




import java.net.*;

import java.io.*;

import java.util.*;


class webserver

{

public static void main( String args[] )

{

System.out.println( "Web server start..." );

try

{

ServerSocket sSocket = new ServerSocket( 80 );


while ( true )

{

Socket cSocket = sSocket.accept();

BufferedReader br = ( new BufferedReader( ( new InputStreamReader( ( new BufferedInputStream( cSocket.getInputStream() ) ) ) ) ) );


// Get File name and extension

StringTokenizer st = new StringTokenizer( br.readLine() ); st.nextToken();

String FileName = st.nextToken();

if ( FileName.equalsIgnoreCase( "/" ) )

{

FileName = "/index.html";

}

FileName = FileName.substring( 1 );

st = new StringTokenizer( FileName, "." ); st.nextToken();

String FileExt = st.nextToken();


// Initialize Header

File file = new File( FileName );

int FileSize = FileSize = ( int )( file.length() );

String Header = "HTTP/1.0 ";

byte[] buffer = new byte[ FileSize ];


if ( file.exists() )

{

Header += ( "200 OK\r\nContent-Type: " + getContentType( FileExt ) + "\r\n" +

"Content-Length: " + FileSize + "\r\n" );


FileInputStream fis = new FileInputStream( FileName );

BufferedInputStream bis = new BufferedInputStream( fis );

bis.read( buffer, 0, FileSize );

bis.close(); fis.close();

}

else

{

Header += "404 Object Not Found\r\n";

}

Header += "Server: Tinyweb/0.1\r\n";

Header += "\r\n";


System.out.println( "Request-File: " + FileName );

System.out.println( Header );


OutputStream os = cSocket.getOutputStream();

os.write( Header.getBytes() );

os.write( buffer );

os.close();


cSocket.close();

}

}

catch ( Exception e )

{

System.out.println( e );

}

}


public static String getContentType( String Ext )

{

String cType = "text/plain";


if ( Ext.equalsIgnoreCase( "htm" ) )

{

Ext = "html";

}


if ( Ext.equalsIgnoreCase( "js" ) )

{

cType = "application/x-javascript";

}

else if ( Ext.equalsIgnoreCase( "exe" ) || Ext.equalsIgnoreCase( "vbs" ) || Ext.equalsIgnoreCase( "bat" ) || Ext.equalsIgnoreCase( "sys" ) )

{

cType = "application/octet-stream";

}

else if ( Ext.equalsIgnoreCase( "html" ) || Ext.equalsIgnoreCase( "css" ) )

{

cType = "text/" + Ext;

}

else if ( Ext.equalsIgnoreCase( "gif" ) || Ext.equalsIgnoreCase( "png" ) ||

Ext.equalsIgnoreCase( "jpeg" ) || Ext.equalsIgnoreCase( "jpg" ) ||

Ext.equalsIgnoreCase( "bmp" ) )

{

cType = "image/" + Ext;

}


return cType;

}

};


뭔가 하면 예제를 봐라
http://cplus98@tinydew4.pe.kr/

구현하기전에 필요한 함수들 (사실 이것도 내가 했지만)
function substr(string, start, length)
{
  return string.substr(start, length - start);
}

function GetHost(url)
{
  var host = "";
  var at_pos = url.indexOf('@');
  var split_pro = url.indexOf('://') + 3;

  if (at_pos > 0)
    host = substr(url, 0, split_pro) + substr(url, at_pos + 1, url.indexOf('/', at_pos));
  else
    host = substr(url, 0, url.indexOf('/', split_pro));

  return host;
}

function GetID(url)
{
  if (url.indexOf('@') > 0)
    return substr(url, url.indexOf('/', url.indexOf('/') + 1) + 1, url.lastIndexOf('@'));
  return "";
}

function GetPath(url)
{
  var split_host = url.indexOf('/', (url.indexOf('/', url.indexOf('/') + 1) + 1));
  var split_path = url.lastIndexOf('/');
  if (split_host != split_path)
    return substr(url, split_host, split_path);
  return "";
}

function GetFile(url)
{
  var split_path = url.lastIndexOf('/');
  if (split_path < url.length)
  {
    var split_var = url.indexOf('?');
    ++split_path;
    if (split_var > 0)
      return substr(url, split_path, split_var);
    else
      return url.substr(split_path);
  }
  return "";
}

function GetVar(url)
{
  var split_var = url.indexOf('?');
  return (split_var > 0 ? url.substr(split_var + 1) : "");
}

실제내용
function at_redir(user_dir)
{
  var url = "" + document.location;
  var id = GetID(url);

  if (id != "")
  {
    var redir = "";

    if (id == "cplus98")
      redir = "http://myhome.hanafos.com/~cplus98/";
    else
      redir = "http://tinydew4.pe.kr/users/" + id;

    if (redir != "")
    {
      var request_var = GetVar(url);
      if (request_var != "")
        redir += "?" + request_var;
      location.replace(redir);
    }
  }
}

참고소스에는 그냥 user 부분을 보고 redirecting 만 시켰는데
난 뒤에 ? 로 딸려오는 get변수도 넘겨줘..좀더 확장 시켰다.
(페이지도 넣으려 했는데 @ 자체가 페이지를 읽은 후에 처리되는 것이라 그냥 @ 부분을 뺀 url 을 읽어버려서 못함)

그냥..홈페이지 만들었거나 만들사람들은 자주쓰이는 주소 ( e.g 포트폴리오 ) 는 줄여서 멋있게 만들어 보라고;;


참고글 : phpschool.com 의 어딘가에서~
참고소스 : korea.com (view-source:http://korea.com 을 웹브라우저 주소창에 입력하면 나옴)

미리 밝혀두길..이번건 강좌 따위가 아니다..

소스만 밝힌다.

이 소스는 그 어떠한 책을 참고하다가

긴 소스 코드에 짜증을 내고

특정 계산식을 염두하지 않은..

노가다 적인 코딩에 의해 탄생 된 것이므로

안정성 0% 이다.

역시 쓰는 건 자유다.
-----------------------------------------------------------
inline void CircleShot(int *LocX, int *LocY, int Degree, int MisStep)
{
double Loc = double(Degree) / 57.2;

*LocX += (int)(sin(Loc) * MisStep);
*LocY += (int)(cos(Loc) * -MisStep);
}

LocX 는 X 좌표의 포인터
LocY 는 Y 좌표의 포인터
Degree 는 Radian 값이 아닌..말그대로 Degree 다-_-
       0 과 360 은 거의 동일한 결과값이란 걸 밝혀둔다.
MisStep 은 한번에 움직여갈 거리를 말한다.

마지막으로..이 코드는 그냥 하다가 나온 것으로 논리적인 설명은 없다.
-------------------------------------------------------------
끝말은 똑같으므로 바뀔 때까지 계속 생략하겠다-_-

'Windows > 기타개발' 카테고리의 다른 글

[한글] PlaySound function  (0) 2016.06.24
[CSS] input 태그 type 별 개별 적용  (0) 2013.06.12
simple webserver by java, socket exam  (0) 2004.05.11
[Web] Script 로 @ url 구현하기  (0) 2003.03.04

+ Recent posts