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

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

09년(上) 삼성전자 SW멤버십 기술면접

2009. 1. 17. 02:40

얼떨결에 삼성 소프트웨어 멤버쉽 1차 서류전형을 합격하고 기술면접을 보게되었다.
서류 전형 합격(8일) 후 기술면접(15일)까지 남은 기간은 1주일.
이 기간안에 최대한 빨리 프로그램을 마무리 짓고 PPT 발표 자료를 만들고, 발표 연습을 끝내야했다.

TOEIC 단어 스터디, 어학원 TOEIC R/C강좌를 일주일간 그만두고서까지 매달렸지만
결국 면접보기 하루 전날 까지 버그와의 싸움을 하느라 코딩을 멈출 수가 없었다.
틈틈이 PPT를 손보면서 발표내용을 살짝 정리해놓은게 천만 다행이었다.

서류전형에 합격할 줄 알았더라면 서류전형 지원하고나서 1주일동안 좀 놀지 않고
열심히 작품 완성도를 더 높였을텐데, 고작 서류전형 하나 내놓고 큰 일 하나 치룬듯 쉬었던게 부끄럽다.

나는 부산멤버쉽에 지원했기에 같이 서류전형에 합격하여 15일에 면접을 보는 동기들이랑 하루 전에 올라와
기술면접실에 직접가서 내 노트북이랑 연결도 해보고 바로 근처에 모텔을 잡았다.
면접실에선 고등학교 컴퓨터동아리 선배를 만났었다. 18기로 있던데... 이런데서 아는 사람을 만날줄이야.
군대서 고등학교선배를 만났을때처럼 반갑더라. ㅋㅋㅋ 뭔가 좀 안정되는 느낌

모텔인데 인터넷도 되고 벽걸이형 TV에... 시설이 좋더라. 두명 쓰는 방에 4만원줬는데 괜찮은 듯.

새벽 늦게까지 기술면접 준비를 하느라 잠을 못잤다.
PPT발표 준비랑 시연 준비,
그리고 삼성소프트웨어 기술면접 후기를 검색했더니 C,C++ 의 기분문법 같은 수준의 질문도 많이 하는 것 같길래
내 프로그램과 관련하여 후킹이라던가 .NET FRAMEWORK 의 구조와 특징, 델리게이트 등등...
예상 질문에 대한 대답 등을 연습하다보니 어느덧 새벽 3시. 그리고는 기절하듯 잠들어버렸다.

아침 9시에 첫번째로 면접을 보게 된 친구가 한시간도 채 지나지 않아 면접을 보고 모텔로 돌아왔다.
면접관이 프로그램에 대해서 구체적으로 캐묻기도 하고 그런다는데 어휴, 이때부터 나도 좀 긴장되기 시작한다.
다들 오전에 면접인데 나만 오후2시 30분... 나도 얼른 면접 보고 끝내고 싶은데.

어영부영 시간은 가고 점심을 먹고서 다들 먼저 진주로 내려가고,
내 순서 30분 전에 면접실에 도착했다.
어제 만났던 고등학교 선배가 1층에서 도우미를 하고 계시다가 격려 해주시고
마침 건물에서 나가시던 우리과 선배 두분도 만나서 잘 하라고 격려 해주시고...

흠흠.
면접대기실에 갔었는데 다른 사람들이 자기 면접 시간 제대로 안지키고...
뭐 급한일 있다고 먼저 본다고 하고...
내 차례 되서 들어갔더니만 어제 랜선 준비해달라고 말도 했었고 오늘 와서 물어보니 셋팅도 되있다더니만
면접실 들어가니깐 되있기는 뭐 -_- 어제 그대로더만... 랜선이 바로 준비가 안되서 난 순서 밀리고...
결국 그날 맨 마지막 면접자가 되버렸다.

