윈도우 8에서 터치 이벤트를 만들기 위해 Touch Injection API 를 사용하던 도중 발생한 문제에 대한 해결 방법입니다.


Touch Injection 은 Windows 8 부터 지원되는 Windows API 이며 User32.dll 에서 Import 하실수 있습니다.


원래는 C++ 만 지원하는 API 이나 C# 에서도 지원이 가능하게 끔 만들어진 라이브러리가 있습니다.


https://code.msdn.microsoft.com/TouchInjection-on-Windows-885150d2#content


이 라이브러리를 사용하면 C# 에서도 터치 이벤트를 만들어낼수 있습니다.



아래는 제가 이 라이브러리를 사용하면서 발생했던 문제에 대한 해결 방법입니다.





문제사항해결방법
InitializeTouchInjection() 에 Parameter를 넣으면 터치이벤트가 아예 동작하지 않음InitializeTouchInjection() 에서 Parameter를 모두 제거해서 해결
양손 적용시 터치가 한군데에서만 연속적으로 클릭되던 문제각 손이 각각 업데이트 되지만 업데이트는 2개 모두 하던 방식에서 각 손만 임시 contact를 만들어 각각 업데이트 하도록 해서 Injection 시키도록 하여 해결
터치인젝션으로 터치클릭 & 무브가 안되는 문제터치클릭을 위해서 UPDATE / INRANGE / INCONTACT 옵션을 사용했는데 문제는 이 이벤트를 발생시키기 전에 DOWN / INRANGE / INCONTACT 이벤트를 발생시켜야 이 이벤트가 정상적으로 동작하여서 터치가 UP된 후 다시 터치클릭 & 무브 하려할때 해당 이벤트가 발생되지 않았으면 발생시키도록 수정
터치가 한쪽밖에 안됨기존에 터치가 한군데에서만 연속적으로 클릭되던 문제의 원인이 LeftHand 신호를 받지 않았기 때문에 발생했던 문제였기 때문에 임시로 해결했던 contacttemp 를 만들어 각각 업데이트 하도록 Injection 시키던걸 양손 모두 한꺼번에 업데이트 하도록 변경하여서 수정
두 손 터치가 제대로 되지 않는 문제스택오버플로우에 따르면 TOUCH_FEEDBACK_DEFAULT 는 윈도우의 Pen and Touch 설정에 영향을 받기 때문에 여러가지 문제가 생길수도 있어서 TOUCH_FEEDBACK_INDIRECT 를 통해 InitializeTouchInjection()을 초기화해서 해결 http://stackoverflow.com/questions/20875283/why-is-only-one-touch-being-injected-when-using-touch-injection-api-with-win8
두 손 터치가 인식은 되지만 터치클릭이 되지 않는 문제Touch Down and Move 하기 전 이전 포인트 플래그가 터치가 올라갔을때 이면 Touch Down 플래그를 등록하는데 등록한 후 한번 Move 를 진행하고 그 다음번에 Touch Down and Move 를 위한 플래그로 변경시키는 방식에서 애초에 이전 플래그가 터치가 올라갔을때 이면 Touch Down 플래그를 등록한 후 바로 TouchInjection()을 호출하여 처리한 후 Touch Down and Move 를 위한 플래그를 넣고 Move 하고 Injection 하도록 하여서 해결



파이썬으로 만든 우체국택배 택배 배송정보를 가져오는 코드입니다.


택배 송장번호를 입력하시면 배송정보를 가져옵니다.


아래 주소에서 더 예쁘게 보실수 있습니다.

https://gist.github.com/taylor224/704e46a627519d035eb9




# -*- coding: utf8 -*-

 
import urllib, httplib, BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
realurl = 'http://service.epost.go.kr/trace.RetrieveRegiPrclDeliv.postal?sid1='
posturl = 'trace.epost.go.kr'
 
 
def getpost(sid):
params = {
'target_command' : 'kpl.tts.tt.epost.cmd.RetrieveOrderConvEpostPoCMD',
'sid1' : sid,
'RE_ORDID' : 'null'
}
params = urllib.urlencode(params)
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = httplib.HTTPConnection(posturl)
conn.request("POST", "/xtts/servlet/kpl.tts.common.svl.SttSVL", params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
 
try:
soup = BeautifulSoup.BeautifulSoup(data)
addressee = soup('table', {'class' : 'traceTable traceTableType02', 'summary' : '발송인/수취인 정보'})[0].tbody.findAll('tr')[1].td.string
statuslist = soup('table', {'class' : 'traceTable traceTableType02', 'summary' : '세부결과를 보여드립니다.'})[0].tbody.findAll('tr')
status = []
 
status.append({ 'type' : 'addressee',
'addressee' : addressee
})
 
for i in range(len(statuslist)):
if i == 1:
continue
else:
tdlist = statuslist[i].findAll('td')
if statuslist[i].get('id') == 'transport1' or statuslist[i].get('id') == 'transport2':
continue
# When Received
if len(tdlist) == 1:
statusreceiver = tdlist[0].string
status.append({ 'type' : 'recipient',
'recipient' : statusreceiver.strip()
})
else:
statusdate = tdlist[0].string
statustime = tdlist[1].string
statuslocation = tdlist[2].a.string
nowstatus = tdlist[3].string
statusdetail = tdlist[4].string
status.append({ 'type' : 'status',
'date' : statusdate,
'time' : statustime,
'location' : statuslocation,
'status' : nowstatus,
'detail' : statusdetail
})
 
for statusdata in status:
for key in statusdata.keys():
if statusdata[key]:
statusdata[key] = statusdata[key].strip()
 
return status
except IndexError:
return False
 
 
data = getpost('postnumber')
 
if not data:
print 'Invalid Number'
else:
for status in data:
if status['type'] is 'addressee':
print status['addressee']
if status['type'] is 'recipient':
print status['recipient']
if status['type'] is 'status':
print status['date']
print status['time']
print status['location']
print status['status']
print status['detail']




드론 파일럿 커뮤니티에 여러분들을 초대합니다.


드론 파일럿 커뮤니티의 모든 자료는 가입없이 보실수 있으며 좋은 자료들을 여러 사람들과 그리고 해외 유저들에게도 제공하고자 가입없이 볼 수 있도록 공개를 하였습니다.


아직 컨텐츠는 많이 부족하지만 앞으로 많은 컨텐츠들로 채워나가 대한민국을 대표하는 커뮤니티로 성장하고자 합니다.


많은 분들이 가입하여 주셔서 좋은 컨텐츠들을 만들어 주셨으면 합니다.


나아가 여러 드론 관련 전산시스템을 구축하여 드론 유저들에게 편의를 제공하고 합법적으로 드론을 비행할수 있도록 노력해볼 예정입니다.


저는 커뮤니티에 예전에 개발했던 드론 제어시스템에 관한 글을 작성하였습니다.


한번 읽어보시고 마음에 드신다면 가입을 부탁드리겠습니다.


감사합니다.



+ 늦게나마 써보는 드론 제어시스템 개발 후기

http://drone.festasquare.com/devlog/186


+ DJI F450 조종신호 분석

http://drone.festasquare.com/devinfo/146


+ 커뮤니티 메인페이지 주소

http://drone.festasquare.com


+ 드론 파일럿 커뮤니티 트위터

http://twitter.com/dronepilotcomm


+ 드론 파일럿 커뮤니티 페이스북

https://www.facebook.com/dronepilotcomm


+ 드론 파일럿 커뮤니티 회원가입 하기

http://drone.festasquare.com/index.php?mid=main&act=dispMemberSignUpForm