WindowsAPI
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…
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 event (Dbt.h) - Win32 apps | Microsoft DocsDBT_DEVICEREMOVECOMPLETE.cppで、とする。 USBデバイスを接続すると、 "DBT_DEVICEARRIVAL"が発生するが、"DBT_DE…
デバイスが接続され使用可能になった時、DBT_DEVICEARRIVALが発生する。DBT_DEVICEARRIVAL event (Dbt.h) - Win32 apps | Microsoft DocsDBT_DEVICEARRIVAL.cppで、とする。 USBデバイスを接続すると、 これが紛れているこれが紛れている。 抜いた時は、 こ…
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 メッセージ (Winuser.h) - Win32 apps | Microsoft Docs具体的には、例えばUSBデバイスが接続された時などである。 WM_DEVICECHANGE.cppで、とする。 起動すると、最初はこう。…
PRINTER_NOTIFY_INFO構造体の要素aData配列は、PRINTER_NOTIFY_INFO_DATA構造体の配列で、ここでさらに印刷状態などを取得できる。PRINTER_NOTIFY_INFO_DATA 構造体 (Winspool .h) - Win32 apps | Microsoft DocsPRINTER_NOTIFY_INFO_DATA.cppで、とする。 M…
取得したPRINTER_NOTIFY_INFOは、FreePrinterNotifyInfoで解放する必要があるらしい。FreePrinterNotifyInfo 関数 (Winspool.h) - Win32 apps | Microsoft DocsFreePrinterNotifyInfo.cppで、FreePrinterNotifyInfoにpPNIを渡して解放する。 Microsoft Windo…
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_INFOを取得するなら、PRINTER_NOTIFY_OPTIONSを、FindFirstPrinterChangeNotificationや、FindNextPrinterChangeNotificationに、指定する必要がある。PRINTER_NOTIFY_OPTIONS 構造体 (Winspool .h) - Win32 apps | Microsoft DocsPRINTER_NO…
FindNextPrinterChangeNotificationの第4引数に、PRINTER_NOTIFY_INFO構造体のポインタのポインタを渡すと、もう少し詳しいプリンタ通知情報が取得できる。PRINTER_NOTIFY_INFO structure (Winspool.h) - Win32 apps | Microsoft DocspPNIがNULLじゃなければ…
FindFirstPrinterChangeNotificationで取得した変更通知ハンドルをCloseHandleで閉じてしまうと、不正なハンドルとして例外が出てしまうことがある。 変更通知ハンドルは、FindClosePrinterChangeNotificationで閉じるべきである。FindClosePrinterChangeNot…
プリンタの監視通知が来たかどうかは、FindNextPrinterChangeNotificationでわかる。FindNextPrinterChangeNotification 関数 (Winspool .h) - Win32 apps | Microsoft Docs監視通知は、監視スレッドを別に立てて、そちらで受けることにした。こんな感じ。 T…
FindFirstPrinterChangeNotificationは、指定のプリンタの状況変化を通知するハンドルを取得できる。FindFirstPrinterChangeNotification 関数 (Winspool .h) - Win32 apps | Microsoft Docs FindFirstPrinterChangeNotificationこれで変更通知ハンドルを取…
今度は、JOB_INFO_2を取得してみる。JOB_INFO_2構造体 (Winspool.h) - Win32 apps | Microsoft DocsJOB_INFO_2は、DEVMODEポインタを取得できるので、それで設定変更できるかどうか試してみる。SetJobのJOB_CONTROL_PAUSEで一時停止、JOB_CONTROL_RESUMEで再…
ScheduleJobで、指定のジョブの印刷要求をする。ScheduleJob 関数 (Winspool. h) - Win32 apps | Microsoft DocsScheduleJob.cppで、とする。 splファイルに印刷内容を書き込んで、ScheduleJob。 UTF-8というかShit_JISというか英字だけなのでASCIIUTF-8とい…
SetJobは、指定された印刷ジョブの、一時停止や、再開や、取り消しなどの制御をする。SetJob 関数 (WinSpool. h) - Win32 apps | Microsoft Docs一時停止させてみる。これを実行すると、 ここで止まるここで止まる。 更新されてない時があるので更新更新され…
GetJobで印刷ジョブ情報JOB_INFO_1を取得できる。JOB_INFO_1構造体 (Winspool.h) - Win32 apps | Microsoft DocsJobIdに加えて、LPTSTRな要素をすべて出力してみる。 JOB_INFO_1.cppで、とする。 だいたい出るけど、pDocumentはワイド文字だからなのかコンソ…
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構造体 (Winspool.h) - Win32 apps | Microsoft Docs実際には、印刷内容の書かれたsplファイルへのパスとジョブIDだけ。それぞれ出力すると、 例えばこんな感じになる例えばこんな感じにな…
WindowsAPIでプリンタを制御して印刷する方法は他にもあって、AddJobで印刷ジョブを追加するという方法もある。AddJob 関数 (Winspool. h) - Win32 apps | Microsoft Docsまず、 ローカルプリンタ、というか、物理プリンタを、既定のプリンタにしておくロー…
lstrcpyで文字列をコピーする。lstrcpyA function (winbase.h) - Win32 apps | Microsoft Docsこれもtcscpyでも出来るけど。 lstrcpy.cppで、"ABCDE"をtszText1からtszText2にコピー。 before: tszText1 = ABCDE tszText2 = after: tszText1 = ABCDE tszText…
lstrlenで、文字列の長さを取得する。lstrlenA function (winbase.h) - Win32 apps | Microsoft Docstcslenとかでもいいけど、こっちのAPIのほうが良かったりする理由もある模様。 (それについてはいずれ扱う。) lstrlen.cppで、"ABCDE"の長さを取得。 tszTe…
FindWindowで指定されたウィンドウクラス名やウィンドウ名のウィンドウを探すことが出来る。FindWindowA function (winuser.h) - Win32 apps | Microsoft Docs ñdN®これを使うと、ミューテックスとかを使わなくても簡易的な二重起動防止が出来る。 // ヘッダ…
SetCursorPosで、指定の位置にマウスカーソルを移動する。SetCursorPos function (winuser.h) - Win32 apps | Microsoft Docs カーソル操作SetCursorPos.cppのWM_LBUTTONDOWNで、クリックされたら、マウスカーソルを(200, 200)の位置にセット。 どこでもいい…
GCL_HBRBACKGROUNDで、ウィンドウクラス既定の背景ブラシを取得したり設定できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs左クリックで赤い背景ブラシに変える。 GCL_HBRBACKGROUND.cppで、最初は白にしておく。 WM_CREATEで、Ge…
WNDCLASS.cbClsExtraでクラス拡張メモリを設定できる。WNDCLASSA (winuser.h) - Win32 apps | Microsoft Docsウェイトカーソルも保持しておく。 WNDCLASS.cppで、2倍すれば、2つ保持できる。クロスカーソルはこれまで通りに0の位置。 ウェイトカーソルは4バ…
GCL_HCURSORで、既定のカーソルハンドルを取得できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs 補助メモリで、それはそれとして、実はクラス拡張メモリを使うと、既定のカーソルハンドルじゃなくても、SetClassLongで保存や、Get…
GetClassLongで、ウィンドウクラスからロング値を取得できる。GetClassLongA function (winuser.h) - Win32 apps | Microsoft Docs 補助メモリたとえば、ウィンドウクラス定義でセットしたカーソルハンドルや背景ブラシハンドルなんかも取得できる。 という…
GetCursorで、現在のカーソルのカーソルハンドルを取得できる。GetCursor function (winuser.h) - Win32 apps | Microsoft Docsカーソルが変わったかを確認してみる。 GetCursor.cppで、WM_LBUTTONDOWN時のハンドルをチェック。 (いちいちMessageBoxとかめん…