드디어 내 차례가 되어 면접실에 들어가고, 면접 시작!
준비한 PPT 발표는 순조롭게 진행되었다.
중간중간에 두어개 질문을 하시기는 했는데 뭐 무난하게 대답했다. 뭘 질문하셨는지는 기억이 안나고 ㅡ.ㅡ
모르는 부분에 대해서는 아는 정도까지만 대답을 하고 더 자세히는 모른다고 솔직히 말했다.

내가 이제 내세울 부분들은 열정과 가능성.
그 부분을 강하게 어필하기 위해 목소리도 나름 씩씩하고 자신있게 내고, 태도도 당당하게 보이려 애썼다.

시연 도중에 USB메모리를 해제하면 바로 경보음이 발생해야하는데 USB메모리 연결을 했는데...
아무런 반응이 없더라. 연결하고 다시 해제하고... 이러길 두어번.
정적이 흐르고...
이러다 갑자기 윈도우메시지가 한번에 몰려서 전달된듯 버벅이더니만 경고음이 나온다.
휴우ㅠ_ㅠ

내 프로그램과 관련하여 계속 질문을 하셨는데 대부분 다 자신있게 내 프로그램에 대해 설명했었고
음소거 상태일때도 경보음이 발생되냐고 질문하시길래 난 음소거가 볼륨이 0이 되는 개념인지 알고
당연히 볼륨을 최대볼륨으로 하여 경보음을 발생시키기때문에 음소거를 하더라도 상관없다고 말했다.
보여달라 하시길래 음소거를 하고 시연해보니... 경보음이 안난다 -_-
음소거가 볼륨을 0을 만드는게 아니라 아예 사운드를 차단하는 듯... 휴우 =3 ...

기술 외적인 질문으로는

Q : 준비해온 작품 외에 다른 프로젝트 경험은?
A : 학부과정으로 C, C++, JAVA를 배우면서 했던 과제 수준의 프로젝트 외에는 없고
     이 프로그램이 처음으로 프로그램에 대한 내 열정이 깃들여진 처녀작입니다.

Q : 학교가 진주인데 부산까지 다니려면 힘들지 않을까?
A : 휴학하고 멤버쉽생활에 더 집중하고 멤버쉽 수료후 복학하여 학교를 졸업하겠습니다
( 난 이때까지 멤버쉽은 1년이나 2년정도 수료를 하는거지 학교생활과는 별개인줄 알았다 -_- )
Q : (웃으시며) 여긴 그런 곳이 아니다. 학교생활도 같이 병행해야한다.
A : 그렇다면 수업을 월화수요일 등으로 몰아서 들으면서 멤버쉽생활을 하여 지장이 없도록 하겠습니다.

Q : 경상대 컴퓨터과라면, CSSM 이라는 동아리 소속인가?
A : 동아리라기보다는 과 내의 소모임입니다.
Q : SSM을 통해 삼성전자로 들어오려는 목적으로 변질될 가능성도 있을 것 같은데.
A : SSM이 창의력과 열정 들을 보고 멤버를 뽑듯이 CSSM(Computer Science Software Membership)도
     그러한 프로그래밍에 대한 열정 등을 보고 선발하며, 그런 가능성을 최대한 배제시키려 노력중입니다.

음... 이 질문들 말고 다른 질문들도 있었던 것같은데 잘 기억이 나지 않는다.
나머지는 다 내 작품과 관련된 질문들이었으니까.'

굉장히 편안한 분위기에서 면접을 볼 수 있었다.
내가 잘 모르는 부분에 대해서는 설명해주시며 가르쳐주시기도 하고,
내 프로그램이 더 발전하기 위핸 방향도 제시해 주시기도 하셨다.
난 이상하게 다른 문법적이나 기술적인 용어 등에 대한 질문은 없었다. 다행인건지 불행인건지...

시간이 어떻게 흘렀는지도 모른채 면접은 끝났다.
홀가분한 기분.
완벽했다고는 할 수 없지만 나름대로 최선을 다 했던 면접이었다.
이정도면 내가 할 수 있는 만큼 한 것 같다.
즐거웠고, 재밌고, 유익한 경험이었다.

