potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Windows フリーウェア強制バンドルのMcAfee Security Scan Plusをインストールしたら「C:\AVScanner.ini」が作成された。

McAfee Security Scan Plusが強制インストールされるフリーウェアをインストールしたところ、Cドライブ直下に「AVScanner.ini」というファイルが作成されました。NTFSではファイル所有者が管理者になっており、重要なファイルかのように削除に管理者権限が必…

C#&Win API MDI子フォームのStatusStripにサイズグリップを強制表示する。

以前の投稿でMDI子フォームはMDI親フォームの最大化時にサイズグリップが非表示になるWinFormsの仕様を紹介しました。この記事ではウィンドウメッセージとToolStripRendererを利用したサイズグリップの強制表示を紹介します。動作確認環境は.NET 8.0ですが、…

C#&WinForms MDI子フォームのStatusStripでサイズグリップが消える。

追伸:解決方法を別の記事に記載しました。 WinFormsでMDI子フォームにStatusStripを置くとMDI親フォームの最大化時にサイズグリップが消えます。GitHub上のソースコードを調べると設計上の仕様です。具体的には次の通りです。 StatusStripはサイズグリップ…

C# WinFormsのクリップボード監視コンポーネント

WinFormsのFormへのクリップボード監視機能の追加、コンポーネントとNativeWindowで思ったより簡単に実装できました。NativeWindowの理解が浅いので問題が残っているかもしれませんが、とりあえず動きはします。動作確認はC# (.NET 8.0)ですが、名前空間など…

C++20 std::views::splitはsubrange型を返す。

C++

std::views::splitの結果をそのままto<std::vector>に渡してコンパイルエラーに悩まされたのでメモとして。 結論としてstd::views::splitの戻り値をstd::ranges::toでSTLコンテナに変換するとき、手前で各要素をstd::wstringやstd::wstring_viewに変換する必要があります</std::vector>…

Windows11 ファイルの新規作成登録の注意点

メモ帳をアンインストールしたらファイルの新規作成からテキストファイルが消えました。修復過程で気付いた注意点を共有します。 「新規作成」項目の実体は拡張子単位のレジストリキーShellNew。HKCR直下の拡張子キーまたは拡張子キー直下のファイル型キーに…

C++&Win API _bstr_tとwil::make_bstr

Windows環境でLPWSTRからスマートポインタ的なBSTRを作成する方法には次の2通りあります。 _bstr_t(...) <comutil.h> wil::make_bstr(...) "wil/com.h" 前者の_bstr_t(...)はコンパイラ付属なので追加インストールが不要ですが、ムーブセマンティクス非対応で独自の参照</comutil.h>…

Googleのログアウト時の広告用検索アクティビティ記録

Googleはログアウト状態だと履歴の記録を止めると思い込んでいましたが、Google検索の「検索でのデータ」と「広告設定」の管理画面を見る限り記録していたようです。 Google 検索でのデータ 日本語版ではGoogle検索トップページ右下の設定をクリック→検索に…

Python 3.11でパッケージのグローバル変数やインポートを隠す

パッケージで使いまわしたいグローバル変数やインポートは__init__.pyと別ファイルの組み合わせで隠せます(見えにくくできます)。具体的には次の手順です。 パッケージ名のディレクトリと__init__.pyを作成する。 グローバル変数やインポートを使いたいス…

C#11 配列の入ったobject型をstring.Joinで結合する

C#

配列の入ったobject型をstring.Join()で結合するにはIEnumerableにキャストしてからOfType<T>()を使います。キャストせず渡すと可変長引数の最初の引数として素直にToString()されます。ちなみにIEnumerableへキャストすると文字列(char[]配列)も分割されるの</t>…

C#&MSVS 17.5.0 Preview 3.0 ユーザーコントロールのobject、nint、nuint型プロパティはプロパティウィンドウで読み取り専用

C#

ユーザーコントロールのobject、nint、nuint型プロパティはプロパティウィンドウで読み取り専用になります。 // UserControl1.Designer.csとUserControl1.resxは既定値なので省略します。 namespace UserControlTest1; public partial class UserControl1 : …

C++&Visual Studio 便利なデバッグ変数情報の視覚化(natvis)と関数使用時の注意

Visual Studio 2022はC++でユーザー定義のデバッグ変数ウィンドウ視覚化に対応しています。この機能natvisでクラスのメンバー関数を使おうとして戸惑ったので共有します。 natvisの紹介 例えば次の2つのファイルmain.cppとtest.natvisがC++プロジェクトにあ…

C# クラスに属性でIIDを持たせる

C#

C#ではカスタム属性でクラス自体にIIDを持たせられます。ただし静的メンバーより動作は遅く、Guidのような非標準型は属性定義時の引数に渡せないようです。 using System.Reflection; Console.WriteLine(IIDAttribute.Of<ClassWithIPersistIID>()?.ToString("B") ?? "(未定義)"); C</classwithipersistiid>…

C# HRESULTパターン、例外パターン、Nullableパターンのどれを使うかで悩む

C#

C#で自分用のクラスライブラリを作るとき、最中にもエラー対処パターンで悩みます。COM開発で使えるデザインパターンはおそらくHRESULTパターン、例外パターン、Nullableパターン(適当に名付けました)なのですが、一長一短です。 HRESULTパターン エラーを…

C# ジェネリック関数でEnum型を整数へ変換する

C#

ジェネリック関数ではenum型は通常の方法((int)...)で整数へ変換できません。 Convert.ToInt32やConvert.ToUInt32等を使えばジェネリック関数でもEnum型を整数へ変換できます。 using System; Console.WriteLine(f(Enum1.A)); string f<T>(T t) where T : Enu</t>…

