スキップしてメイン コンテンツに移動

投稿

全画面表示されずにアスペクト比が正しくない状態で、横に黒い帯が表示される問題の解決法

Intel HD Graphics 530を搭載したDellのパソコンをHDMIでつないで、古めのディスプレイ(iiyamaのProLite 2607WS)につないだのですが、アスペクト比が正しくない状態で、全画面表示されずに横に黒い帯が表示されるという問題が発生しました。下図のような感じです。 ディスプレイ側には1920x1200の解像度で出力したかったのですが、グラフィックの解像度の設定で1920x1080しか選べませんでした。 とりあえず解決した方法 Intel Graphics Control Panel (すでにMicrosoft Storeからの提供は終了)または Intel Graphics Command Center をインストールして、カスタム解像度を設定する。 自分の場合は1920x1200で55Hzとかに設定してうまく行きました。 Intel Graphics Control Panel Intel Graphics Command Center 解決するまでの道のり Intel HD Graphicsでは、カスタム解像度を設定できるという情報を見つける。 ↓ 設定しようにも、今度はIntel Graphics Command Centerが起動しないという問題に遭遇。 ↓ WindowsのEvent Viewerで調べると、下記のエラーログが見つかったが、原因わからず。 Faulting application name: IGCCTray.exe, version: 1.100.3408.0, time stamp: 0x62341a86 Faulting module name: opencl.dll, version: 2.2.8.0, time stamp: 0x5f32b21f Exception code: 0xc0000005 Fault offset: 0x0000000000005c98 Faulting process id: 0x1de4 Faulting application start time: 0x01d87e2b5fc12771 Faulting application path: C:\Program Files\WindowsApps\AppUp.IntelGraphi...

C#でMarshalクラスを使ってbyte配列から構造体を生成する方法

C#の通信プログラムでbyte配列を読み込んで、構造体(struct)を生成したいときにサンプルコードの紹介です。 Genericsを使って任意の構造体をbyte配列から生成できるようにしています。 public static T ReadAsStruct < T > ( this byte [ ] bytes , int startIndex ) where T : struct { // GCHandle.Allocクラスを使ってメモリ上のデータがガーベッジコレクタの対象にならないようにする。 var handle = GCHandle . Alloc ( bytes , GCHandleType . Pinned ) ; try { // Marshalクラスのメソッドを使って、byte配列のIntPtr(ポインタ)を取得。 var ptr = Marshal . UnsafeAddrOfPinnedArrayElement ( bytes , startIndex ) ; // IntPtrで指定した位置のbyte配列から構造体を生成。 return ( T ) Marshal . PtrToStructure ( ptr , typeof ( T ) ) ; } finally { // 重要!!必ずGCHandleを開放して、再びbyte配列がガーベッジコレクタの対象になるようにする。 handle . Free ( ) ; } } ちょっと考察 ■ パフォーマンス 毎回GCHandle.Alloc, Freeを行う分、パフォーマンスのオーバーヘッドが発生します。パフォーマンスが気になる場合は、GCHandle.Alloc, Freeの間に、複数の構造体を生成するようにするとよいかもしれません。 ■ 他の書き方 startIndexがいつもゼロの場合、下記の部分は、 var ptr = Marshal . UnsafeAddrOfPinnedArrayElem...

C#でbyte orderを反転する方法

UDPパケットの受信時に受信したデータのbyte orderを反転する必要がある場合があります。そんな場合に使えるbyte orderを反転するC#のコードの紹介です。 処理の流れは下記になります。 BitConverter.GetBytesメソッドを使って、値のbyte配列表現を取得。 Array.Reverseメソッドでbyte配列の順番を反転する。 BitConverter.ToXXXメソッドで元の値の型に戻す。 ushort, uint, int, ulong, float, doubleなどの型についてコードを示します。 public static void ReverseBytes ( this ref ushort value ) { var source = BitConverter . GetBytes ( value ) ; Array . Reverse ( source ) ; value = BitConverter . ToUInt16 ( source , 0 ) ; } public static void ReverseBytes ( this ref uint value ) { var source = BitConverter . GetBytes ( value ) ; Array . Reverse ( source ) ; value = BitConverter . ToUInt32 ( source , 0 ) ; } public static void ReverseBytes ( this ref int value ) { var source = BitConverter . GetBytes ( value ) ; Array . Reverse ( source ) ; value = BitConverter . ToInt32 ( source , 0 ) ; } public static void ReverseBytes ( this ref ulong value ) { v...