고등학교 선배가 나 면접 끝날때까지 기다려주시고 밥까지 사주셔서
밥먹으며 이런 저런 멤버쉽관련 이야기를 나누고 ... 날이 저물어서야 진주로 내려왔다.

진인사 대천명

최선을 다 했다.
이제는 조용히 결과를 기다릴 뿐.
다음주 목요일. 얼마 머지 않았다.

그래도, 사람 욕심은 끝이 없는건가.
좋은 결과가 나왔으면 좋겠다 ㅎㅎㅎ

박상근 프로그래밍/Laptop Guard

삼성 SW멤버쉽 1차 서류전형 결과 안내

2009. 1. 8. 17:01
어잌후,
열심히 노력해서 준비해서 서류전형 지원을 했지만 아직 실력이 많이 모자라다고 생각했기에
이렇게 합격할 것이라고 큰 기대 안하고 있었다.

발표 예정 시각인 5시가 되길 기다리다가 4시 30분에 무심코 메일확인을 해보았는데

받은편지함(1)
09년(上) 삼성전자 SW멤버십 1차 서류전형 결과 안내

심호흡 한번 하고 ....


아 이제 딱 일주일 남았구나.

나는 할 수 있다.

박상근 프로그래밍/Laptop Guard

노트북 도난 방지 12/22

2008. 12. 23. 09:39
동아리에서 단체로 삼성소프트웨어멤버쉽(SSM)에 지원하는 날이 바로 코앞으로 다가왔다.
1월 4일까지.

한달간을 기말고사에 투자하느라 코딩은 커녕, Visual Studio 도 못켜본 것 같은데
내 프로그램이지만 기억도 가물가물한 것이...ㅠ_ㅠ
부랴부랴 작품설명과 시스템구조도를 그린다는 것이 어휴. 하루종일 걸려서 겨우 완성했는데
선배한테 검토받고나니 이것저것 고칠것이 한두가지가 아니다.


내 생에 첫 시스템 구조도다.
하하하, 내가 봐도 뭔 말인지, 복잡하구나

얼마 남지 않았다.
아직 손 볼 것도 많고... 어휴

그래도 최선을 다한다면 후회는 없다!

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1122

2008. 11. 22. 08:36

bool existAttachment = true
private void SendLog()                                  // 메일 보내기
        {
            try
            {
                MailMessage message = new MailMessage();

                message.From = new MailAddress(tb_smtp_id.Text + "@gmail.com", "상근이", Encoding.UTF8);
                message.To.Add(new MailAddress(tb_smtp_id.Text + "@gmail.com", "You", Encoding.UTF8));

                message.Subject = "Concentrate on THIS LOG of Labtop which was stolen by thief";
                message.SubjectEncoding = Encoding.UTF8;
                message.Body = "This is the thief's log\n\n";
                message.Body += strLog;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.Priority = MailPriority.Normal;

                if (existAttachment == true)
                {
                   
String file = "scene.jpg";
                    Attachment attachment = new Attachment(file, MediaTypeNames.Application.Octet);
                    message.Attachments.Add(attachment);

                }

                SmtpClient smtp = new SmtpClient("smtp.gmail.com");
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Credentials = CredentialCache.DefaultNetworkCredentials;
                smtp.EnableSsl = true;
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = new NetworkCredential(tb_smtp_id.Text, tb_smtp_pw.Text);

                smtp.Timeout = 20000;

                smtp.Send(message);
            }
            catch (FileNotFoundException ee)    // 파일 없으면 파일첨부 안하고 보내기
            {
                MessageBox.Show(ee.ToString());
                existAttachment == false;
                SendLog();
                return;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return;
            }
            finally
            {
                MessageBox.Show("Sending Log has been complete");
            }
        }

전에 전역후킹 키로그 파일을 메일로 보내는 것까지 구현했었는데
이번에 내 프로그램에 웹캠을 이용한 촬영기능까지 넣으면서 jpg파일을 메일로 첨부할 필요가 생겼다.
노트북 절도자의 얼굴까지 사진으로 찍어서 메일로 오면 그야말로 금상첨화!!!

