WindowsAPI

DEV_BROADCAST_VOLUME

dbch_devicetypeが、DBT_DEVTYP_VOLUMEなら、DEV_BROADCAST_HDRポインタをDEV_BROADCAST_VOLUMEポインタにキャストできる。DEV_BROADCAST_VOLUME (dbt.h) - Win32 apps | Microsoft Docs USBメモリーの挿入などを検出する(UsefullCode.net)今度は、DEV_BROAD…

DEV_BROADCAST_HDR

DBT_DEVICEARRIVALや、DBT_DEVICEREMOVECOMPLETEの時、lParamにはDEV_BROADCAST_HDR構造体のポインタが渡される。DEV_BROADCAST_HDR (dbt.h) - Win32 apps | Microsoft Docs渡されたlParamをDEV_BROADCAST_HDR構造体ポインタにキャストして各要素を見てみる…

DBT_DEVICEREMOVECOMPLETE

デバイスの削除が完了した時、DBT_DEVICEREMOVECOMPLETEが発生する。DBT_DEVICEREMOVECOMPLETE event (Dbt.h) - Win32 apps | Microsoft DocsDBT_DEVICEREMOVECOMPLETE.cppで、とする。 USBデバイスを接続すると、 "DBT_DEVICEARRIVAL"が発生するが、"DBT_DE…

DBT_DEVICEARRIVAL

デバイスが接続され使用可能になった時、DBT_DEVICEARRIVALが発生する。DBT_DEVICEARRIVAL event (Dbt.h) - Win32 apps | Microsoft DocsDBT_DEVICEARRIVAL.cppで、とする。 USBデバイスを接続すると、 これが紛れているこれが紛れている。 抜いた時は、 こ…

DBT_DEVNODES_CHANGED

WM_DEVICECHANGEで、さらにwParamがDBT_DEVNODES_CHANGEDの時は、デバイスノードが変更になった時。DBT_DEVNODES_CHANGED event (Dbt.h) - Win32 apps | Microsoft DocsDBT_DEVNODES_CHANGED.cppで、wParamがDBT_DEVNODES_CHANGEDなら、MessageBoxで"DBT_DEV…

WM_DEVICECHANGE

WM_DEVICECHANGEは、デバイスの状態が変化した時に通知される。WM_DEVICECHANGE メッセージ (Winuser.h) - Win32 apps | Microsoft Docs具体的には、例えばUSBデバイスが接続された時などである。 WM_DEVICECHANGE.cppで、とする。 起動すると、最初はこう。…

PRINTER_NOTIFY_INFO_DATA

PRINTER_NOTIFY_INFO構造体の要素aData配列は、PRINTER_NOTIFY_INFO_DATA構造体の配列で、ここでさらに印刷状態などを取得できる。PRINTER_NOTIFY_INFO_DATA 構造体 (Winspool .h) - Win32 apps | Microsoft DocsPRINTER_NOTIFY_INFO_DATA.cppで、とする。 M…

FreePrinterNotifyInfo

取得したPRINTER_NOTIFY_INFOは、FreePrinterNotifyInfoで解放する必要があるらしい。FreePrinterNotifyInfo 関数 (Winspool.h) - Win32 apps | Microsoft DocsFreePrinterNotifyInfo.cppで、FreePrinterNotifyInfoにpPNIを渡して解放する。 Microsoft Windo…

PRINTER_NOTIFY_OPTIONS_TYPE

PRINTER_NOTIFY_OPTIONSのpTypesに、PRINTER_NOTIFY_OPTIONS_TYPEの配列を指定し、それぞれのPRINTER_NOTIFY_OPTIONS_TYPEのpFieldsに、PRINTER_NOTIFY_FIELD_XXXや、JOB_NOTIFY_FIELD_XXXなどの定数配列を指定すると、pPNIが取れる。PRINTER_NOTIFY_OPTIONS…

PRINTER_NOTIFY_OPTIONS

PRINTER_NOTIFY_INFOを取得するなら、PRINTER_NOTIFY_OPTIONSを、FindFirstPrinterChangeNotificationや、FindNextPrinterChangeNotificationに、指定する必要がある。PRINTER_NOTIFY_OPTIONS 構造体 (Winspool .h) - Win32 apps | Microsoft DocsPRINTER_NO…

PRINTER_NOTIFY_INFO

FindNextPrinterChangeNotificationの第4引数に、PRINTER_NOTIFY_INFO構造体のポインタのポインタを渡すと、もう少し詳しいプリンタ通知情報が取得できる。PRINTER_NOTIFY_INFO structure (Winspool.h) - Win32 apps | Microsoft DocspPNIがNULLじゃなければ…

FindClosePrinterChangeNotification

FindFirstPrinterChangeNotificationで取得した変更通知ハンドルをCloseHandleで閉じてしまうと、不正なハンドルとして例外が出てしまうことがある。 変更通知ハンドルは、FindClosePrinterChangeNotificationで閉じるべきである。FindClosePrinterChangeNot…

FindNextPrinterChangeNotification

プリンタの監視通知が来たかどうかは、FindNextPrinterChangeNotificationでわかる。FindNextPrinterChangeNotification 関数 (Winspool .h) - Win32 apps | Microsoft Docs監視通知は、監視スレッドを別に立てて、そちらで受けることにした。こんな感じ。 T…

FindFirstPrinterChangeNotification

FindFirstPrinterChangeNotificationは、指定のプリンタの状況変化を通知するハンドルを取得できる。FindFirstPrinterChangeNotification 関数 (Winspool .h) - Win32 apps | Microsoft Docs FindFirstPrinterChangeNotificationこれで変更通知ハンドルを取…

