Windows

[WPF]コンボボックスのリストを変更した時にselectedItemを見失うのを防ぐ

Mohmongar
コンボボックスのリストの中身を変更(ソートとか)した時にselectedItemを見失うのを防ぐ。Tagプロパティを一時保存に使用するのであまり美しくない? private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var combo = (ComboBox)sender; object item = combo.SelectedItem; if (item == null) { combo.SelectedItem = combo.Tag; } else { combo.Tag = combo.SelectedItem; } }

末尾にドット(.)

Mohmongar
Windowsのプログラムのミスで末尾にドットが付いたフォルダを作成してしまい、そのフォルダが消せなくなった。ネットを調べると結構出てくる。末尾のドットは本来MS-DOSの時代から使用禁止で、普通は”AAA."とか書いても"AAA"に変換されてたんだが、プログラム上では誤ってできてしまうことがある。そんなファイルの消し方は、フォルダ名をUNCの書き方で先頭に"\\?\"をつけてフルパスで書いてやればそのファイルにアクセスできる。UNC記法はWindowsネットワークでのリソースアクセスのため拡張されたパス名の書き方で、そのうちの機能の一つとして先頭に"\\?\"をつけるとWindows内部のすべての文字列解析を無効にし、それに続く文字列をファイルシステムに直接送信するようにWindows APIに指示するらしい。つまり".."とかの相対パスとかは使えなくなるけど、よけいなことはしなくなる。例えばそんなフォルダを消すにはコマンドラインから rd "\\?\c:\users\hogehoge\Desktop\folder." とすることになる。 参考にしたページは、 ファイル名に使わない方が良い文字 Naming Files, Paths, and Namespaces | Microsoft Docs でした。

No Man’s Skyにはまる

Mohmongar
ひさしぶりにゲームにはまる。発売当初よりちょっと興味があったのだが、始めの時はあまり評判がよくなかったのでスルーしていた。その後、大型更新後にましになったとYoutubeのゲーム実況とかでよく見るようになり、そこへきてSteamセールで半額となったのでそのときポチってしまった。飛んで、歩いて、掘って、組立てて、と基本的に作業ゲーなのだが、延々と続けている。こんなにずっとゲームしているのはSkyrim以来だ。あとCivlizationに近いものがある。あれも止め時がわからない。一つミッションをこなすたびに、次々とやることが増えていく。というか自分で増やしていく。お使いゲーだとどこかで飽きてくるのだが、まだ飽きない。早く寝ないと。

TS/M2TSから音声データの抽出

Mohmongar
TS/M2TSデータから音声データ(AC3)を抽出する方法は以下の通り。 参考はTMPGEnc Video Mastering Works5でDTS-HD Master Audioの音声を抽出する方法 : とあるヒロップの日常など。感謝!。tsMuxeRはtsMuxeR - Transport Stream Muxer - My Ubuntu Corner of the Web、eac3toはeac3to - audio conversion tool - Doom9's Forum、eac3toguiはEAC3toGUI 2.00 | Software - Digital Digestあたりを探してください。 tsMuxeRを使って、TS/M2TSからAudioデータを抽出する EAC3toGUIを使って、dtsをac3に変換する

