기본 콘텐츠로 건너뛰기

11월, 2016의 게시물 표시

파이썬에서 ShellExecuteEx로 인쇄하는 법

최근에 ShellExecute로 인쇄하는 방법에 대해 소개해드렸습니다. 이번에는 ShellExecuteEx로 인쇄하는 방법에 대해 소개해드립니다. (기본 프린터로 인쇄됩니다.) import win32event import win32process from win32com.shell.shell import ShellExecuteEx from win32com.shell import shellcon rc = ShellExecuteEx(lpVerb = 'print', lpFile = 'c\\파일경로\\파일.pdf', fMask = shellcon.SEE_MASK_NOCLOSEPROCESS | shellcon.SEE_MASK_DOENVSUBST # NOCLOSEPROCESS: 프로세스 핸들을 반환하도록 합니다. # DOENVSUBST: lpFile에 포함된 환경 변수를 실제 값으로 바꿔주도록 합니다. ) hproc = rc['hProcess'] win32event.WaitForSingleObject(hproc, win32event.INFINITE) exit_code = win32process.GetExitCodeProcess(hproc) 참고 자료 nullege https://sourceforge.net/projects/pywin32/ 관련 글: 파이썬에서 ShellExecute로 인쇄하는 법   파이썬에서 pywin32를 이용한 기본 프린터 변경법

파이썬에서 UUID 생성법

파이썬 2.5 이상부터 다음과 같이 간편하게 UUID를 생성할 수 있습니다. import uuid # uuid1()도 사용할 수 있습니다. # 단, uuid1은 컴퓨터의 정보를 기반으로 만든다는 점을 주의하시기 바랍니다. t = uuid.uuid4() print(t) # => UUID('d464b812-f57a-480e-9a58-1ab5795fd586') t = str(t) print(t) # => 'd464b812-f57a-480e-9a58-1ab5795fd586' t = t.replace('-', '') print(t) # => 'd464b812f57a480e9a581ab5795fd586' 참고 자료: "UUID objects according to RFC 4122": https://docs.python.org/2/library/uuid.html http://stackoverflow.com/questions/534839/how-to-create-a-guid-uuid-in-python

특정 시점부터 ::GetDC(NULL)가 NULL을 반환하는 문제의 원인.

윈도 OS에서 프로그램 실행 중 어느 시점부터 갑자기 이미지 처리 함수가 제대로 동작하지 않는 문제가 발견되었습니다. DC를 이용해서 특정 텍스트를 출력하는 함수인데 프로그램 실행 초기에는 잘되다가 어느 정도 시간이 지나면 안되더군요.. 로그를 찍어서 분석해보니 해당 함수 내에 ::GetDC(NULL)를 이용해서 DC를 가져오는 부분이 있는데, 이상하게도 일정 시간이 지나면 항상 ::GetDC(NULL)가 NULL을 반환했습니다. 즉, 텍스트가 출력되지 않는 것은 DC를 가져오지 못했기 때문이었습니다. 그렇다면 왜 ::GetDC(NULL)이 NULL을 반환했을까요? 여러 원인이 있을 수 있겠지만 제 경우에는 DC 객체 자원 누수 때문이었습니다. 해당 프로그램에서 사용하는 DLL 중 하나에서 ::GetDC()를 한 후 ::ReleaseDC()를 하지 않는 버그가 있었고, 이 때문에 서서히 DC 객체 자원이 누수되어 이런 문제가 발생한 것이었습니다. 예시... [원래 코드(잘못된 코드)] int nTmp = GetDeviceCaps( ::GetDC(NULL) , LOGPIXELSY); [수정된 코드] CDC* pDC = ::GetDC(NULL); int nTmp = GetDeviceCaps( pdc , LOGPIXELSY); ::ReleaseDC(NULL, pdc); pdc = NULL; - 2017. 7. 28 : 잘못된 내용 수정 및 예제 코드 추가.