ラベル サンデープログラミング の投稿を表示しています。 すべての投稿を表示
ラベル サンデープログラミング の投稿を表示しています。 すべての投稿を表示

2018年11月12日月曜日

wpf : 画像キャプチャーなどに使う枠の楽な作り方

デスクトップの動画や画像をキャプチャーするときに、その範囲をマウスで指定できるツールがあります。 その範囲指定の枠をwpfで楽に作るサンプルです。 あまり試してないけど、そこそこ良さそうな出来でした。 ここにメモを残しておきます。

このページを参考にしました。

範囲選択用の枠はこんな感じです。

2018年11月8日木曜日

C# : 「64bitだとWindowFromPointが動かないよー」という過去の課題が見つかったのでちょいと調べる

自分用のツールを作ろうかと色々調べていたら過去の自分の投稿にたどり着きました。

「64bit環境でC#からWin32APIのWindowFromPointを呼び出すと失敗する」と書いてあります。 「じゃあ今やろうとしている事できないの?」とさらに検索しようとしたら......WindowFromPointとテキストボックスに入れた時点でサジェッションに64bitとかx64とか出てくるんですよね。 「もしかして未だに解決してない?」と思ったら最初の検索結果であっさり解決しました。

2018年10月13日土曜日

C# : FiddlerCoreを使ってブラウザで見た画像ファイルを保存する

2019年5月追記) DecryptSSLの機能を使うにはFiddler用のルート認証が必要になります。 (最初この記事を書いたときはFiddler本体も入っていたので気付きませんでした)

一番手っ取り早くルート認証をインストールする方法はFiddler本体をインストールしてメインメニューの「Tools」-「Options」から「HTTPS」タブを選択、「Capture HTTPS CONNECTs」と「Decrypt HTTPS traffic」をチェックします。 ダイアログが表示されるので、中身をよく読んでルート認証をインストールしましょう。

追記終わり//


FiddlerはProxy型のhttp通信のデバッグツールです。 http通信を見張るだけではなく、リクエストやレスポンスを差し替えるなどかなり深い部分を触れるツールになっています。 サーバー側の変更をせずにレスポンスを書き換えることでウェブページのjavascriptをデバッグしたりとか、色んな用途に使われています。

強力なツールなだけに取っ付きにくい部分があります。 「あれがやりたいだけなのに……」ってときに重すぎるんですよね。 で、そのコア機能だけを提供するFiddlerCoreというライブラリが公開されています。 これを使って簡単なコードを書いた方が目的を気軽に達成できるケースも多い事でしょう。 そんなわけで今回はFiddlerCoreに触ってみました。 試しに通信中の画像ファイルを保存するサンプルコードを書いたので、そのメモを残しておきます。

※ FiddlerCoreを使う注意点として、ライセンスの問題があります。 詳しく調べていないのでよく分かりませんが、アプリに組み込んで配布するにはお金を払わないといけないのかな? (2015年あたりからそうなったっぽいです。) って事で多分フリーソフトに組み込むのは現実的ではありません。 趣味で使う場合は自分用ツールで、公開するならソース配布という事になりそうですね。

ちなみにリファレンスとかチュートリアルとかのドキュメントは一切読んでません。 適当です、適当。 その辺踏まえてお読みください。

2018年10月6日土曜日

YouTubeのチャンネルに登録された動画一覧を得るコード

YouTubeで適当に動画を見ていて「このチャンネルの動画最初から見てみようかな?」ってなったことありませんか? で、そのチャンネルに700本くらい動画があったら……。

YouTubeの動画の絞り込み機能って貧弱なんですよね。 特にチャンネルの動画一覧のページにある機能はほとんど何もできません。 せめて日付で絞り込む機能があればいいんですけど、現状追加日で並び替えて古い順から見てくしかないのかな? 最初の数十本はそれでいいのかもしれません。 でも700本中の300本目とか、探すだけでも大変で困ります。

そういえばずっと前にYouTubeの自分のチャンネルの動画をリストアップするコードを作ったよな? でも確かめてみると今は動かないようです。 今のやり方で作り直すしかないようです。 って事で自分用の簡単なツールをあらためて作ってみました。

API Keyの取得

2015年4月16日木曜日

bloggerの本文に埋め込んだスクリプトでPC用とスマホ用の定型文を切り替える

パズドラの投稿の最後に何となくAmazonの広告を載せています。 個別商品リンクです。 その広告、今はいいんですがすぐに古くなりますよね。 数ヶ月に1度、1つのファイルを書き換えたら関連投稿の記述全てが入れ替わるようにできないか、考えてみました。 ついでですが、Amazonの広告はPC用とスマホ用で別のリンクを作らなければなりません。 スクリプトで判定して別のファイルを読むようにしてみました。

まずはスクリプトの格納先から説明しましょう。 bloggerに投稿しているなら同じアカウントでgoogle driveも使えるはずです。 google driveにはディレクトリやファイルを公開するとhtmlサーバとして動いてくれる機能があります。 それを使います。