[Forms][C#]メニューに排他的にチェックをいれる

Mohmongar
C#でFormsを使ってプログラムする機会があって調べたメモ。メニューのあるアイテムの下層をひとつのグループとみなし、そのグループ中で一つだけチェックが入る前提で、メニューを選択した際にチェックをいれる処理を統一したもの。親menu1の下に子menu1_menu1,menu1_menu2,... があるとして、各メニューの処理時に同じCheckMenuExclusivelyを呼び出すことで排他的にチェックマークが入る。当然チェックを入れる以外の処理は別途必要。たぶん似たようなものはそこらに転がってるけど、子メニューを示すメソッドがItemsではなくDropDownItemsであったことため、しばし悩んだのでメモしておく。 void CheckMenuExclusively(object sender, ToolStripMenuItem upper) { foreach (ToolStripMenuItem item in upper.DropDownItems) { if (object.ReferenceEquals(sender, item)) { item.Checked = true; } else { item.Checked = false; } } } private void menu1_menu1_Click(object sender, EventArgs e) { CheckMenuExclusively(sender, menu1); }

[Forms][C#]BindingListでデータバインドする

Mohmongar
ひさしぶりにWindowds formsのプログラムをC#で作成中にコントロールにデータバインドをしようとしたら、ListBoxなど一部のコントロールでは<INotifyPropertyChangedを使った更新が効かないことが分かったので、BindingListで使用したのでメモ。(というか本来ListboxにバインドできるのはSelectedIndex ,SelectedItem ,SelectedValue,Tagだけらしい)。 ここでBindingListを使わずにtestclassを直にDataSourceにバインドすると、PropertyChangedがnullとなる。 t = new testclass(); t.display = "one"; testdata = new BindingList&lt;testclass&gt;(); testdata.Add(t); listBox1.DisplayMember = nameof(display); listBox1.DataSource = testdata; ついでによく忘れるので、INotifyPropertyChangedの書き方。 using System.ComponentModel; public class testclass : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName = "") { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } public string _display; public string display { get { return _value; } set { if (value != _display){ _display= value; NotifyPropertyChanged(nameof(display)); } } } } ほかにもいろんなやりかたがあるらしい。参考はこのページ「データ バインディング - .

[Sniper Elite 4]Stability

Mohmongar
Sniper Elite 4で武器のUpgrade条件にStabilityというのがあるが、この解除条件である"50 Shoulder-Assisted Kills"がどうすればできるのか、ググってもよくわからなかったが、ふとしたことでわかった。コントローラの「LT」ボタンを全押しするとスコープを覗いて照準を合わせるのだが、これを半押しすると、銃を構えて肩越しに照準を合わせる形になる。こんなことに気づくまでだいぶ時間を費やした・・・

ffmpegで先頭何秒かをカット

Mohmongar
fmmpegで先頭何秒かをカット。-ssの順番、エンコード有無で精度が変わるようです。参考はこちら→FFmpegで素早く正確に動画をカットする自分的ベストプラクティス - Qiita。感謝。 ffmpeg -ss 5 -i inputfile -acodec copy -vcodec copy outputfile

VisualStudio 2015のC++プロジェクトで*.pdb/*.iobj/*.ipdbを生成させない場合のメモ

Mohmongar
VisualStudio 2015のC++プロジェクトで*.pdb/*.iobj/*.ipdbを生成させない場合のメモ。なおpdbファイルとはデバッガ情報のファイルで詳しくはこちらを参照ください。*.iobj/*.ipdbはリンク時の高速化にかかわるファイルで実行時には使わないみたい。 *.pdbを生成させない プロジェクトのプロパティ→[構成プロパティ]→[リンカー]→[デバッグ]の[デバッグ情報の生成]を「いいえ」にする。 *.iobj/*.ipdbを生成させない プロジェクトのプロパティ→[構成プロパティ]→[リンカー]→[最適化]の[リンク時のコード生成]を「既定」にする 参考はこのVisual C++ のWin32プロジェクトで iobj, ipdb ファイルを生成しないようにする | たにたにっきです。陳謝。

PC用DARK SOULSのSteam移行のお知らせ

Mohmongar
フロムより「Windows ® 用DARK SOULS with ARTORIAS OF THE ABYSS EDITION(ダークソウル ウィズ アルトリウス オブ ジ アビス エディション)Steamへのオンラインサービス移行のお知らせ」(リンク:pressrelease | FromSoftware)とのアナウンスがありました!。Games for Windows LIVEサービスの終了以降、PC用ダークソウルはオンラインプレイ、インストール認証ができなくなっていましたが、これによりSteamからアクティベートできるようになります。私は新PC移行した際に再インストールができなくなって、途方にくれていましたが、ある情報から「Change」で日本人の有志によるSteam Works版『Dark Souls』の国内販売を願う署名活動を知り、だめもとでこの署名に参加しておりました。この活動が実ったことは多いに意義深いことです。フロムさんご決断ありがとうございます。現段階で時期も未定(2017年1月以降?)で、セーブデータの引継ぎもできないようですが、いまから移行されるのを心待ちにしております。