So-net無料ブログ作成
検索選択

通常使うプリンタを取得する [ソフト開発]

通常使うプリンターを取得する方法をいくつか挙げる。
①GetDefaultPrinter
TCHAR printerName[1024];
DWORD dwBufferSize = 1024;
BOOL bRet = GetDefaultPrinter(printerName, &dwBufferSize);

②CPrintDialog::GetDefaults
CPrintDialog pd(TRUE);
pd.GetDefaults();
DEVNAMES* pDevNames;
if( pDevNames = (DEVNAMES*)GlobalLock( pd.m_pd.hDevNames ) )
{
TCHAR* pbuff = (TCHAR*)pDevNames;
TCHAR* pPrinterName = pbuff+pDevNames->wDeviceOffset
GlobalUnlock( pd.m_pd.hDevNames );
GlobalFree( pd.m_pd.hDevNames );
}

③CWinApp::GetPrinterDeviceDefaults
PRINTDLG prn;
pApp->GetPrinterDeviceDefaults( &prn );
DEVNAMES* pDevNames = (DEVNAMES*)GlobalLock( prn.hDevNames );
{
TCHAR* pbuff = (TCHAR*)pDevNames;
TCHAR* pPrinterName = pbuff+pDevNames->wDeviceOffset
GlobalUnlock( pd.m_pd.hDevNames );
GlobalFree( pd.m_pd.hDevNames );
}

④GetProfileString
TCHAR buffer[1024];
::GetProfileString(_T("windows"), _T("device"), _T(",,,"), buffer, sizeof(buffer));
TCHAR* printerName = wcstok(buffer, L",");

①~③は今現在通用するちゃんとした方法だ。
④はかなりあやしい方法。
win.iniのwindowsセクションのdeviceから情報を取得するなんて書いてあったけれども、win.iniなんてWindows 10環境においては、ほとんど何にも書いていなかった。それでも実際に動かしたら、以下のような情報が取得できたのだった。
EPSON LP-S300,winspool,Ne04:
ドキュメントを読む限り、Win9x時代の遺物感があるが、互換性のために残された使える方法なのかもしれない。①から③の方法が使えない場合には使ってみよう。しかし、いつか使えなくなるかもしれないというリスクを負わなければならないだろう。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この記事のトラックバックURL:
※言及リンクのないトラックバックは受信されません。