윈도우 비스타에서의 볼륨 컨트롤

2009. 10. 13. 04:03

  나의 윈 폼 어플리케이션 처녀작인 Laptop Guard를 만든지도 어언 1년이 다 다되었다. 이 작품 덕에 삼성 소프트웨어 멤버십이라는 멋진 곳에 모자란 내가 들어갈 수도 있었고, 프로그래밍에 깊은 재미를 느낄 수 있었던 것 같다.

 

  작년 학교 축제기간의 우리과 소프트웨어 전시회 때에는 아직 Laptop Guard가 미구현 된 점도 많고, 내가 그런 전시회에 작품을 냈다가 망신만 당하는 것은 아닐까 하는 생각에 참여를 못했었는데, 올해 작품 전시회에 이 작품을 전시하게 되었다.

  1년간 한 쪽 구석에 처박아뒀기에 아직 잘 돌아가나 테스트를 해보니. 아뿔사. XP환경에서 개발했었는데, 지금 내가 사용중인 OS는 비스타이다.

 

 

  코드 프로젝트에서 구해서 이용했던 WaveLibMixer.dll 이 XP환경에서만 오디오 볼륨 조절이 가능했던 것이다.


http://www.codeproject.com/KB/audio-video/AudioLib.aspx?display=PrintAll&fid=217323&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=2685226


Comment를 보니 나처럼 이 프로젝트가 비스타에서 작동하지 않음을 호소하는 글들이 몇 개 눈에 들어왔고, 윈도우 비스타와 XP는 사운드 시스템 체계가 다르다는 것 또한 알 수 있었다.

 

결국 비스타에서 오디오 조절 방법을 찾다가 코드 프로젝트에서 CoreAudioApi 프로젝트를 찾았다. 시스템에서의 오디오장치를 이용하는 MMDevice API와 볼륨, 피크미터에 접근이 가능한 EndPointVolume API를 이용한 방법이었다.


http://www.codeproject.com/KB/vista/CoreAudio.aspx?display=PrintAll


프로젝트를 다운 받아 분석하고 바로 Laptop Guard에 적용시켰다. 이 전과 다른 점이라면 이전에는 볼륨이 0~65535까지 였는데, 이번엔 0.0~1.0 까지로 볼륨 크기를 나누었다는 것 정도.

 

  1년 만에 내 코드를 다시 보니 부끄럽다. 손이 가는대로 막코딩하다보니 코드도 너저분하고, 쓸데없는 변수들의 남용들, 비효율적인 구조… 으하하하.

 

  새로 컴파일 하고 실행해보니 잘 비스타에서 잘 작동한다.

휴.. 다음에 여유가 생기면 새로 설계 후 다시 깔끔하게, 배포할 수 있을 정도로 만들어봐야겠다. 아직은 도서관 등에서 사용하기에는 너무 치명적인 버그들이 존재하기에 ㅋㅋㅋ

박상근 프로그래밍/Laptop Guard

삼성 SENS NT-R71 을 떠나보내고~

2009. 7. 19. 15:24

작년 초, 군휴학을 끝내고 복학하면서 구매했던 나의 SENS 노트북.

 

 

  입대 전 1학년 때는 매주 주말마다 집에 내려가서 컴퓨터로 레포트를 했었는데, 노트북을 구매하고 나서는 그럴 필요가 없어졌다. 컴퓨터 전공인 관계로 매주 쏟아지는 레포트들도 이 SENS 노트북과 함께면 즐거웠는데…

1년 3개월을 쓰고,

 

( 92만원에 ) 팔아버렸다.

 

  너무 무거워서 ㅎㅎㅎ

노트북을 살 때만 해도 그냥 기숙사에서 데스크탑 대용으로 썼을 뿐 휴대할 일은 거의 없었는데 막상 이리저리 노트북을 들고 다닐 일이 많아지다 보니 더 이상 15.4 인치의 왕덩치, 2.7Kg의이나 나가는 헤비급 노트북을 1Kg짜리 노트북 가방에 어댑터까지 함께 넣어서 들고다니는건 여간 곤욕이 아니었다.

 

Core2 Duo T9300 ( 2.5 GHz ), 2 GB Memory, Geforce 8600 GT, 250GB HDD

나름 고사양 노트북이라 3D게임을 즐겨도 렉을 모르고 살아왔는데 떠나보내고 나니 빈자리가 크다.

 

지금은 멤버십에서 준 삼성 DM-P40 데스크탑을 쓰고 있는데, 방학 동안은 딱히 노트북을 들고 다닐 일이 없어 다행.

