C++

PCに接続されているマイク(オーディオデバイス)を取得し、音量設定をする(EnumAudioEndpoints)(C++版)(ちゃんとReleaseする版)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、マイクスピーカーを扱うC++を書いたが、メモリリークしまくりだった。 https://tera1707.com/entry/2023/10/10/224852 こういうコードだった。 ※リークしている様子がわか…

ウインドウの正しい閉じ方(アプリの外から何をすればいいか?アプリ(ウインドウ)の中では何をすればいいか?)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 アプリ外側から、ウインドウを閉じるにはどうするのが正しいのか? 今のところ、閉じたいウインドウに、WM_CLOSEを送ってあげるのが正しいと思う。 で、閉じる側のウインドウでも、WM_CLOSEが来たら、…

日付時刻とタイムゾーンの取得の仕方(std::chrono使用)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、システム時刻の取得と、それをタイムゾーンに合わせて出力する方法を調べた。 今どきは、それをもっとかっこよくやれるらしい。試してみる。 前提 C++20を使用。 ためした …

「バッテリー節約(~24H1)」と「省電力(24H2~)」と、それらに入ったことの検知

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと Windows10のときには、WM_POWERBROADCASTメッセージのPBT_POWERSETTINGCHANGEの中のPowerSettingがGUID_POWER_SAVING_STATUSのときのDataをみて、0だったらバッテリー節約を抜けた、0以外…

C++でファイルに文字列を読み書きする(wofstream / wifstream)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと C++で、ファイルの読み書きをしたい。 が、FILE*とか、fopen()ではなく、新しいC++の方法でやりたい。 やったこと ifstream、ofstreamを使う。 実験コード #include <iostream> #include <fstream> #include <memory></memory></fstream></iostream>…

nlohmann.jsonでjsonファイルをシリアライズ・デシリアライズする

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと C++のアプリで、jsonを読みたい。 人に聞いたところによると、nlohmann.jsonというライブラリがよいらしい。やってみる。 やったこと 準備 VisualStudio2022で、C++のプロジェクトを作る…

