2013-01-01から1年間の記事一覧

Clinkの日本語パス問題ふたたび(3)

clink.get_env()でUTF-8を返すように修正するわけですが、clink.get_env()の実体は回りまわってlua.cにありました。 また、Win32 APIではMBCS(ShiftJIS)→UTF-8への直接的な変換はできないので、いったんWideChar(UTF-16)を経由して変換します。ということで…

Clinkの日本語パス問題ふたたび(2)

前回の「気になる問題」というのは、MCBS(ShiftJIS)でパスを扱うときの注意事項である「ShiftJISの2バイト目に現れる"\"(0x5c)への対応」なのですが、前回も調べたfind_files_impl()%lua.cには slash = strrchr(buffer, '\\'); slash = slash ? slash : strr…

Clinkの日本語パス問題ふたたび

Clinkの日本語パス問題を修正(3)のコメント欄 マルチバイト(日本語)を含むパス(%PATH%)に"aaa.bat"を置いて、clinkでaa[TAB]と入力しても補完が聞かない問題、もしお暇があれば見ていただけませんか? というリクエストがありましたので、ふたたびコード…

Windows8.1のバージョン番号(2)

バージョンチェックが必要なのは多くは古いアプリで「未知のOSで動かすと何が起こるかわからないから起動時にバージョンチェックをしている」というパターンがほとんどだと思うので、一部とはいえプロセスの挙動が変わるCompatibility Manifestの導入には慎…

Windows8.1のバージョン番号

以前の検証でもう一つ気になっていたバージョン番号の件。 Win8.1Previewでは8.2.9200というWin8と全く同じ値を返していましたが、あくまで「プレビューだから」だろうと思っていました。ところがWin8.1RTMで検証したところ、やっぱり8.2.9200という値が。 …

Windows8.1RTMでローカルアカウントを作る方法

すったもんだのうえ結局MSDN/TechNetに事前公開されることになったWindows8.1RTMにて、以前に検証して気になっていた件を再検証してみました。まずは、Win8.1Previewでは「事前にネットワークから切り離しておく」という裏ワザ的な方法でしか作れなかったロ…

Clinkの日本語パス問題を修正(3)

意外に知られていませんが、Explorerでファイルやフォルダを選択した状態でのコンテキストメニューはShiftキーを押しながら右クリックするとメニューが一部変わります。 たとえばWindows7でExcelファイルを選択してShift+右クリックすると「読み取り専用で開…

Clinkの日本語パス問題を修正(2)

前回の続き。 カレントディレクトリのパスに日本語が含まれていても入力行の改行位置が狂わないようにするには、wcwidth(x)マクロをきちんと文字幅を返すように実装すればよいのですが、このマクロの引数"x"はwchar_tの文字です。 そしてwchar_t=UNICODE(UT…

Clinkの日本語パス問題を修正(1)

【レビュー】Windows OS上で超気軽にbash環境を楽しめる「clink」 コマンドプロンプト派なら入れておくべき機能改善ツール『Clink』 などで紹介されているWindowsのコマンドプロンプトにbash風の行編集機能他を追加するClinkですが、カレントディレクトリの…

fondueでWin8の.NET3.5機能を有効化する

Windows8に.NET3.5をインストールしようとすると、 「プログラムと機能」-「Windowsの機能の有効化または無効化」からWindows Update経由でインストール dism.exeでインストールメディアからオフラインインストール のいずれかになるわけですが、前者はユー…

Windows8.1プレビュー小ネタ

ISOイメージからインストールした場合、アカウント設定でMicrosoftアカウントを登録しないと先に進めないように見えますが、事前にネットワークから切り離しておけばローカルアカウントの作成画面に遷移します。 現時点でのGetVersionEx() Win32API及びSyste…

win-iconvをVisual Studioでビルドできるようにする

わけあってWindowsで動くiconv.dllの非LGPL版が必要となったのでいろいろ物色していたところ、 iconvmlang win-iconv の2つを見つけたのですが、前者は今回の要件に対しては機能不足だったので後者をベースに作業することに。 ただ、win-iconvの配布ファイル…

C++のプログラムでショートカットファイルの実体を自力で解析

C++でショートカットファイル(.LNK)の実体を参照しようとすると、普通は ショートカットのリンク先を取得する - Visual C++プログラミングのメモ ショートカット - KAB-studio のようにCOM(IShellLink/IPersistFile)を使うのが普通なのでしょうが、このやり…

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止め…