HTML&JavaScript コメント要素を抜き出す

DOM中のコメント要素はnodeTypeがNode.COMMENT_NODEのノードとして扱われます。なので親要素のchildNodesから取得できます。 // .parent要素からコメント要素を取得する。 parentNode = document.querySelector(".parent") comments = Array.from(parentNode…

ExcelVBA 選択範囲のハイパーリンク設定/解除

Excelで選択範囲のハイパーリンクを設定または解除するVBAコードです。よくあるコードです。 Option Explicit Public Sub 選択範囲のハイパーリンク設定() If Not TypeOf Selection Is Range Then MsgBox "セル範囲が選択されていません。", vbExclamation R…

PowerShell7 URL Protocol値の設定されたProgIDを列挙する

URL Protocol値の設定されたProgIDを列挙するコードです。Get-ItemPropertyコマンドレットは-Nameに配列を与えれば複数の値の有無でキー名を取得できることが分かります。 # 呼び出し側のスコープにHKCRを登録します。 function Register-HKCR { [OutputType…

ImageSharpがライセンス変更により.NET財団を離脱

C#

ImageSharpがライセンス変更により.NET財団を離脱したそうです。AngleSharpが.NET財団のメンバープロジェクトであることに安堵していましたが、こういうこともあるみたいです。 経緯や.NET財団のコメントは公式ブログで確認できます。OSSや年間総売上が一定…

C++20&Win API ビデオキャプチャデバイスの情報を取得する

DirectShowを使ってビデオキャプチャデバイスの情報を取得するコードです。ネット上で様々な方がコードを公開しているコードをWIL対応にしたようなコードです。一部の情報はMicrosoft Docsの「キャプチャ デバイスの選択」を参考にしています。 #include <string> #d</string>…

PowerShell7 登録された拡張子のProgIDとProgIDの概要を取得する

PowerShell 7で登録された拡張子のProgIDとProgIDの概要を取得するサンプルコードです。-Pathと-LiteralPathの挙動の違い、Get-ItemPropertyによる高速化(Get-ChildItem比)等を確認するためのコードです。 # 呼び出し側のスコープにHKCRを登録します。 fun…

C++20&Win API 無線ネットワークのシグナル品質を列挙する

ネイティブWiFi APIを使って無線ネットワークのシグナル強度を列挙するコードです。いくつかのネイティブWiFi APIは独自メモリに確保した構造体に可変長配列を持ちますが、std::unique_ptrとstd::spanを使えば可読性と安全性をまとめて担保できます。 シグナ…

C++20&Win API ファイルセキュリティのグループ名またはユーザー名をまとめて取得する

ファイルのセキュリティ記述子に含まれるグループ名またはユーザー名をまとめて取得するコードです。実際には個々のACEから名前を取得して、それをstd::setでまとめています。 #include <array> #include <string> #include <set> #include <vector> #define STRICT #define NOMINMAX #in</vector></set></string></array>…

C++20&Win API ファイルセキュリティのグループ名またはユーザー名をACE毎に取得する

ファイルのプロパティ、セキュリティタブのグループ名またはユーザー名に表示される名前をACE毎に取得するコードです。セキュリティ記述子とDACLの学習用でもあります。 コード メモ コード #include <array> #include <string> #include <vector> #define STRICT #define NOMINMAX </vector></string></array>…

C++23Preview&Win API ローカルコンピューターのデバイス列挙子とデバイスIDリストの取得

CM系のAPIを使用してローカルコンピューターのデバイス列挙子とデバイスIDリストを取得するコードです。C++23で導入予定のstd::ranges::toを使用しています(MSVCのPreview版)。 #include <ranges> #include <algorithm> #include <iostream> #include <string> #include <vector> #define STRICT #define</vector></string></iostream></algorithm></ranges>…

scales 1.2.1.9000 関数一覧

gpplot2と組み合わせて威力を発揮するscales 1.2.1.9000の関数一覧です。俯瞰するためのものです。 分類された読みやすい詳細はScale Functions for Visualization • scalesのFunction reference • scales、CRANのリファレンスマニュアルをご確認ください。 …

NumPy 1.23 配列作成ルーチンメモ

NumPy 1.23のAPIリファレンスには配列作成のセクションがあり、配列作成に関する関数が7個の分類に分けて紹介されています。ここではその分類に従い、各関数の概要と使用例を紹介します。 現状は公式リファレンスの一部意訳です。詳しい使い方は公式リファレ…

Python3 PEファイルの情報を取得するクラス

標準ライブラリのみ使用してPEファイルの情報を取得するクラスのコードです。現状ではインポート、エクスポート情報のみ対応しています。おそらくインポート情報を持たないファイルだとエラーが発生します。 #test.py from pefileinfo import * with PEFileI…

Python3 more-itertoolsのfirst/first_trueで条件に一致する最初の要素を取得する

Python 3にはmore-itertoolsという外部ライブラリがあり、itertools標準ライブラリでコードのみ紹介された関数やその他の便利な関数が提供されています。この記事はfirstとfirst_trueの紹介です。 more-itertoolsのfirstにジェネレーター式を指定すればC++の…

Python3 リストやタプルの作成はfor構文を[...]*n or 内包表記に変えると要素の型指定が省略できる

型指定してコードを書く場合、for構文でひとつひとつ要素を追加するよりも[...]*nや内包表記、ジェネレーター式+tuple()を使った方が要素の型指定も省略できます。 VSCodeでは次のコードでlist[int]やtuple[int, ...]などが推論されます。 #list1は型指定し…