コントロールパネルから不要なアイコンを削除

古いオーディオドライバーをアンインストールしたのですが、どういうわけかコントロールパネルにアイコンが残ったままになってしまいました。 実害はないので無理に削除する必要もありませんが、気になったので削除する方法を調べてみました。 蛇足ですが、消したかったのはサウンドカードのSE-90PCIを使うときにインストールしたEnvy 24関連のコントロールパネルのアイテムです。 Googleで検索すると下記の方法がみつかりました。 (方法1) レジストリエディタを使って項目を削除する タスクバーの検索ボックスから Regedit と入力してレジストリエディタを起動。 下記のキーを探す。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace KEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace クリックして{Default}の欄を見ながら、消したいアイテムを探して削除。 (方法2) レジストリエディタを使って項目を隠す 今回はアイテムを削除したいので目的と合致しませんが、コントロールパネルからアイテムを隠すこともできるようです。 詳細は レジストリエディタを使う方法 を参照してください。 組織で管理しているパソコンの場合は、管理者がPolicyを設定して管理することもできるようです。 詳細は Windows 10 Enterpriseで管理者が実施する方法 を参照してください。 (方法3) cplファイルを削除する C:\Windows\System32 、 C:\Windows\SysWOW64 の各ディレクトリに対して、検索ボックスに .cpl と打ち込んでコントロールパネルの項目を抽出。1つずつファイルを見てそれっぽいものを削除する。 Windows標準のものがほとんどなので、いきなり削除するのではなく、対象と思われる.cplをディレクトリから移動して間違いないか確認してから削除する方が無難だと思います。 Windows標準のものは下記のものがあるので、下記のリストに含まれるもの...

Androidのトップ画面で左スワイプすると出現するGoogleのフィードを無効化する方法

Android 8.0 Oreo では下記の方法で変更できました。 Androidのホームスクリーンを長押し 使っているLauncherにもよりますが、Preferencesを選択 Home screenを選択 Scrolling modeで「Standard scrolling + Google」が選択されているので、「Standard scrolling」を選択 使っているスマートフォンのAndroidのバージョンやLauncherの種類にもよるので、「この手順で決まり」というのは中々いいづらいです。 ホームスクリーンを長押しして、ホーム画面の設定からそれらしい設定を見つけることでしょうか (例えばSwipe to access Google appとかの場合もあるようです)。

DellのパソコンのWindows 10リセット

DellのパソコンでWindows 10をリセットをしようとして、はまったのでメモ。 当初思いついた方法は下記の3つ。 付属していたリカバリ用のCDを使う Windows標準の「 このPCを初期状態に戻す 」を使う リカバリ用のUSBメディアをDell OS Recovery Toolを使って作成してリセットする 2.のWindows標準の「初期状態に戻す」で実施しようとしたろころ PCを初期状態に戻すときにエラーが発生しました。変更は行われませんでした。 というメッセージが表示されてリセットできませんでした。 エラーメッセージをもとに試した方法(上手くいかなかった) ネットで調べて、 こちらの記事 を参考に管理者権限で開いたPowerShellで下記の作業を実行しましたが解決しませんでした(かなり端折ってかいているので、詳細はリンク先を見てください)。 システムファイルチェッカーとDISMコマンドを実行する sfc /scannow DISM.exe /Online /Cleanup-image /Restorehealth PCを再起動 ReAgentc.exeの無効/有効を切り替える reagentc /disable reagentc /enable PCを再起動 上手くいった方法 Dellのサポートページやコミュニティページを見ていたところ、 Windowsの起動オプションでイメージから回復する方法 が書いてありました。 というわけで Shiftキーを押しながら、再起動を実行 、PCを再起動時に出てくるオプションの中から「 Factory Image Restore 」を選択して無事Dell専用のリセットプロセスに入れました。 マウスコンピュータとかはWindows標準の「初期状態に戻す」でうまく行っていたので、軽く考えていました。 ちゃんとメーカーごとにリセット方法は確認しないといけませんね。反省。。。

Dockerのバージョンを取得

Windows上で動作するDockerでは確認すべきバージョンは下記の2つがあります。それぞれWindows PowerShell上で下記のコマンドを実行すれば取得できます。 Docker Desktop for Windows Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName,DisplayVersion | where {$_.DisplayName -like "Docker*"} レジストリから取得しています。 Docker Engine docker version 参考: https://stackoverflow.com/questions/60167878/how-to-check-the-docker-desktop-installed-version