CustomScript

ページ

2016年2月28日日曜日

画像ビューアー 「NeeView」1.2 更新しました

  • WPF
画像ビューアー NeeView を 1.2 に更新しました。
今まで設定画面が開けないバグに気づけなかった…とほほ。

  • (バグ修正) 設定画面を開くとアプリが強制終了することがあるバグ修正
  • (バグ修正) Susieプラグイン設定が設定直後に反映されないバグ修正
  • (バグ修正) 画像ファイルを指定して開いた時に履歴が反映されないバグ修正
  • (バグ修正) コマンド設定の「表示」フラグが機能しないバグ修正
  • (設定) ページ切り替えでも拡大率、回転がキープされる設定追加
  • (設定) 「ファイルを開く」で現在開いているフォルダの場所を基準とする設定追加
  • (設定) 表示サイズ切り替えの候補を選択できるようにした(コマンド設定の「切替」フラグON/OFFで選択)
  • (設定) 起動時に前回開いていたフォルダを開く設定追加
  • (設定) 多重起動を禁止する設定追加。禁止されている場合でもSHIFTキーを押しながら起動することで複数起動可能です
  • (コマンド) 「ビューリセット」拡大率、回転をリセットするコマンド追加
  • (コマンド) 「常に手前に表示ON/OFF」コマンド、メニュー追加
  • (コマンド) 「メニューを自動的に隠すON/OFF」コマンド、メニュー追加
  • (コマンド) 「アプリを終了する」コマンド追加
  • (コマンド) 「表示サイズを切り替える(逆方向)」コマンド追加
  • (コマンド) 「マウス位置依存でページを前後させる」カーソルがウィンドウ左側でページ送り、右側でページ戻りするコマンド追加
  • (その他) フォルダのランダムな並びを固定化。フォルダ移動では変化せず、再起動、フォルダ並びの切替等で変化する
  • (その他) コマンドライン引数で画像ファイルを指定できるようにした(EXEにファイルをドロップして起動可能)


2016年1月28日木曜日

画像ビューアー 「NeeView」1.1 更新しました

  • WPF
画像ビューアー NeeView を 1.1 に更新しました。
縦長ウィンドウでの利便性向上が主な更新です。横長ページの分割機能、スクロール+ページ送りコマンド、が追加されています。
  • 横長ページ分割対応
  • 「スクロール+ページ送り」コマンド追加
  • 「ファイルの場所を開く」コマンド追加
  • ドットのまま拡大するモード追加
  • スケールモード「高さをウィンドウに合わせる」を追加
  • EXIFの回転情報を反映させる設定追加
  • 背景の設定をメニューで行うようにした
  • ページソートの種類を整備
  • 「単ページ表示」「見開きページ表示」を「1ページ表示」「2ページ表示」に名称変更
  • アプリケーション構成ファイルで横長ページ判定用縦横比を指定できるようにした

2016年1月23日土曜日

ファイル検索ツール「RealtimeSearch」1.2 更新しました

  • WPF
ファイル検索ツール RealtimeSearch を 1.2 に更新しました。
利便性の向上が主な変更で、機能に大きな変更はありません。
  • フォルダを検索結果に表示するかを設定できるようにした
  • ファイル名でのソートを自然順にした
  • ポップアップの情報を増やした
  • 処理中アニメーション追加
  • フォルダ選択ダイアログを標準のものに変更

2016年1月14日木曜日

画像ビューアー「NeeView」作ったよ

  • WPF

WPF勉強の成果物(その3)として画像ビューアーを作りました。

NeeView
https://bitbucket.org/neelabo/neeview/wiki/




フォルダ内の画像を本のように閲覧できる画像ビューアーです。
基本機能は一通り実装できてるかな?
  • シンプルなインターフェイス
  • 標準対応画像フォーマット (bmp, jpg, gif, tiff, png, ico)
  • 圧縮ファイル対応 (zip, rar, 7z, lzh)
  • 多重圧縮ファイル対応
  • マウスジェスチャー対応
  • キーカスタマイズ、ジェスチャ設定可能
  • ドラッグによる移動、回転、拡縮
  • 見開き表示モード
  • フルスクリーンモード
  • スライドショー機能
  • Susieプラグイン対応(UNICODEファイル名可)
  • マルチスレッド、先読み対応

2016年1月12日火曜日

PowerShell スクリプトで Hello World

  • Windows10
  • PwoerShell

そろそろ低機能なDOSバッチファイルから卒業したい、ということでPowerShellを触ってみました。 Windows10に標準搭載なので環境は問題無いです。

今回の課題は「"Hello World" を表示する」です。すべてのプログラム言語における最初の一歩です。
しかしこれが思いの外難航しました。

その1,まずはスクリプトファイルを作ろう

メモ帳を開いて以下のコードを書き込み、ファイル名 "test.ps1" で実験用の適当なフォルダに保存します。

ここまでは問題ありません。

