ラスプリンタとは何ですか?

このQ&Aのポイント
  • ラスプリンタとは、GetDeviceCapsの戻り値を使用してデバイスがプリンタであるか否かを判定するAPIです。
  • RASPRINTERは、GetDeviceCapsの戻り値であり、プリンタであることを示します。
  • コントロールパネルのデバイスとプリンタの操作とは、ラスプリンタとの関係性については明確ではありません。
回答を見る
  • ベストアンサー

ラスプリンタとは何ですか?

APIのGetDeviceCapsの戻り値を使用して、デバイスがプリンタであるか否かを判定しています HDC MyHDC = CreateDC(lpszDriver, lpszDevice, lpszOutput, lpInitData); if (GetDeviceCaps(MyHDC, TECNOLOGY) == DT_RASPRINTER) { ここではプリンターの処理をしています } else { プリンター以外の処理をしています } 戻り値がDT_RASPRINTERであれば、プリンタであると思っております ☆そこで質問です☆ (1) RASPRINTERとは何ですか? (2) コントロールパネル ⇒ デバイスとプリンタ の操作によって表示される色々な入出力装置とは如何なる関係があるのでしょうか? 色々調べましたが判然と致しません 宜しくご指導お願い申し上げます

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.1

(1) http://msdn.microsoft.com/en-us/library/windows/desktop/dd144877%28v=vs.85%29.aspx を読めばDT_RASPRINTERはRaster Printerの事だとわかると思います。後はRaster Printerを調べればよいだけです。 (2) 話が飛躍しすぎて何を質問されてるのかわかりません。先のurlにもGetDeviceCapsの戻り値と「コントロールパネル~いろいろな入出力装置」に何らかの関係があるなど書いてありませんし。

sato-may
質問者

お礼

回答ありがとう