파일 첨부를 해서 메일을 보내니 자꾸 전송이 실패되길래 왜 안되나 하고 종일 삽질했었는데
알고보니 내가 파일명을 잘못적었었다. 이런 멍청한 -_-

원래 로그만 전송할땐 2~3초 정도 버벅거렸었기에
'우와 달랑 1kb도 안될 로그를 전송하는데 이렇게 버벅이면 100kb넘는 그림파일은 얼마나 버벅이려나 했는데'
한 5초 정도밖에 버벅이지 않았다. 뭐 버벅인다기보다는 마우스 움직임이 조금씩 끊기는 정도의...(ㅠ_ㅠ)a

메일 전송 테스트하다가 방금 알게된건데...
IP주소까지 전송시키게 해놨더니 공유기의 내부 IP가 날아온다. 192.168... -_-
외부IP를 저장시켜서 전송시켜야겠다.
이건 또 어떻게 한담~ 휴우~

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1112

2008. 11. 13. 00:51
중간고사때문에 거의 보름동안 코딩을 못하다가
게으름이 버릇되서 계속 안하다가 ...
이번주부터 다시 시작이다.

각각 따로 만들던 키로거 프로그램이랑 노트북 도난방지 프로그램 소스를 합쳤다.
메인폼에 키로거 소스를 억지로 쑤셔넣었었는데
원래 디자인했던 메인폼을 수정하고, 좀 다듬으면서 이제 좀 자연스러워졌다.

그리고 이제 정상적인 방법이 아닌 강제로 프로그램이 종료되었을 때와
정상적으로 사용자가 프로그램을 종료시켰을 때를 구분하기 위해
따로 파일을 만들어서 0과 1로 구분하여 기록해놓기로 했다.
그리고 최근에 기록한 ID, PASSWORD도 기록해놓았다가
프로그램 실행때 다 불러와서 초기설정을 유동적으로 잡을 수 있도록.



이제 조금, 아주 조금은 끝이 보이는 것 같기도 ... 아닌 것 같기도...
아직 갈길이 먼가보다.

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1014

2008. 10. 14. 20:23

간만에 코딩한번 해보자 싶어서 VS를 켰다가
실행 한번 시켜보았는데 전에 분명 막아놨던 Ctrl+Alt+Del 키가 뚫려있었다.
전에 분명 막았었는데... 내가 소스를 날렸나...

아하!
예전에 이거 막아놓고 나니까 컴이 좀 이상해 진것같아서 레지스트리를 수정해서
무조건 열려있도록 설정해놓았던게 기억이 났다.

그럼 아예 C#으로 레지스트리를 수정하는 방식으로
Ctrl+Alt+Del 을 막거나 열 수 있지 않을까?!

        public void LockCtrlAltDel()
        {
            RegistryKey reg=Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
            reg.SetValue("DisableTaskMgr", 1, RegistryValueKind.DWord); // 1 : LOCK
        }

        public void UnLockCtrlAltDel()
        {
            RegistryKey reg = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Policies\System");
            reg.SetValue("DisableTaskMgr", 0, RegistryValueKind.DWord); // 2 : LOCK
        }


후훗,
역시 방법은 있었다.
이렇게 하니 깔끔하다.
실행과 동시에 LOCK걸었다가 비밀번호 맞춰서 끌땐 UNLOCK

이걸로 오늘도 하나 배운거다.

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1010

2008. 10. 11. 01:42

SMTP를 이용해서 메일을 보내는걸 대체 어떻게 구현해야 하나 싶은 막연함에
코딩에 흥미도 조금 떨어지고 정신적으로 많이 헤이헤져 있었다.