さあ、これを実行したいのですが、PowerShellはあの手この手で実行を妨害してきます。挫折しかけます。

その2,ダブクリックで実行しようとして挫折する

.exeや.batならダブルクリック実行余裕なのですが、PowerShellはそうは問屋がおろしません。

最初、コンテキストメニューに「PowerShellで実行する」といったメニューがあった気がしますが、一度テキストエディタで開いてからそれすらも表示されなくなり、ダブルクリックではそのエディタが立ち上がるようになってしまいました。 ならばと既定のアプリ設定で .ps1 拡張子ファイルでPowerShellが立ち上がるようにしようとしたのですが、PowerShellは選択できませんでした。

調べてみたところ、レジストリを触る必要がありそうな気配。
てことで、ダブルクリック実行は諦め、PowerShellのコンソールを開いてそこから実行することにします。

特定のフォルダでPowerShellコンソールを開く方法ですが、エクスプローラーでそのフォルダに移動し、アドレスバーに "powershell" と入力してEnterキーを押せば開きます。ちなみに "cmd" でDOS窓が開きます。

さて、実行だ!

その3,test.p1 を実行しようとして失敗する

test.ps1 のあるフォルダでPowerShellコンソールを開き、スクリプトファイル名を入力して実行しようとします。

PS E:\Work\Labo> test.ps1
test.ps1 : 用語 'test.ps1' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。 名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ test.ps1
+ ~~~~~~~~
    + CategoryInfo : ObjectNotFound: (test.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

実行に失敗します。カレントフォルダに検索パスが通ってないのが原因です。このあたりはUNIXと同じですね。てことで以下のようにします。

PS E:\Work\Labo> .\test.ps1

ですが、まだ動きません。ははは、こやつめ。

その4,セキュリティーに阻まれる

実行できずにエラーが表示されます。

PS E:\Work\Labo> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル E:\Work\Labo\test.ps1 を読み込むことができません。 詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
    + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

PowerShellはセキュアですがその分気軽に使えなくなっています。
セキュリティーポリシーを変更する必要があります。Set-ExecutionPolicyコマンドでインターネット経由でダウンロードしたスクリプトのみ証明書を要求するように変えましょう。
長いコマンドですが、途中まで入力してTabキーを押すと補完してくれるので便利です。

PS E:\Work\Labo> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y

ででーん

Set-ExecutionPolicy : レジストリ キー 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell ' へのアクセスが拒否されました。 既定 (LocalMachine) のスコープの実行ポリシーを変更するには、[管理者として実行] オプションを使用して Windows PowerShell を起動してください。現在のユーザーの実行ポリシーを変更するには、"Set-ExecutionPolicy -Scope CurrentUser" を実行してください。
発生場所 行:1 文字:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

まだだ、まだ終わらんよ

その5,管理者権限が必要だよね

セキュリティー関係を触るのですから一般ユーザでは変更できませんね、はい。 ということで管理者権限でPowerShellコンソールを立ち上げます。

コルタナさんにpowershellを問い合わせると「Windows PowerShell」が候補に出てくるので、右クリックして「管理者として実行」してください。で、先ほどと同じコマンドを入力します。今度は成功するはずです。

エラーなく終了したらこの管理者コンソールは閉じてしまいましょう。

その6,Hello World

元のコンソールに戻って実行してみます。

PS E:\Work\Labo> .\test.ps1
Hello world

ようやく成功!
長かったよ、お疲れ様!

2015年12月24日木曜日

MSBuildでWPFプロジェクトをビルドする

  • VisualStudio 2015
  • C# 6.0

バッチファイルは以下の様になります。
set MSBUILD="C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"
set SOLUTION="C:\Documents\Visual Studio 2015\Projects\MyProject\MyProject.sln"

%MSBUILD% %SOLUTION% /p:Configuration=Release /t:Clean,Build
MSBuild.exe のパスに気をつけてください。
Windowsにはいくつもの MSBuild.exe がインストールされていますが、 上記パスの MSBuild.exe を使用しないと C# 6.0 の新しい構文でエラーになります。

参考URL
http://stackoverflow.com/questions/32007871/how-to-upgrade-msbuild-to-c-sharp-6

2015年12月21日月曜日

WPF勉強(12) ComboBoxとEnum

  • WPF
  • .NET 4.5
  • C# 6.0
enumをComboBoxで使う方法です。
2パターンの実装サンプルを紹介します。

Enum名で選択する

ComboBox で選択させるためにはとにかく選択項目のリストが必要です。
Enum.GetValues() で Enum のリストを作成し、それを ItemSource としてバインドします。

対応する文字列で選択する

Enumと文字列がペアになったリストを使います。今回は Dictionary 型を使用した例になります。
Dictionary を作成し、それを ItemSource としてバインドします。 SelectedValuePath で選択されるプロパティ名、 DisplayMemberPath で表示するプロパティ名を指定します。 今回の場合は Dictionary 型なので "Key" と "Value" になります。

サンプルコード