関連するQ&A

  • プリンターであるか否かの判断?

    特殊な目的の為、文字列変数Deviceを受取りその内容がプリンターを示すものであれば、APIのCreatDCでプリンターのHDCを作成します そしてそのプリンターのHDCを使用してStartDoc、StartPage、Textout等の一連の印刷動作をしたいと思います それには先ず文字列変数Deviceの内容がプリンターを示しているか? を判別しなくてはなりません 色々調べましたら WINSPOOL である場合はプリンターです 内容が NULL(空白)であればプリンターと判断すべきらしいです また内容が "ディスプレイ" ならば当然除外します しかしこんな判定法で宜しいのでしょうか? 特に文字列変数Deviceの内容が、コントロールパネル⇒デバイスとプリンター によって表示される Canon MP280 series Printer などの具体的なプリンター名称であった場合不安です 文字列変数Deviceの内容がプリンターを示しているか否かを判定するAPIなどはありませんが? また他の手段で簡単に判別する方法をご存知でしたら教えて下さい 宜しくお願い申し上げます

  • StartPage(hdc)のhdcはプリンタだけ

    StartPage(hdc)のhdcは必ずプリンタですか? Windows API に StartPage(hdc)、 EndPage(hdc)があります hdcにはプリンタのデバイスコンテキストのハンドラーを指定します ここで逆説的な質問です 『StartPage、EndPageをAPIフックして捕まえたhdcは必ずプリンタもしくはプリンタコンパティブルのメモリーDCですか?』 プリンタ類似以外のデバイスにStartPage、EndPageのAPIが指定されることはありますか?

  • HDCを他の領域にコピーするには?

    HDC hdc = CreateDC("WINSPOOL","プリンタの名前",NULL,NULL); ....(1)プリンタのHDCの作成 HDC hdcMemDC = CreateCompatibleDC(hdc); ....(2)前者と同じ仕様のメモリーHDCの作成 hdcとhdcMemDCはハンドラへのポインタだと思います hdc ....(ポインタ)....... hdcの内容 (A) hdcMemDC ....ポインタ.......hdcMemDCの内容 (B) もしBをA領域に書き写せば TextOut(hdc,0,0,"メモリーDCに書き込めると思います",100); とするとプリンタにではなくメモリ-DCに書込むと思います   ⇒ BをAに書き写さずTextOut(hdcMeMDC,0,0,"メモリーDCに書き込めると思います",100);と同じ結果になるでしょう ところが『BをAに書き写す』方法が分かりません ハンドラの構成、サイズなどの資料を探しましたが適当なものが見つかりません ご存知でしたら教えてください 【追加説明】 TextOut(hdc,0,0,"メモリーDCに書き込めると思います",100); のステートメントを TextOut(hdcMeMDC,0,0,"メモリーDCに書き込めると思います,100); にするには一般的にはAPIフックが必要になります ⇒ もちろん全ソースの手修正でも可能ですが...... APIフックも手修正も回避したいのです

  • CreateDCA、CreateDCWのパラメータ

    HDC CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutPut, CONST DEVMODE *lpInitData)にはUnicode版とANSI版が実装されます よってCreateDCAでは HDC CreateDCA(PCTSTR lpszDriver, PCTSTR lpszDevice, PCTSTR lpszOutPut, CONST DEVMODE *lpInitData) CreateDCWでは HDC CreateDCW(LCPWSTR lpszDriver, LCPWSTR lpszDevice, LCPWSTR lpszOutPut, CONST DEVMODE *lpInitData) と定義されているのだと思い、上記の形式で呼び出しましたがエラーとなってしました Run_Time check Failure #0- The Value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling conversion with a function pointer declared with a different calling conversion. なぜCreateDCではなくCreateDCAとCrateDCWを直接呼び出すような面倒なことをしているかというと、APIフックでCreateDCを引っ掛けたいのです CreateDCはCreateDCA、CreateDCWになってしまうのでCreateDCではフック出来ません そこでCreateDCA、CreateDCWでフックして当方の処理を行い、その後で本来のCreateDCA、CreateDCWを呼び出しております ところが呼出し方が悪いらしく上記の英文エラーが出てしまいます CreateDCA、CreateDCWで検索したのですが適当な資料が見当たりません 目下のところ手も足も出ません CreateDCA、CreateDCWのパラメータ指定法(多分エラーの原因だろうと思っていますので・・・)をご存知でしたらご指導願います

  • FDユニットとMOユニットの判定

    早速質問します。 端末に接続されている有効なドライブの検索に、API関数の「GetDriveType」を使用して以下のモジュールを作成しています。 'A~Zまでを検索 For iCnt = 1 To 26  'A~Zのドライブを設定  szBuffer = Chr(64 + iCnt) & ":\"  'API呼出し  uType = GetDriveType(szBuffer)  '戻り値の判定  IF uType=0 or uType=1 then   MsgBox szBuffer & "無効ドライブ"  Else   MsgBox szBuffer & "有効ドライブ"  End IF Next このAPIの戻り値ですと、FDユニットとMOユニットは共に「uType=2(Removable)」のリターンとして帰ってきます。 FDとMOを区別する方法はないでしょうか? ちなみに、それぞれ媒体を挿入している場合は媒体容量で判定できるのですが、媒体を挿入していない状態で判定したいのでご教授をお願いします。

  • BitBltについて。

    どなたか経験のある方、わかる方居られましたら教えてください。 プリンタのデバイスコンテキストからメモリDCに描画してビットマップを作成したいと思っているのですが、プリンタDCからメモリDCへのBitBltがうまくいっていないのか、完成イメージが真っ黒になります。 hMemDC = CreateCompatibleDC(hPrinterDC); hBitmap = CreateCompatibleBitmap(hPrinterDC,lnWidth,lnHeight); Obj = (HBITMAP)SelectObject(hMemDC,hBitmap); iRet = GetDeviceCaps(hMemDC,RASTERCAPS); // iRet の戻り値は 28313(10進)でした。 // コピー iRet = BitBlt(hMemDC,0,0,lnWidth,lnHeight,hPrinterDC,0,0,SRCCOPY); // iRet の戻り値は 1 になってました。 本来は lnHeight の値が BitBlt の戻り値になるのかと思いますがうまくいきません。 hPrinterDC はもともと印刷用の関数で使用しているものなので、そこには問題が無いのではないかと自分では思っていますが、わかる方居られましたら教えていただけませんでしょうか?

  • 印刷範囲を規定するAPI?

    以下のような機能を持つAPIがあると耳にしたことがあります 色々と調べましたが見付けられません もしご存じであればお教え願います 探しているAPIの名前を仮に APIxxx とします BOOL APIxxx(hdc, int Xpoint, int Ypoint); hdc はプリンターのディバイスコンテキスト Xpoint、Ypoint は (0, 0)を原点とするプリンタ印刷領域の座標です まず印刷領域に textout(hdc,~) Rectangle(hdc,~) などのAPIを使用して印刷イメージを組立てます この後、今の主題である APIxxxを発すると (0, 0)~(Xpoint, Ypoint)の四角形以外の印刷データは無視され、Endpage APIを出して印刷開始しても実際に印刷されるのは(0, 0)~(Xpoint, Ypoint)の四角形範囲だけとなる 四角形以外の残りの部分は白紙状態で印刷されます このような機能を持つAPIxxxを探しています うろ覚えであるので説明に誤りがある可能性が相当あります 類似のAPIでも結構です 似たような機能のAPIをご存知でしたら教えてください 補足】この APIxxxは Excelの印刷範囲を指定操作 印刷するセルを選択 ⇒ ページレイアウト ⇒ 印刷範囲 ⇒ 印刷範囲の設定 で印刷セルの範囲を指定する時にも使用されているとも聞いたことがあるような気がします

  • AlphBlendとExcel???

    自社で作成した特定の印刷プログラム(4ケあります)とWord全部の印刷ドキュメントには取扱注意を要する情報が印刷されています これらの特定印刷プログラムやWordで印刷したドキュメントの取扱注意を促すため、用紙全体を薄い黄色に印刷しています まるで用紙全体に黄色いカバーを掛けたように見えますので、充分な注意喚起が出来ます 黄色いカバーをする方法は以下のように単純です 印刷開始のトリガーになるAPIであるEndPageにAPIフックを仕掛けます 【APIフックは ADVANCED WINDOWS 著者 Jeffrey Ricther 発刊元 Microsoft社 を参考にさせて頂きました】 EndPageをフックしたらプログラムが自社開発した特定印刷プログラム、またはWord文書であるか否かを判定します これにはGetModuleFileNameWを呼出し、戻り値の内容を調べます リスト(1)を箇所です 4ケの特定印刷プログラム、Word文書である際には次の処理(薄い黄色でカバー)に流し、他の場合にはいきなり(3)の本物のEndPageに移します 薄い黄色でカバーする方法は、まずプリンターと同じメモリーDCを作ります そのメモリーDC全体を黄色に塗り潰します メモリーDCに作った黄色イメージを10%の透明度でプリンタ領域に上書きします すると実際に印刷された用紙は取扱注意を促す黄色になります 具体的なフックプロセスの主要部分は次の通りです 【実際にはもっとゴチャゴチャしていますが、話を単純化するため枝葉をカットしてあります】 int WINAPI Hook_EndPage(HDC hdc) { (1)GetModuleFileNameWでプログラム名を調べ、特定の印刷プログラム・Word文書であれば次の処理をする もし異なればイキナリ(3)へ飛ばします int Xsize = GetDeviceCaps(hdc, HORZRES); //プリンタの領域サイズを調べる int Ysize = GetDeviceCaps(hdc, VERTRES); hdcMemDC = CreateCompatibleDC(hdc); //プリンタと同じメモリーDCを作る HBITMAP hDrawBmp = CreateCompatibleBitmap(hdc,Xsize,Ysize); //調べたプリンタサイズと同 一のビットマップを作る SelectObject (hdcMemDC, hDrawBmp); //ビットマップをメモリーDCに結び付ける HPEN NEWPEN,OLDPEN; NEWPEN = CreatePen(PS_DASH, 2, RGB(255,255,000)); //黄色ペンを作る OLDPEN = (HPEN)SelectObject(hdcMemDC,NEWPEN); //作った黄色ペンをメモリーDCに結び付ける HBRUSH NEWBRUSH,OLDBRUSH; NEWBRUSH = CreateSolidBrush(RGB(255,255,000)); //黄色のブラシを作る OLDBRUSH = (HBRUSH)SelectObject(hdcMemDC,NEWBRUSH); //作った黄色ブラシをメモリーDCに結び付ける Rectangle(hdcMemDC,0,0,Xsize,Ysize); //黄色ペン、ブラシでメモリーDC全体を真黄色にする SelectObject(hdcMemDC,OLDPEN); //ペンとブラシを元に戻す SelectObject(hdcMemDC,OLDBRUSH); ここを(2)とします(後で説明します)   //メモリーDCに作成した黄色イメージ全体を10%の透明度でプリンタ領域に上書きする BLENDFUNCTION blendFunction; ::memset (&blendFunction, 0, sizeof(blendFunction)); //ゼロクリア   blendFunction.BlendOp = AC_SRC_OVER;   blendFunction.BlendFlags = 0; blendFunction.SourceConstantAlpha = 256/10;  ← 10%の透明度を指定   blendFunction.AlphaFormat = 0;   bool rtn = AlphaBlend(hdc, 0, 0, Xsize, Ysize, hdcMemDC, 0, 0, Xsize, Ysize, blendFunction);   //オリジナルEndPageを呼び出す   int nResult = ((PFNENDPAGE)(PROC) g_EndPage)(hdc);   (3)   return nResult; } このEndPageフックを仕掛けるとC#、C++で作った自社の特定印刷プログラムと全てのWord文書は意図した通り黄色いカバーが掛って印刷されます ところが今回、Excel文書も黄色いカバーを掛けることになりました (1)の箇所でExcelも選別してやればOKになるだろうと安易に考えていましたが、実際にテストしてみると次のような現象が発生してNGなのです Excel文書は従前のごとく印刷されます(黄色いカバーが掛っていません) 次に10%の透明度で印刷された黄色い用紙が出てきます すなわちプリンタ領域に出力されたExcel文書とメモリーDCの黄色いイメージが重ならず別々に印刷されてしまいます このとき印刷中のExcel画面には   現在1/1ページを印刷中です   ⇒ 添付画像を参照ください と表示されますので、Excel自体は1ページの文書を印刷しているつもりなのでしょう Excel文書の後に黄色いカバーがくっついていると思っているのでしょう なぜAlphBlend APIはメモリーDCイメージをExcelプリンター領域に重ねてくれないのでしょうか? まるでExcelが自分の出力領域にロックを掛けているような印象です 念の為、(2)に SetTextAlign (hdc, 0);    //テキスト配置オプションではカレントポジションを使用しない MoveToEx(hdc, 0, 0, NULL);  //カレントポジションをゼロに戻す の2ラインを入れて、印刷カレントポジションを原点に戻しても結果は同一でした 質問】 1. なぜExcel文書だけ黄色いカバーが重ならないのでしょうか? 2. Excelの印刷範囲指定操作    印刷するセルを選択 ⇒ ページレイアウト ⇒ 印刷範囲 ⇒ 印刷範囲の設定 が関係しているのではないかとの参考意見を同僚がくれました では上記の操作はどのようなAPIを出しているのでしょうか? もしそのAPIが分かればフックして調べてみたいと思います このExcel文書に黄色いカバーを掛けることで相当な時間を費やしてしまいました でも手掛かりが全くなく困っております どんなヒントでも結構です、ぜひ教えてください、お願い申し上げます

  • マウスの反応

    C言語とWIN32APIでプログラミングしています。 いつも多くの方にお世話になっています。 ■ボタンの上にマウスカーソルが来た時、ボタンが反応する様な事を考えています。 ■Web画面でよくあるロ-ルオーバーの様な事です。 上記の様な事を思い、下記の様に記載しました(概略)。 ところが、クリックには反応しますが オンマウスには反応しません。 ■質問 ・マウスカーソルがボタンに乗った時、反応するには何が必要ですか? case WM_DRAWITEM: if(wp==ID_BTN_0) { DrawText(DrawItem->hDC,str,-1,&DrawItem->rcItem,DT_CENTER); ******************************************************** //オンマウスで色を反転する.....目的 if((DrawItem->itemAction) & (ODA_FOCUS)){ InvertRect(DrawItem->hDC,(LPRECT)&DrawItem->rcItem); } ******************************************************** if((DrawItem->itemState) & (ODS_SELECTED)){ DrawEdge(DrawItem->hDC,(LPRECT)&DrawItem->rcItem,EDGE_SUNKEN,BF_RECT); }else{ DrawEdge(DrawItem->hDC,(LPRECT)&DrawItem->rcItem, EDGE_RAISED,BF_RECT); } } break;

  • Access 添付ファイル型フィールドの判定

    お世話になります。 Access2010 テーブルに添付ファイル型のフィールド「画像」があります。 この画像にファイルが登録されているか否かの判定はどのように するのでしょうか。 なお、以下のようにしてみましたが、画像の有無にかかわらずFalse となってしまうことを確認しました。  If IsNull(テーブル![画像])= False Then     <画像が登録されていた場合の処理>  Else     <画像が登録されていなかった場合の処理>  End If ご教示の程、宜しくお願い致します。

専門家に質問してみよう