変数のコピーとstd::moveによる所有権の移動

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと あるとき、下記のようなコードを書いた。 class MyClass { private: FILE* fp; public: MyClass() { _wfopen_s(&fp, L"C:\\Users\\masa\\Desktop\\a.txt", L"r"); } ~MyClass() { auto re…

C++のバックグラウンドプロセスの作り方

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前C#で、ウインドウが出ない、バックグラウンドアプリを作った。 https://qiita.com/tera1707/items/c48f13ea01c8615136cb 今回、C++でも同じように、ウインドウのないバックグラウンド…

デスクトップ・UWP・WinUIのウインドウを見分ける

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 他人が作って自分のPCで動いているアプリのウインドウが、なにで出来ているのか(デスクトップアプリなのか、UWPなのか、WinUI3なのか)を知りたい。 以前、この記事で勉強した奴がほぼその…

SetupDi系APIでマイクやカメラのデバイスインスタンスパスを取る

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 最近、Windowsのドライバの情報を取得する方法を練習している。 ドライバ関連?の用語メモ devconの中身を見る①(cmdClasses) devconの中身を見る②(cmdListClass) devconの中身を見る③…

devconの中身を見る③(cmdHwIds)

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと devconで、 devcon hwids <ハードウェアID> devcon hwids =<クラス名> とパラメータを渡して実行したときの処理の中身を追いかけたい。 クラス名とは、devcon classesで取れるクラス名の…

可変引数の関数を作る

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 最近見たコードに「va_start」という、謎の関数?マクロ?が出てきた。 また、引数に「...」とか書いてある関数が出てきた。 どうもこれは、C++の引数を可変個取れる関数らしい。 使い方…

DevConのサンプルコードをビルドして動かす(コンパクト版)

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと Windowsのデバイスマネージャーに出てくるような、デバイスドライバ関連の情報を取る方法を勉強したい。 で、MSのドキュメントを見たりしたが、さっぱりわからない。 職場の方に、「DevCo…

DevConをビルドして動かしてみて、ドライバ等々を取り扱うWindowsのAPIを勉強してみる

VS2022 Communityが入った状態からstart devconのサンプルをMSのrepositoryからダウンロード https://github.com/microsoft/Windows-driver-samples/tree/main/setup/devcon VS2022で開いてビルドしようとすると、msg.hがないと怒られる。 なんで?なにかが…

もうとにかく今すぐデバッグのためのログを出力したいときのクラス(C++)

C++

やりたいこと 以前の記事で、C++でログを残すメソッドを作った。 今回それを使おうと思ったのだが、マルチスレッドな処理で使いたいので、排他処理を入れたい。 また、ちょっと書き方がぐちゃぐちゃなので、多少でもマシなコードにしたい。 実験コード 最近…

ミューテックス(std::mutex)でlockする②

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 前回、std::mutexを使って、排他(C#のlock(obj)的なこと)をやってみた。 が、下記ページによると、 https://cpprefjp.github.io/reference/mutex/mutex.html このクラスのデストラクタ…

ミューテックス(std::mutex)でlockする

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前別の記事で、Win32APIのCreateMutexを使ってC++でMutexで排他するというのをやったが、今回は標準ライブラリというのを使ってやってみる。 実験コード 今回の肝の「Mutex」は、冒頭の…

C++のCOMのコードをC#にもっていきたいときに、interfaceや構造体等の定義の参考にするもの

もくじ https://tera1707.com/entry/2022/02/06/144447#COM やりたいこと COMでなにかをしないといけないときに、自分は C++でまずCOMを使ってやりたいことができるか試す それが出来たら、C#に直す 必要なinterfaceや構造体などを、C++のヘッダーを見ながら…

今使っているスピーカー(デフォルトスピーカー)の情報を取る

もくじ https://tera1707.com/entry/2022/02/06/144447#COM やりたいこと 以前の記事で、つながっているマイク・スピーカーを全部列挙してデバイス名を出す、ということをしたが、今回は、複数のマイク・スピーカーが刺さっているときに、今使われているもの…

WaitableTimerで時間を測る

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと Windowsアプリで、タイマーで時間を測るときに、Windowsがスリープに入っている間も時間をカウントしたいと思った。 (C#で、Thread.Sleep(10 * 60 * 1000)で10分待っている間に、Windows…

SensorManagerで、C++とC#でCOMを使う練習をする その2

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、COMをC++とC#から使う練習をしたつもりだったが、再度COMを使うことになったときに、全然わかってなかったことに気づいてしまったので、もうちょっと頑張ってCOMを使う練習…

Media Foundationでカメラデバイスを列挙する

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 先日、マイク・スピーカーのデバイスを列挙するということをやってみたが、今度はカメラを列挙したい。 で、Windowsには「Media Foundation」というのがあり、それでそういうことができる…

PCのマイク・スピーカー(オーディオデバイス)の音量変更・ミュート状態変更時のイベントを取る

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと マイクやスピーカーの音量変更、ミュート状態が変更されたことを知りたい。 やり方 IAudioEndpointVolumeCallbackインターフェースクラスを実装したクラスをRegisterControlChangeNotify(…

PCにマイクやスピーカー(オーディオデバイス)を抜きさししたときのイベントを取る(C++版)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 前回の記事(下記)で、マイクやスピーカのデバイス(エンドポイント)の名前を取得したり、現在の音量を取得、設定したりした。 https://tera1707.com/entry/2023/10/10/224852 今回は、…

PCに接続されているマイク(オーディオデバイス)を取得し、音量設定をする(EnumAudioEndpoints)(C++版)

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと オーディオのデバイスを列挙して、それらの情報を取りたい。 やったこと MMDeviceEnumeratorのEnumAudioEndpoints()を使う。 APIの説明 https://learn.microsoft.com/ja-jp/windows/win32…

次回のWindows起動時に消してほしいファイルを登録して、消してもらう

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 保存してあるファイルについて、 今すぐは消さない(消せない)けど、次回Windows起動時に、OSに消してもらうということができるらしい。 普通は、アプリは自分自身(exe)を消したりはでき…

GetLastError()のエラーコードの一覧のありか

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと WindowsでC++でコードを書いていて、GetLastErrorでエラーコードを見たときに、そのコードの意味を調べるのだが、毎回どこ見たらいいんだったっけ?となるのでメモっておきたい。 エラー…

指定exeのウインドウにWM_CLOSEを投げる

C++

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと アプリのデバッグで、特定のウインドウメッセージ(WM_XXXXX)を受け取ったときの動作を見たいときがあった。 Windowsサービスのプログラムだと、以前の記事で調べたように、sc controlコマ…

あるデバイスが今WindowsPCにつながってるかどうかを調べる

C++

tera1707.com やりたいこと デバイスマネージャーのデバイスの一覧の中に、特定のデバイスがあるかどうかを探したい。まずは、デバイスマネージャーに出てくる項目を一覧したい。 やり方 やる前メモ 現状、この辺のデバイスがどういう仕組みで動いてるとか、…

キーボードのキーを押したことにする(keybd_event)

C++

もくじ 目次(WPF/xaml/C#/C++関連メモ) - tera1707’s blog やりたいこと Windowsアプリの中から、キーボードのキーを押したことにしたい。 やり方 keybd_event()関数を使う。 下記のコードでは、こんな感じの処理をしている。 Windowsキーを押し下げる Mキー…