차기 노트북으로 ThinkPad X200을 생각중이다. 그런데 이 녀석이 가격이 만만치가 않네. 최저가 170만원!!!

뭐 전에 쓰던 SENS NT-R71도 180여만원 하는거 공동구매로 좀 싸게 샀던 거였지만.

 

X200 사고 나서 뭐 이것저것 주변기기 달다 보면 어휴 돈지랄이네.

안그래도 텅 빈 주머니, 집안의 지원요청만이 살길이구나. 죄송하지만…

“아부지, 취업하고 바로 갚아드리겠습니다! ㅠ_ㅠ”

박상근 일상다반사

노트북 우분투에서 한영키 적용하기

2008. 10. 22. 19:36
노트북에 우분투를 설치해놓고 방치해두다가
이번에 유닉스 수업의 리눅스 활용과제때문에 간만에 부팅을 했다.

scim으로 한영키, 한자키 설정을 했음에도 불구하고
키가 먹히지 않아서 마우스로 직접 scim을 클릭해가면서 한영 전환을 해야했는데

키보드 설정도 바꿔보고, 키배치도 바꿔보고
온갖 삽질을 해도 안되다가

구글에 "노트북 우분투 한영키" 를 검색했더니
맨 처음 나오는 블로그에서 바로 해결법을 찾았다 -_-

터미널에서 xev로 내 한영키와 한자키의 키코드값을 알아내고.
내 계정의 폴더 (home/pskalyber) 안에다가
.Xmodmap 파일을 만들고 아래내용을 입력/저장.

keycode 113 = Hangul
keycode 109 = Hangul_Hanja

이제 우분투를 재부팅하면 .Xmodmap 파일을 읽어드릴 것인지 묻는데
읽어들임을 확인하고 나니 한영키, 한자키가 자연스럽게 사용가능하구나

아하하하~


박상근 리눅스

노트북 도난방지 0928

2008. 9. 28. 23:19
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WaveLib.AudioMixer;
namespace MyProgram
{
public partial class ScreenSaver : Form
{

public ScreenSaver()
{
InitializeComponent();
}

private void ScreenSaver_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.Equals(Keys.Space))
{
MessageBox.Show("키보드 누르지마");
}
}

private void bt_enter_Click(object sender, EventArgs e)
{
if (tb_ckPw.Text.Equals(Main.pwd))
{
this.Dispose();
}
else ScreenSaver_Activated(sender, e);
}

private void ScreenSaver_Activated(object sender, EventArgs e)
{
SoundPlay sp = new SoundPlay();
MyMessageFilter mf = new MyMessageFilter();

Mixers mixers = new Mixers();
mixers.Playback.Lines.GetMixerFirstLineByComponentType(MIXERLINE_COMPONENTTYPE.DST_SPEAKERS).Volume = 50000;

Timer.Start();

if (Main.temp_Cb_Power)
{
if (SystemInformation.PowerStatus.PowerLineStatus.ToString() == "Offline")
{
sp.SoundPlayer();
Timer.Stop();
}
}

if (Main.temp_Cb_USB)
{
Application.AddMessageFilter(mf);
}

if (Main.temp_Cb_Typing)
{
}
}

private void Timer_Tick(object sender, EventArgs e)
{
ScreenSaver_Activated(sender, e);
}

private void ScreenSaver_Deactivate(object sender, EventArgs e)
{
SoundPlay sound_Stop = new SoundPlay();
sound_Stop.SoundStop();
}
}
}



기본적인 폼의 형태를 대충 갖추고,
전원장치와 USB의 해제에 대한 경고음 이벤트까지 대충 완성했다


Timer.Stop()의 위치와 유무때문에 전원해제에 대한 이벤트가 제대로 먹히지 않아서 삽질했다
이렇게 하고나서 코드들을 보니, 아... 말로만 듣던 스파게티 소스가 이런것인가 싶다.
오디오 제어 관련 소스는 하다하다 못해서
그냥 공개된 다른 이의 소스 프로젝트를 그대로 첨부해서 쓰고있고-_-
주석은 한줄도 없이 막코딩하다보니 이제 슬슬 내가 헷갈려가기도 한다.
얼른 코드 더 길어지기 전에 주석도 달고 스파게티도 좀 풀어야지

아직 갈길이 멀다.
웹카메라도 활용해야하고, 된다면 로그기록까지 남도록해야하는데
휴우~

영어랑 학과공부까지 생각하니 막막~하구나 

박상근 프로그래밍/Laptop Guard