선배한테 C#으로 메일보낼려면 뭘 알아봐야겠냐고 물으니 TCP/IP, 소켓 관련해서
알아보면 금방 찾을 수 있다고 하시더라.
푸헐헐... 그걸 공부하라고?! 이 작은 기능 하나 구현하기위해? ㅠ_ㅠ

한 이틀 손놓고 있다가 갑자기 오늘 필이 와서 하루종일 구글링하면서 컴앞에 앉아있었다.
거의 다 구현되있는 소스에 내가 엉뚱한 smtp주소를 집어넣어놓고서
괜한 것들만 계속 수정+수정+수정+수정+수정...

결국은 몇시간만의 삽질 끝에 성공했다.

이제 키로그 저장된 값을 바로 메일로 보낼 수 있도록 구현만 하면 될 것같다.
으하하하

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1006

2008. 10. 7. 01:41

낄낄낄
ASP 파일처리 리포트를 하고 난 후라 그런지 ... 소스가 좀 친숙한 듯
DateTime.Now 로 기록 시간을 기록하고
Dns.GetHostName() 으로 호스트이름도 기록하고
Dns.GetHostAddresses(...) 로 IP주소도 기록했다.

이정도면 상콤함?! 낄낄낄, 테스트도 성공적이다.
벌써 시간이 새벽 2시가 다되가네.
이왕 늦은김에 남은 리포트들이나 다 해버려야겠다.

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1004

2008. 10. 5. 18:57

최대한 내가 필요로 하는 것과 비슷한 전역 후킹 소스를 찾았다
http://www.codeproject.com/KB/cs/globalhook.aspx
내가 필요한건 따로 txt파일로 저장하는 기능인데
이건 따로 저장만 안한다 뿐이지, 키값들을 계속 텍스트상자에 보여주길래
얼씨구 싶어서 바로 다운로드!!!

VS 2008 로 열어서 csproj 파일을 sin으로 바꾸고 실행해보니,
음 괜찮다. 이걸 txt에 저장하도록 바꾸고, 폼을 안보이게 하고
잘 눈치 못채게 숨기면 될 것같다.

일단 소스를 옮긴 다음에 조금씩 바꿔볼려고
VS 2008 에서 새 프로젝트를 만들어서 소스를 그대로 옮겨왔는데,
왠걸...
SetWindowsHookEx(...)으로 값을 할당받은 Hmouse 변수의 값이 변화가 없다.
SetWindowsHookEx()...가 먹히지 않는다.
도대체 뭐가 문제인지.
소스를 그대로 옮겨왔는데도 불구하고...OTL

괜히 이것저것 고쳐보고 하다가 시간만 흘러가고ㅠ_ㅠ
오늘은 그냥 여기까지만 하고 체념할때즈음에
저 소스를 구했던 곳의 Q&A를 보니 누군가가
How to make debugging work in VS2008 (express) with these hook?
이렇게 질문해놓은 글을 보았다.
그리고 그에 대한 친절한 답변.

The answer is simple: 
0: Copy UserActivityHook.cs to your project, add an instance of the UserActivityHook object, set up the event handlers, enter Debug mode, and waste a couple of hours trying to fix the Win32Exceptions thrown on lines 538 and 562 before coming back to this site and seeing this solution.
1: Go to the project properties page (right-click the project name and select properties)
2: Go to the Debug tab and uncheck "Enable the Visual Studios hosting process"
3: Realize that the ctrl and alt keys map to Keys.LControlKey, Keys.RControlKey, Keys.LMenu, and Keys.RMenu, since you're now able to see the results of each of your key presses. (It really makes a lot more sense, now that I can see how Windows is managing each of the keys... Just wasn't obvious before.  )


으하하
이렇게 난 해결을 보고야 말았다.
좋구나, 조금씩 조금씩 완성에 다가가는 이 느낌♬

박상근 프로그래밍/Laptop Guard

노트북 도난방지 1002

2008. 10. 2. 11:44
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/827af007-daf9-4136-9d20-f364d71df2ae/