2015年3月20日金曜日

Genymotionをインストール

以前Windows7が入ったPCにAndroid Studioをインストールしました。 それに付属しているandroidソフト開発用のエミュレータはずいぶん重いようです。 そこで、動作が軽いという噂のGenymotionをインストールしてみました。 そのときのメモを投稿しときます。

まずはGenymotionのオフィシャルサイトにいって会員登録をします。 そのときのIDとパスワードはGenymotionを初回起動するときに必要になります。 メモをしておきましょう。 長く使う予定があるならパスワード管理をしっかりと。 間違っても重要なアカウントのIDやパスワードと同じものを使わないように。

2015年3月14日土曜日

Android Studioのインストール中にゴタゴタしたのでそのメモとadbを使うまで

adb(Android Debug Bridge)というソフトウェアがあります。 android端末をCUIで扱ったりすることができるソフトです。 ちょっと使いたいネタがあったのでadbを含んだ開発環境をインストールしました。 androidアプリの開発にも興味があったのでAndroid Studioを選びました。

で、Android Studioのインストールでちょっとしたトラブルがありました。 セキュリティソフトのavastが誤検出したのです。 platform-toolsというフォルダの中の実行ファイルがやられました。 確かにgoogleオフィシャルからダウンロードしたAndroid Studioだと再確認、もちろんマルウェア騒ぎなどない事も確認してから手動で誤検出されたファイルを戻しました。 しかしAndroid Studioは起動せず。 再インストールしました。

2014年7月3日木曜日

wpf : MediaPlayer/MediaElementでmp3とか色んなメディアを再生するときの罠

今、自分で使う適当なツールを作ってます。 それでMediaElementを使ってました。 mp4の動画ファイルを再生しながら試行錯誤して作ってきて9割くらいできたかな? ってところで試しにmp3の音楽を流そうとして失敗。 「これじゃ使えない」ってことで失敗した理由を調べてみました。

ネットで調べた内容では根本的な原因とか解決策は見つからず。 分からないなりにVisual Studio Expressでゴニョゴニョやっていたら原因判明。 音声のみのメディアを再生するときに MediaElement.ScrubbingEnabled = true になっていたら動きませんでした。

2014年6月5日木曜日

wpf : xamlで描いたアイコンの使いまわし(ボツ案)

xamlでcanvasを使ってアイコンを描きました。 それを、例えば次のようにして使いまわそうとしても失敗します。 2つ目のボタンにしかアイコンが表示されません。

2014年5月29日木曜日

wpf : ListBoxの選択項目がクリックで変更されたことを検出する

ListBoxやListViewの選択項目がクリックで変更されたときに実行したい処理があったので、検出のしかたを調べてみました。 ヒントになったのはこんな情報。

参考ページにはListViewの選択済みの項目がクリックされたのを検出する方法が書いてありますね。 ListViewItemのPreviewMouseLeftButtonDownイベントで検出しています。 Previewイベントという事でListViewの選択項目が反映される前のListViewItemの状態を見る事ができます。 そこでIsSelectedを見れば、まだ選択されていないものがクリックされてこれから選択が変更されるところなのか、選択済みのものがクリックされたのかが分かるという仕組みです。

ListViewでもListBoxでもだいたい同じです。 そして、IsSelectedを見て分岐するところを参考ページと逆にすれば目的が達成できそうですね。

2014年5月27日火曜日

wpf : KeyGestureを継承したクラスでCtrlキーの左右を判別できるように、ついでに修飾キーなしでも動くように

今、適当に自分で使うツールを作っています。 作っているツールはキーボードショートカットで色々できるようにするつもりです。 で、[Ctrl+1]とかのショートカットは普通にwpf標準のコードでできるんですが、Ctrlキーの左右は指定できないんですよね。 でも左右で別の処理をさせたい。 「ローカルキーフックとかしないとダメなのかなぁ? なんとかならないかなぁ?」と検索してたら、KeyGestureを継承したクラスでできることがわかりました。 あんまり動作確認はしてないけど、次のようなコードでShiftキーとCtrlキーについては左右の判別ができそうです。 (一応コードにはできそうなそぶりで書いてあるけど、AltキーとWinキーは正常に動きませんでした。)

2014年5月22日木曜日

wpf : ListViewItemのDataTemplateで作った子コントロールを探す

検索してもそのものズバリが出てこなかったので一応書いてみました。 特定の行のListViewItemを探すには次のコードを使います。

でもこれだけじゃダメです。 ListViewはデフォルトでVirtualizingStackPanelを使っています。 VirtualizingStackPanel上では画面に必要なListViewItemしか作られません。 そのおかげで大量に行を登録しても軽快に動くのですが、当然作られていないListViewItemにはアクセスできません。 ContainerFromIndexを呼んでもnullが返ってきます。

2014年5月16日金曜日

wpf : Bindingで更新していたプロパティに即値を入れるとBindingが解除された

基本的なことかもしれませんが、最近初めて気付きました。 例えば、あるBorderの高さのBindingを解除する場合、普通はこうします。

