반응형
이전의 프린터기를 찾아 정보를 얻는 것은 로컬프린터에 한정되어 있던 내용이었다.
자세한 정보를 얻기를 바란다면 다음의 내용을 읽어보시고 참고하세요 ^^
자신의 컴퓨터에 연결되어 있는 프린터의 정보를 수집해 보자
이전 글의 내용을 보면 다음과 같은 내용이 있다
EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 2, NULL, 0, &cbNeed, &cbReturn);
pi=(PRINTER_INFO_2 *)malloc(cbNeed);
EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 2, (PBYTE)pi, cbNeed, &cbNeed, &cbReturn);
pi=(PRINTER_INFO_2 *)malloc(cbNeed);
EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 2, (PBYTE)pi, cbNeed, &cbNeed, &cbReturn);
위 API는 자신의 컴퓨터에 연결되어 있는 프린터의 정보를 얻어와 cbNeed에 저장하는 API가 되겠다.
여기서 중요한 부분은 EnumPrinters의 파라메터이다.
나는 여기서 MSDN을 잘 읽어보지 않고 그냥 사용해서 완전 삽질했다.. ㅠㅠ
첫번째 파라메터에 PRINTER_ENUM_LOCAL을 사용하게 되면 자신의 컴퓨터에 직접 연결된 로컬프린터와 네트워크 프린터만을 사용할 수 있게 된다.
여기서 문제가 되는 부분은 공유프린터를 기본프린터로 잡고 있다면 PRINTER_ENUM_LOCAL을 사용하면 프린터 정보를 얻어올 수 없게 되므로 프린터가 없다고 나오거나 Array Err가 뜨게 된다.
뭐 당연히 없는 프린터 정보는 얻어 올 수가 없는데 기본 프린터로 잡고 있으니 엉뚱한 주소로 값을 보내거나 얻으려고 할꺼고.. 쓰레기 값들을 잔뜩 가지고 오거나 보낼것이다..
그러니 메모리가 터질수 밖에.. ㅋㅋㅋㅋ
간단하게 파라메터 추가로 수정을 할 수 있다.
PRINTER_ENUM_CONNECTIONS을 추가해 주면 공유프린터역시 정보를 얻을수 있다..
반응형
'C & C++ > C & C++' 카테고리의 다른 글
[API] 수행시간 계산 (0) | 2011.05.25 |
---|---|
[Tip] ExitWindowsEx 컴퓨터 종료 (0) | 2011.05.24 |
[TIP] MFC Tip 4 (0) | 2011.05.24 |
[TIP] 프로젝트 병합법 (0) | 2011.05.24 |
(Tip) 포인터 값으로 추적하는 디버그 팁 (0) | 2011.05.21 |
댓글