C#

「C#ショートプログラミング 第2版」のerrata

同僚から借りて読んでる「C#ショートプログラミング 第2版」(第2版 第1刷)ですが、 P141: 5.23 共通要素だけ欲しい(NEW) の"OLD CODE"はミスっていると思われます。この記事の記載時点においては正誤表には載っていません。[誤] foreach (var item in a.Inte…

イントラネットのWebサイトをWin8ライブタイルに対応させる

WebサイトをWindows8のライブタイルに対応させるには、そのサイトがRSSを出力しているのであれば、 Create a Windows 8.1 tile for your site - Build My Pinned Site を使えばほんの数分で可能ですが、これで生成されるbrowserconfig.xmlのNotificationは <notification> <polling-uri src="http://notifications.buildmypinnedsite.com/?feed=http://www.example.jp/rss.xml&amp;id=0"/> </polling-uri></notification>

C#でRFC822のTimeZone文字列表記をParseする

C#でメールの日付をParseしようとしてDate:ヘッダの値をそのままDateTimeOffset.Parse()に食わせたら例外で死んでしまいました。 「何で?」と思ったら、DateTimeOffset.Parse(DateTime.Parseも同様)は"GMT"以外のRFC822のTimeZone文字列表記には対応して…

C#で音楽を再生する一番簡単な方法

C#でWAVやMP3等の音楽を再生する方法としてはDOBON.NETのサイトに解説のあるMCIやWMPコントロールを使うのが一般的ですが、もっと簡単な方法があります。 それはMicrosoftが出している入門用言語Small Basicのライブラリを使う方法です。 Small Basicは.NET …

C#のプログラムでWin8のデスクトップ操作を改善(2)

前回の続き。 keybd_event()をSendInput()に置き換えても結果は同じ(Win+Xだけ実行できない)なので「使用しているAPIが古いから」といった類の理由ではないようです。 仕方がないので「画面の左下にあるホットスポットを右クリックする」ことでその代用と…

C#のプログラムでWin8のデスクトップ操作を改善(1)

「スタートボタン」がUI的に完璧だったかと言えば決してそうではないでしょう。ですが、デスクトップに限って言うとスタートボタンが無くなったことにより不便になった操作は確実に存在します。 それはシャットダウンであったり、コントロールパネルの呼び出…

COMとdynamicとMarshal.ReleaseComObjectと(2)

前回の結論「dynamicを使ってもCOMの解放まで不要になったわけじゃない」とすると、安全性だけで言えばC#2.0時代に良く使われていたテクニック「COMを使った処理をVBScriptに分離する」のほうが良いということになります。なので今回は自身の復習を兼ねて、C…

COMとdynamicとMarshal.ReleaseComObjectと

さて、今までの記事で「楽するため」と称してC#4.0の"dynamic"キーワードを使ってCOMを使った処理をこんな風に書いてきたわけですが、 // Shell.Applicationオブジェクトの作成 dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID…

C#のプログラムで自分自身をPin止めする(5)

前回のAppUserModelIDが設定できたように見えてもWin8でアイコンが分裂する問題は未解決ですが、その後もいろいろ調べていたら新たに2点ほどわかったことがありました。その1. C#のプログラムで自分自身をPin止めする(1) それでも#if falseでくくったほうの…

C#のプログラムで自分自身をPin止めする(4)

C++でSystem.AppUserModel.IDを設定できるのであれば、それと同じことをC#でやればいいのです。 実際そういうアプローチで既に実践している人はいて、たとえば AppUserModelIDをC#から操作する なんかはC#からIShellLink I/FをCOMで操作する方法で実現してい…

C#のプログラムで自分自身をPin止めする(3)

良く考えればそうなのですが、タスクバーにPin止めされているだけの状態ではプログラムは実行されていないわけですから、プログラムでAppIDを指定したところで有効になるわけがないのです。 では、その状態でのAppIDは何が使われているか?答えは 「Pin止め…

C#のプログラムで自分自身をPin止めする(2)

前回の続き。 いろいろ調べていくとタスクバーアイコンのグループ化には「アプリケーションID(AppID)」が関係しているということがわかりました。 Windows API Code Packによるアプリ開発 第10回 Windows 7 タスクバー 〜アプリケーション ユーザー モデル I…

C#のプログラムで自分自身をPin止めする(1)

Windows7からサポートされ、またWindows8ではこの機能の利用を前提にスタートボタンが廃止されることとなった「タスクバーへのPin止め」機能をC#のプログラムから実行してみます。 Pin止めのためのAPIは公開されていませんが、既に先人たちがいろいろと調査…