CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

通常使うプリンタを取得する

投稿日:

通常使うプリンターを取得する方法をいくつか挙げる。
①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時代の遺物感があるが、互換性のために残された使える方法なのかもしれない。①から③の方法が使えない場合には使ってみよう。しかし、いつか使えなくなるかもしれないというリスクを負わなければならないだろう。

-ソフト開発
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

本質的にPDFに捺印できるようにしたPDFアレコレを公開

先週に引き続き今週もPDFアレコレをバージョンアップ。変更点は以下の通り。 Ver2.02 2020/3/21 ・捺印時に画面でクリックしたところに配置できるようにした。(Ver2.01は固定値) 詳 …

PDFアレコレにページ抽出機能を追加して独自アイコンも組み込んだ

PDFアレコレに念願のページ抽出機能を追加した。ページの操作っていうのはPDF編集においてキモだ。ページの回転を考慮した編集操作が必要だからけっこう苦労しちゃった。変更点は以下の通り。 Ver2.06 …

no image

アプリでzip圧縮と解凍をやりたくてzlibを組み込んでみたんだけど。。

でかいファイルは、圧縮してコンパクトに扱いたくなる。 テキスト形式で定義されているファイルをアプリで読み書きする。 テキストは圧縮すれば1/5くらいになるので、その結果小さくなった ファイルをアプリの …

PDFに捺印できるようにしたPDFアレコレを公開

半年ぶりにPDFアレコレをバージョンアップ。変更点は以下の通り。 Ver2.01 2020/3/15 ・プレビューからの捺印機能に対応。捺印用データはとりあえずpdfのみで配置点が固定。  ※そのうち …

Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃん(3)

vhdを手軽に圧縮できるPowerShellプログラムの決定版。 まずは、前回考えたことを振り返る。。 ps1内のvhdのファイルパスを自分で書き変えなきゃいけないのが難点だから、ps1と同じ場所にあ …