風で飛んでいくチラ裏

気ままに雑記メモ書き殴り。古い記事は別blogからの引っ越しなのでレイアウトがアレです。

WPF体験雑記

これは?

C#WPFを全く触ったことのないC, Python使いがVisualStudioとWPF七転八倒する記録。

やりたいこと

既存のツールの特定の画面要素をキャプチャしたい。 毎回スクリーンショットのツールで画面キャプチャするのはだるいのでツール側に機能を追加したい。

参考: WPF で 画面要素のスクリーンキャプチャをクリップボードにコピーする

コマンドの登録

すでにプロジェクトにコマンドを管理する仕組みがあるようなのでその例に倣って登録。

リソース

VisualStudioのプロジェクトのプロパティから触る。 コマンド名とかもリソースで追加するのね。

RenderTargetBitmap が見つからない

using System.Windows.Media.Imaging する。

using って何?

名前空間の定義と利用宣言に使ってる?pythonでいうところの import と with を併せ持っているような?

実行させるには?

とりあえずコマンドは登録したが、どうやってイベント発火させようか。 メニューバーがあるので、コマンドを追加して登録。

動作確認

クリップボードへコピーできた。

そのほか

  • Ctrl+クリック で定義にジャンプ
  • Ctrl+- で戻る
  • Ctrl+Space とか TAB とかで補完などなど

Pushできない (未解決)

VisualStudioからリモートリポジトリ(GitLab)にPushしようとしたら、 Error: cannot spawn C:/Windows/System32/OpenSSH/ssh.exe: No such file or directory と言われる。

今使っているGitLabサーバはHTTPSでアクセスできないので、SSHでの接続なんだけど、どうも設定がうまくいかないで放置していたんだった。 これはVSCodeのときに中途半端にいじったまんま放置していたのがこっちでも悪さをしていてそうなのでいったんコマンドプロンプトからPush。

ちなみに C:/Windows/System32/OpenSSH/ssh.exe は存在するしコマンドプロンプトから起動できるので、エラーメッセージ自体が謎。

(function(document){ var pres = document.getElementsByTagName("pre") for(var i=pres.length; i--; ){  var el = makeOl(pres[i]) pres[i].appendChild(el) } function makeOl(pre){ var ol = document.createElement("ol") , li = document.createElement("li") , df = document.createDocumentFragment() , br = pre.innerHTML.match(/\n/g) ol.className = "preLine" ol.setAttribute("role", "presentation") for(var i=br.length; i--; ){ var li2 = li.cloneNode(true) df.appendChild(li2) } ol.appendChild(df) return ol } })(document)