DependencyProperty prop = Border.HeightProperty;
if (BindingOperations.IsDataBound(border, prop))
    BindingOperations.ClearBinding(border, prop);

その代わりにこうしてもいいようです。

border.Height = border.ActualHeight;

まぁ「解除できる」というか、解除されてしまったせいでバグになってつまづいたんですけどね。 すぐに理由が分かってよかった。

2014年5月14日水曜日

wpf : Bindingソースのパスをリファクターできるようにするためのコード

xamlではなく、C#のコードでのお話です。 以前の投稿でINotifyPropertyChangedでの通知対象のプロパティ名をリファクターできるようにするためのコードを書きました。 今回はそれを元に、Bindingするときのプロパティ名をリファクターできるようにしました。

考えるキッカケになったのはこんなコード。

2014年5月11日日曜日

wpf : INotifyPropertyChangedでプロパティ名をリファクターできるようにするためのコード

こういうふうにするんだそうです。

参考ページはこちら。

日本語の方のページには「式木とか実はよくわからない」って書いてますね。 私もです。 MSDNの方をよく読んだら解説っぽいことが書いてあるので、興味と根性がある人は読んでみてはどうでしょうか?

実行速度が必要な処理には使わない方が良さそうですが、どうなんでしょう? まぁそういうのにはINotifyPropertyChanged自体使わないんでしょうけど。

2014年5月7日水曜日

wpf : ListViewの余白部分をクリックしたときにポップアップメニューを出す

ListViewの余白部分を右クリックしたときにポップアップメニューを出す場合、ListViewのContextMenuは使えません。 余白だけでなく、ListViewItemなどをクリックしたときにもポップアップメニューが出てしまうためです。 そのとき、ListViewItemに載せたコントロールにContextMenuを付けてもListViewのContextMenuが優先されて、ListViewItemのメニューは表示されません。 ListViewItemのContextMenuOpeningイベントで

とかすればListViewItemをクリックしたときポップアップメニューが表示されないようにはできますが、当然そうするとListViewItemのContextMenuは使えません。

解決策はうまく検索すれば見つかりそうですが、見つからなかったので自分でやり方を試行錯誤しました。 で、見つかったのがこれ。 結局単純なやり方で済ませました。

2014年5月2日金曜日

wpf : MediaElementでシークしたときの表示の更新

MediaElementで動画を再生するときのお話。 ポーズ中にシークすると、デフォルトのままだとシーク後の現在時刻が内部的に変化しても画面に反映されません。 画面を更新するには動画の再生をしなければならないんです。 でも、これじゃシークで好きなシーンを探せないですよね? 「どうすりゃいいんだ?」と検索したら、MediaElementでサムネイルを作る方法を書いたTipsのページにヒントがありました。 MediaElementのScrubbingEnabledプロパティをTrueにすればいいようです。 それだけ。

注意点としては、「 ScrubbingEnabled を true に設定すると、パフォーマンスが多少低下することがあります(メディアの再生を対話的に制御する場合など)」だそうです。

2014年4月20日日曜日

wpf : TextBoxで項目を編集できるListView

ちょっと作りたいものがあって、その部品としてTextBoxで項目を編集できるListViewを作りました。 その作り方をメモ。 サンプルコードを実行するとこんなウィンドウが表示されます。

単にListViewにTextBoxを載せたデフォルトの状態だと色々不都合があるのでちょっと手を入れています。


作った環境はこちら。

  • Windows7 64bit home
  • Visual Studio 2012 Express for Desktop
  • .NET Framework 4.5

2014年4月18日金曜日

wpf : ListViewのある列の幅を自動でいっぱいに広げその他の列幅は固定

ちょっと作りたいものがあって、その部品としてある列の幅を自動でいっぱいに広げ、その他の列幅は固定するListViewを作りました。 その作り方をメモ。 サンプルコードを実行するとこんなウィンドウが表示されます。

ユーザーがウィンドウサイズを変更すると「メモ」の列は自動で調整されます。 その他の列は固定幅です。 列の入れ替えも禁止にしました。


作った環境はこちら。

  • Windows7 64bit home
  • Visual Studio 2012 Express for Desktop
  • .NET Framework 4.5

2014年4月14日月曜日

裏サンデーの画像をダウンロードするツール

2014/06/02 config.xmlの例を現時点で公開されている漫画の情報にあわせて更新しました。 ツールのアーカイブの中身は変更してません。 使う方はconfig.xmlの例を元に適宜設定ファイルを書き換えてください。

2014/04/24 ちょっと修正。 バージョン管理するほどの物ではないのでバージョン番号とか付けてません。 ツールの中身は変わってます。


裏サンデーってレイアウトとか画像読み込みとかがアレで読みづらいですよね。 画像だけダウンロードして自分で用意したビューアを使って読んだ方がいい。 というわけで、ダウンロード用の簡単なツールを作ってみました。

リンク先のファイルメニューからダウンロードしてください。