QR코드리더기를 내 휴대폰용으로 만들어보았다.
비슷한 프로그램으론 i-nigma라는 프로그램이 있는데.. 이건 내 목적과는 좀 다른놈이라...
난 다른 목적으로 쓰고 싶었다.
예를들면.. 명함에 이름과 폰번호 이메일같은 것을 인코딩해놓은 QR코드를 인쇄해놓고..
내 프로그램으로 스캔하면 휴대폰 주소록에 바로 입력된다던지...

일단 취미로 만드는거니, 머릿속에 사사삭 구성을 한 다음에 만들기 시작했다.

개발환경은 전에 다른 프로그램 만들때 만들어뒀고..(VC#) 세가지 난코스(?)가 있었다.


1. 카메라에서 영상 얻기.

원래는 CameraCaptureDialog로 스틸컷을 얻어보려 했다. 실패다..
찾아보니 Windows Mobile플렛폼과는 별도로 삼성(내 휴대폰 제작사)에서 자체개발이라 그놈이 안먹힌단다.
자체개발 했더라도 어떻게든 먹히게 만들어놓으면 안되는건가?
더 찾아보니 DirectDraw를 쓰란다.. 응? 스마트폰도 그런게 되는구나.. WM5부터 지원한단다.
결국 DirectDraw로 해결...

2. 바코드 디코딩.

QR코드 디코딩을 해보려 영상처리를 일단 하기 시작했다. 젠장 머리아프게 하나하나 하고 있었는데..
속도도 약간 느리고 왠지 취미가 노가다가 되는느낌이다. 그래서 오픈된 라이브러리 없나 찾아봤다.
당연히 있다. 닷넷용으로 만들어진거.. 바로 붙였다.

3. 카메라 영상 좌우 반전(?)

카메라에서 받은 영상이 좌우가 바뀌었다.
코드는 제대로 짰는데 바코드가 디코딩이 계속 안되길래 머리쥐어짜다가 발견한거 -_-;;
그거때문에 안되는지 한참만에 파악했다.
닷넷 2.0프레임웍에 RotateFlip이라는 함수가 있단다. 그래서 얼른 써봤다. 젠장 안된다.
자세히보니 닷넷 2.0 컴팩트 프레임웍(윈도우즈 모바일용)에는 그게 안된단다.
결국 구글링해서 붙여넣었다.

※ 결과

카메라를 잘 들이대면 디코딩이 되긴 된다.
근데 i-nigma쓸때도 겪었던 카메라 화면깨짐(?) 현상때문에 카메라가 컨디션 좋을때만 된다 -_-;;
다음에 다른 폰으로 시도를 해보던가.. 나중에 더 고쳐서 써먹어봐야겠다.

업무때문에 어쩌다 국제전화를 걸었다.
그것도... 중국으로...;; 덜덜덜

영어로 말하면 그나마 뭐 알아듣고 대답좀 할거 같은데,
전화 받자 마자, 웨이닌하오 뭐시기라고 네이티브 스피커 중국인의 목소리가 나오자...
갑자기 패닉상태에 접어들어 3~4초간 얼었다가 -_-...

에잇 몰라! 하면서 한국어로 "사장님 없어요??" 그랬더니 -_-...
어설픈 한국어로;;; "사장님 지금 없어요.." 하는거다...

알아먹어서 다행;;; "알았습니다~" 하고 황급히 끊었다.

중국어도 공부 해야하나.... (   '')

'Trash Bin' 카테고리의 다른 글

앜!!!!!! 나좀 살려줘!!!!!!!!!  (6) 2010.04.25
무궁화호 좌석 배치도  (0) 2009.12.02
갑자기..  (0) 2008.05.15
사이트 전체 캡쳐하는 프로그램 제작.  (3) 2007.10.09
실수로(;;) 찍힌 사진..  (2) 2007.03.05

윈도우 시스템에서 WMI 인터페이스에 WQL(SQL for WMI)문을 통해 질의하여, 시스템의 각종 정보들을 아주 쉽게 얻어올 수 있다.
In the Windows system, the WMI interface is queried via the WQL (SQL for WMI) statement, so it is very easy to get various information of the system.

WQL은 이름에서 유추할 수 있듯 일반적인 SQL문과 유사하다.
WQL is similar to a regular SQL statement, as you can guess from the name.

간단한 스크립트를 예로 들어보겠다.
Let's take a simple script as an example.


아래는 python코드이다.
Below is the python code.

import win32com.client

strComputer = "."

objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2")

"""
Example Queries:

SELECT * FROM Win32_OperatingSystem
SELECT * FROM Win32_NetworkAdapter WHERE ConfigManagerErrorCode = 0
SELECT Name, Model, InterfaceType, MediaType, Size from Win32_DiskDrive
SELECT Name, Description, DriveType, FileSystem, FreeSpace, Size, VolumeSerialNumber from Win32_LogicalDisk
SELECT Description, IPAddress, IPSubnet, IPConnectionMetric, MACAddress, DefaultIPGateway FROM Win32_NetworkAdapterConfiguration WHERE DefaultTTL > 1
SELECT Name, MACAddress, ConfigManagerErrorCode, NetConnectionID FROM Win32_NetworkAdapter WHERE AdapterType = 'Ethernet 802.3'
"""

objResult = objSWbemServices.ExecQuery("""
SELECT Description, IPAddress, IPSubnet, IPConnectionMetric, MACAddress, DefaultIPGateway
FROM Win32_NetworkAdapterConfiguration
WHERE DefaultTTL > 1
""")

for itemResult in objResult:
print itemResult


다음은 javascript코드이다.
Here is the javascript code:

function GetInformation() {
      var locator = new ActiveXObject ("WbemScripting.SWbemLocator");
      var service = locator.ConnectServer(".");
      var properties = service.ExecQuery("SELECT * FROM Win32_NetworkAdapter");
      var e = new Enumerator (properties);
      document.write("<style type='text/css'> * { font-size: 12px; } </style><table border=0 cellspacing=1 cellpadding=5 bgcolor=0 width=100%>");
      dispHeading();
      for (;!e.atEnd();e.moveNext ())
      {
            var p = e.item ();
if (p.NetConnectionStatus != null) {
document.write("<tr bgcolor=#ffffff>");
document.write("<td>" + p.Name + " / " + p.NetConnectionID + "</td>");
document.write("<td>" + p.NetConnectionStatus + "</td>");
document.write("<td>" + p.PermanentAddress   + "</td>");
document.write("<td>" + p.MACAddress + "</td>");
document.write("</tr>");
}
      }
      document.write("</table>");
}

function dispHeading()
{
      document.write("<thead bgcolor=#efefef>");
      document.write("<td>Name</td>");
      document.write("<td>x</td>");
      document.write("<td>Status</td>");
      document.write("<td>MACAddress</td>");
      document.write("</thead>");
}

GetInformation();


델파이에서는 이렇게..
In Delphi ...
http://www.magsys.co.uk/delphi/magwmi.asp

가져오고 싶은 정보를 어디서 가져와야 할 지 모르겠다면,
If you do not know where to fetch the information you want to import,

WMI Explorer라는 프로그램을 첨부하니 다운받아서 실행해보기 바란다.
Attach a program called WMI Explorer and download and run it.

wmi_explorer.zip


'Code snippets > Python' 카테고리의 다른 글

놀고있는 GPS수신기의 활용  (0) 2013.07.31
타임서버에서 시간 가져오기 in python  (0) 2008.05.01

포스팅 할 것도 특별히 없고..
그냥 알고 있던 것 중 누군가에게 도움이 될 것 같아 포스팅 해본다.

휴대폰을 PC에 연결하면, 대부분의 휴대폰이 시리얼 인터페이스를 제공하며
그것을 이용해 휴대폰을 일부 제어할 수 있다.

휴대폰으로 메세지 전송하기

AT*SKT*MOREQ=0,[수신휴대폰번호],[전송휴대폰번호],TI,메시지\r

  • TI = 4097: 호출, 4098=문자메세지

 

휴대폰 화면 제어하기

at*skt*setlcd=1\r

  • 화면제어 설정

at*skt*clrlcd\r

  • 화면 CLEAR

at*skt*outlcd=x,y,메세지\r

  • 좌표로 메시지 출력

at*skt*setlcd=0

  • 화면제어 정지

 

기타 휴대폰 제어 명령

AT*SKT*ORI=[전화번호]\r

  • 전화 걸기

AT*SKT*REL\r

  • 전화 끊기

AT*SKT*RESET\r

  • 리셋

AT*SKT*DIAL\r

  • 휴대폰의 번호를 얻을 수 있음

 

기타 몇 개 더 있는데, 주요 명령은 이와 같다.

더 알고 싶다면 여기를 클릭하여 구글님에게 물어보아라.

어제 온종일 홈페이지가 안뜨는 상황이었는데도..
밖에서 어쩔 수 없이 그냥 뒀어야 하는 상황이 발생했다..
인터넷을 이용할 수 없는 곳에 있으니 당연..

그래서 임시로 휴대폰을 통해 서버에 접속해 간단한 작업을 할 수 있도록 해 두었다.
웹기반의 SSH이고, 다른 클라이언트 등으로 접속할때처럼 로그인이 필요하다.

사용자 삽입 이미지

+ Recent posts