JOB_INFO_2

今度は、JOB_INFO_2を取得してみる。JOB_INFO_2構造体 (Winspool.h) - Win32 apps | Microsoft DocsJOB_INFO_2は、DEVMODEポインタを取得できるので、それで設定変更できるかどうか試してみる。SetJobのJOB_CONTROL_PAUSEで一時停止、JOB_CONTROL_RESUMEで再…

ScheduleJob

ScheduleJobで、指定のジョブの印刷要求をする。ScheduleJob 関数 (Winspool. h) - Win32 apps | Microsoft DocsScheduleJob.cppで、とする。 splファイルに印刷内容を書き込んで、ScheduleJob。 UTF-8というかShit_JISというか英字だけなのでASCIIUTF-8とい…

SetJob

SetJobは、指定された印刷ジョブの、一時停止や、再開や、取り消しなどの制御をする。SetJob 関数 (WinSpool. h) - Win32 apps | Microsoft Docs一時停止させてみる。これを実行すると、 ここで止まるここで止まる。 更新されてない時があるので更新更新され…

JOB_INFO_1

GetJobで印刷ジョブ情報JOB_INFO_1を取得できる。JOB_INFO_1構造体 (Winspool.h) - Win32 apps | Microsoft DocsJobIdに加えて、LPTSTRな要素をすべて出力してみる。 JOB_INFO_1.cppで、とする。 だいたい出るけど、pDocumentはワイド文字だからなのかコンソ…

GetJob

GetJobは、指定された印刷ジョブ情報を取得する。GetJob 関数 (Winspool.h) - Win32 apps | Microsoft DocsADDJOB_INFO_1のPathで指定されたJOB_INFO_1を取得する。 (ADDJOB_INFO_1とJOB_INFO_1は微妙に違う。) GetJob.cppで、として、 こんな感じでJOB_INFO…

ADDJOB_INFO_1

ADDJOB_INFO_1は、追加したジョブ情報を格納している。ADDJOB_INFO_1構造体 (Winspool.h) - Win32 apps | Microsoft Docs実際には、印刷内容の書かれたsplファイルへのパスとジョブIDだけ。それぞれ出力すると、 例えばこんな感じになる例えばこんな感じにな…

AddJob

WindowsAPIでプリンタを制御して印刷する方法は他にもあって、AddJobで印刷ジョブを追加するという方法もある。AddJob 関数 (Winspool. h) - Win32 apps | Microsoft Docsまず、 ローカルプリンタ、というか、物理プリンタを、既定のプリンタにしておくロー…

lstrcpy

lstrcpyで文字列をコピーする。lstrcpyA function (winbase.h) - Win32 apps | Microsoft Docsこれもtcscpyでも出来るけど。 lstrcpy.cppで、"ABCDE"をtszText1からtszText2にコピー。 before: tszText1 = ABCDE tszText2 = after: tszText1 = ABCDE tszText…

lstrlen

lstrlenで、文字列の長さを取得する。lstrlenA function (winbase.h) - Win32 apps | Microsoft Docstcslenとかでもいいけど、こっちのAPIのほうが良かったりする理由もある模様。 (それについてはいずれ扱う。) lstrlen.cppで、"ABCDE"の長さを取得。 tszTe…

FindWindow

FindWindowで指定されたウィンドウクラス名やウィンドウ名のウィンドウを探すことが出来る。FindWindowA function (winuser.h) - Win32 apps | Microsoft Docs ñdN®これを使うと、ミューテックスとかを使わなくても簡易的な二重起動防止が出来る。 // ヘッダ…

SetCursorPos

SetCursorPosで、指定の位置にマウスカーソルを移動する。SetCursorPos function (winuser.h) - Win32 apps | Microsoft Docs カーソル操作SetCursorPos.cppのWM_LBUTTONDOWNで、クリックされたら、マウスカーソルを(200, 200)の位置にセット。 どこでもいい…

GCL_HBRBACKGROUND

GCL_HBRBACKGROUNDで、ウィンドウクラス既定の背景ブラシを取得したり設定できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs左クリックで赤い背景ブラシに変える。 GCL_HBRBACKGROUND.cppで、最初は白にしておく。 WM_CREATEで、Ge…

WNDCLASS.cbClsExtra

WNDCLASS.cbClsExtraでクラス拡張メモリを設定できる。WNDCLASSA (winuser.h) - Win32 apps | Microsoft Docsウェイトカーソルも保持しておく。 WNDCLASS.cppで、2倍すれば、2つ保持できる。クロスカーソルはこれまで通りに0の位置。 ウェイトカーソルは4バ…

GCL_HCURSOR

GCL_HCURSORで、既定のカーソルハンドルを取得できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs 補助メモリで、それはそれとして、実はクラス拡張メモリを使うと、既定のカーソルハンドルじゃなくても、SetClassLongで保存や、Get…

GetClassLong

GetClassLongで、ウィンドウクラスからロング値を取得できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs 補助メモリたとえば、ウィンドウクラス定義でセットしたカーソルハンドルや背景ブラシハンドルなんかも取得できる。 という…

GetCursor

GetCursorで、現在のカーソルのカーソルハンドルを取得できる。GetCursor function (winuser.h) - Win32 apps | Microsoft Docsカーソルが変わったかを確認してみる。 GetCursor.cppで、WM_LBUTTONDOWN時のハンドルをチェック。 (いちいちMessageBoxとかめん…