이리저리 C#에서 CtrlAltDel, AltF4, AltTab 키 막을려고 후킹소스를 뒤지는데
검색결과마다 어느 한 소스를 두고, 이게 제대로 실행이 안된다는 내용들의 글이었다.
그 소스를 구해서 해보니 CtrlAltDel기능만 막히고 AltTab이랑 Win키는 못막아지더라.
짧은 영어 실력으로 다른 사람들의 Answer, Reply을 읽어가면서 찾던도중
ㅋ ㅑ ~
드디어 찾았다. 그리고 ... 내 프로그램에 적용시켰다. 성공이다.
이것때문에 거의 일주일을 헤맸는데 ( 뭐 그동안 놀고 먹느라 바쁘기도 했지만 )

기존에 구했던 소스랑 똑같은데 대체 어디가 조금 달라서 기능이 실행된건지
수업 듣고 와서 저녁먹고 한번 찾아봐야겠다.


어제 헌혈해서, 착한일 했다고 상받은건가. 낄낄낄

박상근 프로그래밍/Laptop Guard

노트북 도난방지 0930

2008. 9. 30. 23:08
private void ScreenSaver_FormClosing(object sender, FormClosingEventArgs e)
{

e.Cancel = true;
base.OnClosing(e);
}

AlT+F4, ALT+TAB, CTLR + ESC, Windows 키를 막으려고 이리저리 검색했는데
FormClosing 이벤트로 Alt+F4 가 안막히게 구현하는 방법을 찾았다.
원래 내가 의도한건 키보드 키 자체를 안먹히게 하는거였는데.

이제 나머지 다른 키들을 인식안되게 하려고 하다가
어느 외국 사이트에서 Alt+Tab에 관한 소스를 찾았다.
그래서 신나게 소스 적용하고보니...
ALT+Tab 을 막은게 아니라 AlT+Tab 했을때 나오는 아이콘들 중에
내가 지정한 프로그램의 아이콘이 안나오게 하는 소스였다 -_-

[DllImport("user32.dll")] public static extern int SetWindowLong(IntPtr window, int index, int value); [DllImport("user32.dll")] public static extern int GetWindowLong(IntPtr window, int index); const int GWL_EXSTYLE = -20; const int WS_EX_TOOLWINDOW = 0x00000080; const int WS_EX_APPWINDOW = 0x00040000;


//Calling after InitializeComponent, or form load events int windowStyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
SetWindowLong(this.Handle, GWL_EXSTYLE, windowStyle | TOOLWINDOW);


휴우 빨리 키 막기 기능 넣고나서
다음 기능들을 추가해야하는데 ㅠ_ㅠ
늘 삽질의 연속이군하~

박상근 프로그래밍/Laptop Guard

노트북 도난방지 0929

2008. 9. 29. 22:58

 private void ScreenSaver_KeyDown(object sender, KeyEventArgs e)
 {

            if (e.KeyCode == Keys.F4)
                e.SuppressKeyPress = true;

            // 이거 안되네 젠장할
            if (e.KeyCode == Keys.LWin)
                e.SuppressKeyPress = true;

            if (e.KeyCode == Keys.Menu)
                e.SuppressKeyPress = true;

            // 탭키가 왜 후킹이 안되지 망할
            if (e.KeyValue == 9)
                e.SuppressKeyPress = true;
}

ALT + TAB 이랑 ALT+F4 랑 windows키 를 막으려고
e.KeyCode=null 을 했더니만 읽기전용속성이라는...ㅠ_ㅠ

그래서 어찌 어찌 지속적인 삽질끝에
e.SuppressKeyPress=true 를 했더니 성공 ㅋㅋ

그런데 이상하게 windows 키랑 tab 키는 안막아진다.
탭키를 KeyCode가 아닌 KeyValue로 해서 조건 잡아도
그냥 탭키는 잘 작동하고만다.

왜일까...

쩝, 그래도 ALT+F4 는 막았다.

한단계씩~

박상근 프로그래밍/Laptop Guard

노트북 도난방지 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