気まま研究所ブログ

ITとバイク、思ったことをてきとーに書きます。

C#

C# SendInput関数のINPUT構造体を64bit対応にする

以前 グローバルキーフックでキーの捕捉と入力を行う なんて記事を書きましたが、.Net 6への移行を進めていると64bitで動作しないことが判明しました。 結論から言うとデータ構造アライメントのせいなのですが、その際の対応と何故起きたのかを考察してみよ…

コンパレータでソート可能なListViewを実装してみる

以前、ヘッダーでソート可能なListViewを実装してみるといったソート可能なListViewを紹介しましたが、より高度なソートとしてコンパレータを使ってソートする方法も紹介します。 ただし、前回のように汎用的な実装ではないので仕様に際しては工夫が必要です…

WPF RichTextBoxでScrollViewerイベントを捉えて末尾を検知する

こんにちは。 前回に続き、またRichTextBoxネタです。 今回はRichTextBoxの内部で動くScrollViewerのイベントを捉えてスクロールを捕捉してついでに末尾を検知してみようと思います。 やることは単純で、TemplateからPART_ContentHostの名前がついたScrollVi…

WPF RichTextBoxのWordWrappingを無効化する

お久しぶりです。めっきり更新が止まってしまいましたが、辛うじて生きています。 さて、今回はWPFネタで、RichTextBoxコントロールのWordWrapping (TextWrapping) を無効化してテキストに応じて横に伸びてもらいます。 RichTextBoxコントロールは標準でWord…

非同期でファイルを複数ダウンロードしてみる

内製アプリで100ファイルくらいダウンロードするのに3つ並列でダウンロードとかしたかったもののあんまりいい方法が無かったので備忘録がてら残しておきます。 基本的にはTaskを使って実装することになりますが、そのまま並列化してしまうとすごい数の並列ダ…

ヘッダーでソート可能なListViewを実装してみる

お久しぶりです。 最近多忙とブログネタが無かったことが重なって更新がかなり空いてしまいましたが、中の人は普通に生きてます。 今回は久しぶりにC# WPFネタで、GridViewColumnを装備したListViewで各GridViewColumnをクリックするとそのカラムに応じてソ…

UbuntuでBaGetを用いてNuGetサーバを構築する

こんにちは。 長らく私のC#プロジェクトでは .Net Frameworkを用いており、外部依存ライブラリも直にdllを参照しておりました。 しかしながら、.Net Standardより複数のフレームワークでビルドが可能となり、そうすると依存ライブラリの管理が厄介になってき…

WPF TreeViewでアイテムのドラッグ移動を実装する

TreeViewを扱っているとアイテムをドラッグアンドドロップで移動させくなることがあります。 Formsでは結構やり方が乗ってるんですが、WPFとなると一切出てこないので実装してみることに。 本当はコードビハインドに書きたくはなかったのですが、こうする以…

ListBoxにてListBoxItemにTextBoxとButtonを配置してみる

久しぶりにWPFのテクニックを紹介します。 ListBoxでファイルパスを管理する機会があって、TextBoxとButtonでファイルパスを入力して管理するというのをやりました。 ListBoxってただ文字列を配置するだけでなく、意外にも好き放題カスタマイズできるので参…

浮動小数点数演算を模倣して誤差を見てみた

浮動小数点数が値によっては誤差が発生することは広く有名な話だと思います。 例えば、「0.1 + 0.2 == 0.3」は多くの言語処理系において等値ではありません。 というのは私も知っていましたが、ではどうして等値ではないのかと聞かれるとフワーッとしたこと…

WPF TreeViewで選択や展開を保持したまま再描写する

こんにちは。 タイトル考えたけどいいのが思いつかなかった。 ただの雑記だしいいか。 本題ですが、TreeViewってあんまり使う機会思いつかないけど地味に結構使うコントロールだと思います。 私も最近XMLエディタを作ることがあって使ったんですが、普通にIt…

C# 高速にフォアグラウンドのプロセス名を取得する

こんにちは。 最近バイクネタかWindowsネタばかりでしたが、今回はC#ネタを少し。 C#ではProcessクラスよりプロセス名の取得が簡単にできます。 しかしながら、プロセス取得は重い処理なため、取得頻度が多いとボトルネックになることがあります。 そこで今…

Moqでvoidメソッドをテストする

テストをちゃんとできるようにと思ってMoqを使って最近勉強しだしたものの、voidメソッドってどうやってテストすんだ・・・? となり、2時間ほど悩んだところなんとかできたのでその時の備忘録です。 テストはあまり勉強してこなかったのでもうちょっといい…

Roslyn CodeAnalysisでC#ソースの解析をしてみる

お久しぶりです。 多忙によりブログネタが全くできず、今まで放置状態でした。 さて、今日はVisual Studio 2015から導入されたRoslynコンパイラのAPIの一部で、C#ソースを解析するCodeAnalysisを使って解析を行ってみます。 大学の卒研で触ることがあったの…

レジストリハイブを読み込み値を操作する

Windows環境下のプログラムではしばしばレジストリを扱うことがあり、Win32APIでアクセスする手法が提供されています。 C#では汎用化されたクラスで提供されていて、レジストリへのアクセスは比較的容易です。 しかしながら、レジストリにはユーザが個別で外…

C# - グローバルキーフックでキーの捕捉と入力を行う

こんにちは、久しぶりにプログラミング関連のネタです。 以前MabinogiKeyConverterというアプリケーションを公開して記事にも適当に書いたのですが、そこで使用しているグローバルキーフックについて残しておきます。 C#では実行アプリケーション上でキーイ…

Xamarin Forms iOSだけでなぜかxmlnsが見つからないエラーが出る

こんにちは。 最近Xamarin Formsを触る機会があり、そこで謎のエラーで詰んだので備忘録的に残しておきます。 おそらく今回触れるライブラリ以外でもすべての外部ライブラリで出ると思います。

Savannah Manager Telnetサーバへ接続をする

こんにちは。 ブログではほとんどSavannah Managerについて触れてきませんでしたが、ちょっとずつ触れていきます。 今回から数回にかけてSavannah Managerの技術的情報を公開していきます。 一応公開する情報はSavannah Manager Libでも実装しているのでそち…

ウィンドウ透過と透過部分のイベント処理

TwitterをしているとTLでふと見かけたので備忘録。 Windownsフォームアプリケーションを作る際、背景を透過したくなることが稀にあります。 単純にTransparentを指定してもサポートされてない旨のメッセージとともに失敗します。

WOW64で起動した際に64bitレジストリへアクセスする

64bit OSにおいて、32bitビルドしたアプリケーションはWOW64を通して実行されます。 普通にプログラムを組んでる分にはさほど意識する必要はありませんが、レジストリを扱う場合少々面倒なことになります。 32bitアプリケーションを32bit OSで実行し、レジス…