タグ: clipboardio

  • クリップボードロギングツール

      作ったもの

      https://github.com/kozawa-tokyo/clipboardio
      clipboardio_20251214.zip

      機能修正

      • ツールバーを削除してタスクトレイアイコンのメニューに移動
      • HTMLファイルのロギングを廃止(WebView2削除)
      • フォルダ構成を変更
      • タブを非表示*
      • Ctrl+FキーでVSCodeを起動

      *フォルダ名/ファイル名の先頭1文字目が”_”アンスコの場合に読み込みをスキップします。

      バグ修正

      • 沢山ありすぎるので割愛

      既知の不具合

      • Shiftキーを2回叩いても画面が表示されない場合がある(何度か叩くと上がってくるけどまだバグってる)
      • 画面表示時に最前面に表示されない場合がある

      性能改善

      Pythonスクリプト実行時のメモ書きが残っていたので貼っておきます。

      【年】/【月】/【日】 【時】:【分】:【秒】
      
      同期
      2025/11/06 06:37:33 1744 ms
      2025/11/06 06:37:40 1637 ms
      2025/11/06 06:37:44 1712 ms
      2025/11/06 06:37:49 1593 ms
      2025/11/06 06:37:55 1673 ms
      
      非同期
      2025/11/06 06:38:53 3104 ms
      2025/11/06 06:38:58 618 ms
      2025/11/06 06:39:03 620 ms
      2025/11/06 06:39:07 642 ms
      2025/11/06 06:39:10 599 ms
      
      runScriptAsync…
      処理時間 (ミリ秒): 3064 ms
      スレッド 24804 はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (13196) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (25084) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (23888) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (12708) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (10540) はコード 0 (0x0) で終了しました。
      
      runScriptAsync…
      処理時間 (ミリ秒): 761 ms
      スレッド 24220 はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (18036) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (20036) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (10652) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (2796) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (18020) はコード 0 (0x0) で終了しました。
      スレッド '.NET TP Worker' (22336) はコード 0 (0x0) で終了しました。

      「【年】/【月】/【日】 【時】:【分】:【秒】」のテキストで6スクリプトを同期実行すると1.6秒程度、非同期実行すると初回が3秒ちょっとで2回目以降は0.6、0.7秒ぐらい。スレッドの数が合ってないの何でだろうな?非UIスレッドのメンドクサイ問題がまだあるのかもしれん。とにはかくともスレッド起動時のオーバーヘッドが大きく、何度も実行するような処理でもないので同期実行のままでよさそう。

      動作環境

      • OS:Windows 11 Home/Pro
      • ビルド:26200
      • バージョン:25H2

      動作環境にHomeエディションを追加して25H2で動くように修正しました。Enterpriseエディションでは起動しません。Enterpriseエディションで起動する本アプリのモジュールを公開したことは一度もありません。コンプラ違反?(意味深)

      その他

      クリップボードのロギング機能についてもAutohotKeyのスクリプトで実装できるのでC#学習用アプリのほうは終息してAutohotKeyに集約していきたい。ただ、AutohotKeyでGUI画面を作ろうとするとできないことが多すぎるのでGUI画面を作るときにはC#を使うことになりそうではある。

      無償で使えてソースも公開されているOSSがよくね?AutohotKeyのスクリプトでよくね?って思ってるけど、これが良くねえんだよ最近。

      AutohotKey クイックリファレンス

      AutohotKey V1とV2の間に非互換が半端ねえぐらいにあって生成AIが出力してくるコードにV1系のコードが混在して動かないなんてことがここ数ヶ月でも多発していた。日進月歩ということで時間が解決してくれるかもしれないけどAutohotKeyよりC#のほうがバイブコーディングに向いていることは間違いない。メジャーな言語がいいなあ。もう人間がコードを書く時代は終わったんですかねえ?

    • クリップボードロギングツール

      C#学習中… 学習目的なので車輪の再開発です。

      バグ修正

      以下のバグを修正しました。

      • 任意の項目をCtrl+ダブルクリックするとアプリが異常終了する。
      • Deleteキーでファイルを削除後、項目選択フォーカスが先頭行に強制される。
      • 複数の項目を選択できる。
      • 再起動時にタブおよび項目の並び順がリセットされる。
      • アプリの再起動に時間がかかり応答しなくなる。

      機能修正

      • タブの選択時に最左端・最右端でループするように修正しました。
      • 項目の選択時にCtrl+HomeキーとHomeキーだけの動作を統一しました。Ctrl+EndキーとEndキーだけの動作を統一しました。
      • エクスプローラの表示時にメイン画面を閉じるように修正しました。

      機能追加

      • ランチャー機能

      作ったもの

      https://github.com/kozawa-tokyo/clipboardio
      clipboardio_20250322.zip

      使用方法

      ランチャー機能

      launcherDataフォルダ配下に任意のフォルダを作成し、実行したいファイルを格納してください。

      C:\tool\clipboardio
      └─ launcherData
          └─ 「ランチャー」フォルダ

      フォルダ名がタブ名になります。「ランチャー」フォルダ配下の.txt、.exe、.lnk(ショートカット)ファイルが起動できること確認済です。フォルダは対象外です。

      その他の機能説明などについては、過去の投稿を参照してください。
      https://kozawa.tokyo/blog/?tag=clipboardio

      補足

      「クリップボードロギングツール」は、左手は添えるだけ、「キーのリマッピング(KeyRemap.ahk)」は、右手は添えるだけです。高尚なコンセプトのもと制作しております。🙏

      1. 右手で右Shiftを2回押下する。
        →クリップボードロギングツールが表示される。
      2. 「ランチャー」タブからアプリを起動する。
        →アプリの画面が表示される。
      3. 左手でAlt+1キーなどを押下する。
        →キーのリマッピング(KeyRemap.ahk)でアプリの画面が移動される。
      4. 左手でAltキーを押下したまま、右手で矢印キーを操作して画面サイズを微調整する。(ここで伏線は回収されましたよ?)
      5. アプリを使用する。
      6. Alt+F4キーでアプリを終了する。

      マウスを使用せずにちょっとした作業が完結できます。「クリップボードロギングツール」と「キーのリマッピング(KeyRemap.ahk)」はセット商品です。ご愛顧くださいませ。( ー`дー´)キリッ

      既知の不具合

      まだまだバグだらけです…

      所感

      以下のWin32APIでIniFileの読み書きを行っていたけれどサードパーティー製ライブラリに置き換えました。

      GetPrivateProfileString 関数 (winbase.h)
      WritePrivateProfileStringW 関数 (winbase.h)

      Win32APIが遅すぎるのWin32APIのバグですよね?

      あとは、ランチャーのアイコンを横に並べて「CLaunch」みたいに作りたかったけど、左右キーはタブの切り替えで使用していて、タブのキーボードフォーカス、論理フォーカスの制御ができず一旦挫折。

      フォーカスの概要

      リストのアイテムを選択するのにも苦労させられていますし、WPFアプリ難しいですねえ。Formアプリで作った方が良かったかもしれない。

      応援・寄付のお願い

      Amazonギフトカード
      欲しいものリスト

      メールアドレス「develop.kozawa@gmail.com」です。
      🍻より良いフリーソフトのためにー 🐾

    • クリップボードロギングツール

      C#学習中… 学習目的なので車輪の再開発です。

      Clibor

      目指したのはこちら。

      https://chigusa-web.com/clibor

      ミニPCにインストールして使っています。クリップボードツールでググると必ず上がってくる有名どころですね。

      クリップNOTE

      真似したのはこちら。

      http://www.ost-net.com/clipnoteA/clip01.html

      会社の社給パソコンにインストールして使っています。快適な入力支援ソフトです。間違いない。

      作ったもの

      WPF版

      https://github.com/kozawa-tokyo/clipboardio
      clipboardio_20250125.zip

      Releaseフォルダ配下を配布すれば他の環境で実行できるのか、.NETの野良アプリを配布するのは初めてで確認がとれていない。これらのリリース作業も含めてひと通り動作確認するために、C#学習3か月を記念して初回リリースします。

      ファイルサイズが10MB近くあってRaspiに置くとblogの公開に支障がありそうなのでGitHubにアップロードしました。バイナリだけです。ソースファイルは、いつになるかは分かりませんが、バグ修正が落ち着いた後に学習用の試行錯誤処理をキレイにして公開できればと思います。

      動作環境

      TRIGKEY/ミニPC環境

      • OS:Windows 11 Pro
      • バージョン:24H2
      • ビルド:26100

      まだまだバグだらけなので上記環境でのみ起動するように制限しています。

      インストール手順

      任意のフォルダに展開してください。

      C:\tool\clipboardio
      ├─ CommunityToolkit.Mvvm.dll
      ├─ GongSolutions.WPF.DragDrop.dll
      ├─ Microsoft.Web.WebView2.Core.dll
      ├─ Microsoft.Web.WebView2.Core.xml
      ├─ Microsoft.Web.WebView2.WinForms.dll
      ├─ Microsoft.Web.WebView2.WinForms.xml
      ├─ Microsoft.Web.WebView2.Wpf.dll
      ├─ Microsoft.Web.WebView2.Wpf.xml
      ├─ Microsoft.Xaml.Behaviors.dll
      ├─ clipData
      ├─ clipboardio.deps.json
      ├─ clipboardio.dll
      ├─ clipboardio.exe
      ├─ clipboardio.ini
      ├─ clipboardio.pdb
      ├─ clipboardio.runtimeconfig.json
      ├─ phraseData
      ├─ resource
      ├─ runtimes
      └─ script

      使用方法

      clipboardio.exe を起動します。
      →タスクトレイに常駐します。

      基本動作

      クリップボードのデータをファイルに保存します。

      対象データ

      • テキスト
      • 画像
      • HTML

      保存フォルダ

      C:\tool\clipboardio
      └─clipData
        ├─ bitmap
        ├─ html*
        └─ unicodeText

      ファイル名は、クリップボードの更新時刻です。

      *:html配下は、「HTML クリップボードの形式」に準拠です。そのままHTMLファイルとして表示できるファイルではありません。

      メイン画面の表示

      右Shiftキー×2回:メイン画面表示
      右Shiftキー×2回:メイン画面非表示
      右Shiftキー×2回:メイン画面最前面移動
      Esc:メイン画面非表示
      タスクトレイアイコンクリック:メイン画面表示

      ツールバー
      アイコン1つ目:選択項目の格納場所をファイラーで表示
      アイコン2つ目:アプリの再起動

      リストビュー
      クリップボードのテキストの先頭1行をリスト表示

      テキストボックス
      クリップボードのテキストの複数行を表示
      ※後述の定義ファイルを編集した場合、画像およびHTMLを表示可能

      ステータスバー
      ペースト先の画面のタイトル文字列を表示

      画面右上「×」ボタン
      メイン画面非表示
      ※アプリを終了する場合はタスクトレイのアイコンから「閉じる」を選択してください。

      操作方法

      左右キー:タブ切り替え(phraseDataフォルダにフォルダやファイルを作成することで複数のタブが表示されます)。

      上下キー:項目選択

      Enterキー:メイン画面表示時にアクティブだった画面に選択項目のテキスト等をペーストします。ペースト先の画面のタイトル文字列はステータスバーに表示されます。

      右Shiftキーをダムダムして矢印キーで項目を選択してEnterする操作が基本となります。左手は添えるだけです。必ず成功するわけではありません。

      これを貼っておこー

      Ctrl+Enter:選択項目のコピーだけ(ペーストはしない)

      Ctrl+「+」キー:画面フォントを+0.5ポイント
      Ctrl+「-」キー:画面フォントを-0.5ポイント
      Ctrl+「0」キー:画面フォントを14ポイントにリセット

      Ctrl+「e」キー:選択項目のファイルをファイラーで表示

      Deleteキー:選択項目に対応するファイルを削除(ごみ箱に移動)

      Ctrl+「G」キー:秀丸またはサクラエディタがインストールされている場合は、Grepダイアログを表示。秀丸は32bit版を想定しています。定義ファイルでインストールパスを変更可能

      Ctrl+「F」キー:「クリップボード」タブの「値」カラムにフィルタ入力領域を表示・非表示だけ。項目のフィルタ処理は今後実装予定。

      「1」~「0」キー:タブの選択
      ※定型文フォルダ配下にフォルダ・ファイルを作成した場合のみ有効

      スペースキー:Pythonスクリプトが埋め込まれている場合、Pythonスクリプトを実行して画面下部のテキストボックスに表示

      F5キー:アプリ再起動

      定型文フォルダ

      C:\tool\clipboardio
      └─phraseData

      フォルダまたはファイル(txt、csv、tsv)を作成します。ファイルはUTF8/CRLF前提です。フォルダ名、ファイル名がタブ名になります。(拡張子なし・あり)

      作成したフォルダまたはファイルを画面に反映するためにはアプリを再起動する必要があります。

      例:


      C:\tool\clipboardio
      └─phraseData
         └─ 「定型文」フォルダ
         │   └─ ファイル1.txt
         │   └─ ファイル2.txt
         └─ ファイル.txt
         └─ ファイル.csv
         └─ ファイル.tsv

      「定型文」、「ファイル.txt」、「ファイル.csv」、「ファイル.tsv」のタブが生成されます。タブおよびリストの項目はドラッグアンドドロップで入れ替え可能ですが、「クリップボード」タブは最左端固定です。

      フォルダ:テキストファイルのみ格納できます。ファイル名が「ラベル」列に、テキストファイルの先頭1行目だけが「値」列に読み込まれます。「クリップボード」タブと同様にEnterキーでペーストできます。

      複数行を定型文としてペーストしたい場合はフォルダ配下にテキストファイルを作成してください。

      「ファイル.txt」:「ラベル」列に行番号が表示されます。
      「ファイル.csv」:「ラベル」列に1カラム目の文字列が表示されます。
      「ファイル.tsv」:「ラベル」列に1カラム目の文字列が表示されます。

      1行単位でペーストしたい場合はファイルを作成してください。

      「script」フォルダ

      定型文フォルダ配下のファイルには、「script」フォルダに作成したPythonスクリプトの実行結果を埋め込むことが可能です。

      例1:
      C:\tool\clipboardio
      └─ script
      │  └─ 現在日時.py
      └─ phraseData
         └─ 「定型文」フォルダ
             └─ ファイル3.txt

      ファイル3.txt の内容
      ————————————————————
      【現在日時】 です。
      ————————————————————

      【】カッコ内の文字列が、scriptフォルダのPythonスクリプトのファイル名(拡張子なし)に対応しています。

      Pythonスクリプトを実行結果の標準出力がペースト時に反映されます。

      ペースト文字列
      ————————————————————
      2025-01-25 09:36:51.640573 です。
      ————————————————————

      Pythonがインストールされていることが前提です。

      Download the latest version for Windows
      https://www.python.org/downloads

      コマンドプロンプトで以下が実行できるか事前に確認してください。
      python C:\tool\clipboardio\script\現在日時.py

      例2:

      ファイル4.txt の内容
      ————————————————————
      【年】/【月】/【日】 【時】:【分】:【秒】
      ————————————————————

      上記のファイル4.txtの場合は、ペースト時に以下の6ファイルのPythonスクリプトが逐次実行されてペーストされます。

      年.py
      月.py
      日.py
      時.py
      分.py
      秒.py

      少しラグがあります。今後並列実行に修正予定。

      ペースト文字列
      ————————————————————
      2025/01/25 09:41:02
      ————————————————————

      例3:

      Pythonスクリプトが単独で実行できることが前提です。標準ライブラリ以外を使用する場合は、事前に依存するパッケージをインストールしてください。

      C:\tool\clipboardio
      └─ script
      │  └─ clipboard.py
      └─ phraseData
         └─「定型文」フォルダ
             └─ ファイル5.txt

      clipboard.py
      ————————————————————
      import urllib.parse
      import pyperclip

      clip = pyperclip.paste()

      print(clip, end=””)
      ————————————————————

      clipboard.pyにはクリップボードを扱うためのpyperclipパッケージが必要となります。

      コマンドプロンプト
      pip install pyperclip

      コマンドプロンプト
      python C:\tool\clipboardio\script\clipboard.py

      事前にpipコマンド等でパッケージをインストールしてPythonスクリプトが実行できるか事前に確認してください。

      ファイル5.txt
      ————————————————————
      https://kozawa.tokyo/images/【clipboard】
      ————————————————————

      上記のファイル5.txtの場合は、clipboard.pyでクリップボードのテキストを取得して、固定文字列に結合/埋め込みしています。

      「script」フォルダのファイル一覧

      C:\tool\clipboardio
      └─ script
          現在日時.py ・・・ 上記の例1
          月.py ・・・ 上記の例2
          時.py
          日.py
          年.py
          秒.py
          分.py
          曜日.py
          clipboard.py ・・・ 上記の例3
          string_count.py ・・・ クリップボード内の文字数をカウント
          decode_url.py ・・・ クリップボード内の文字列をURLデコード

      「定型文」フォルダ配下および「script」フォルダ配下については、必要なファイルやスクリプトをユーザーが作成・追加する想定です。

      Pythonスクリプトでネットワークやデータベースから情報を取得したり、アプリを起動したり、Pythonスクリプトを噛ませることで何でもできるかと思いますが、この辺りはユーザーのやりたいこと次第ですね。

      今後、必要に応じてスクリプトを追加していく予定ですが、どのようなスクリプトがあれば便利に使えるのか検討/見当するところからです。

      定義ファイル(clipboardio.ini)

      [Application]
      fontName=Yu Gothic UI
      fontSize=14
      hotKey=RShiftKey
      minInterval=50
      maxInterval=200
      restartFlag=False
      fileManager=C:\Program Files\HmFilerClassic\HmFilerClassic.exe
      fileManagerArg=/select,%s
      editor=C:\Program Files (x86)\Hidemaru\Hidemaru.exe
      editorArg=/d%s /g
      editor2=C:\Program Files (x86)\sakura\sakura.exe
      editorArg2=-GREPMODE -GREPDLG -GFILE="*.txt" -GFOLDER=%s
      startTag=【
      endTag=】
      imageFileVisible=False
      htmlFileVisible=False
      
      [Window]
      title=Clipboard I/O
      height=372
      width=644
      minColumnWidth=[100,100,125,50]
      marginColumnWidth=60
      
      ; 灰色
      ItemBackground1=#FFFFFF
      ItemBackground2=#F0F0F0
      SelectBorderBrush=Gray
      SelectBorderThickness=2
      ; 赤色
      ;ItemBackground1=#FFFFFF
      ;ItemBackground2=#FFD5EC
      ;SelectBorderBrush=Red
      ;SelectBorderThickness=2
      ; 青色
      ;ItemBackground1=#FFFFFF
      ;ItemBackground2=#D9E5FF
      ;SelectBorderBrush=Blue
      ;SelectBorderThickness=2
      ; 紫色
      ;ItemBackground1=#FFFFFF
      ;ItemBackground2=#EAD9FF
      ;SelectBorderBrush=#5507FF
      ;SelectBorderThickness=2
      
      [clipboardTab]
      maxRoadFile=50
      tabLabel=クリップボード
      columnWidth=[0,378,147,59]
      
      [customTabInfo]
      tabCount=1
      [customTab0]
      tabLabel=blog
      columnWidth=[100,484,0,0]
      itemCount=6
      item0=webp.txt
      item1=rp4-img.txt
      item2=png.txt
      item3=jpg.txt
      item4=http-img.txt
      item5=avif.txt

      編集する場合は、メモ帳で編集してください。

      文字コード:Shift-JIS
      改行コード:CRLF

      です。clipboardio.iniファイルだけSJIS、他のファイルはUTF8です。Iniファイルを修正するAPIが古い。脱Iniファイルも追い追いやっていきます。


      ————————————————————
      [Application]
      fontName=フォント名
      fontSize=フォントサイズ
      hotKey=ホットキー定義
      minInterval=ホットキーのタイプ間隔下限値
      maxInterval=ホットキーのタイプ間隔上限値
      restartFlag=Trueで起動後に画面表示。
      fileManager=秀丸ファイラーClassicパス。存在しなければエクスプローラを起動
      fileManagerArg=ファイラー引数
      editor=エディタパス
      editorArg=エディタ引数
      editor2=エディタパス
      editorArg2=エディタ引数
      startTag=Pythonスクリプト名開始タグ
      endTag=Pythonスクリプト名終了タグ
      imageFileVisible=Trueで「クリップボード」タブに画像ファイル名表示
      htmlFileVisible=Trueで「クリップボード」タブにHTMLファイル名表示

      [Window]
      title=メイン画面タイトル
      height=メイン画面高さ
      width=メイン画面幅
      minColumnWidth=リストカラムの最小幅
      marginColumnWidth=リストカラムのマージン(スクロールバー幅)

      ; 灰色
      ItemBackground1=リストのゼブラ色
      ItemBackground2=リストのゼブラ色
      SelectBorderBrush=項目の選択色
      SelectBorderThickness=項目の選択幅
      ・・・

      [clipboardTab]
      maxRoadFile=起動時に「クリップボード」タブに読み込むファイル数
      tabLabel=「クリップボード」タブのラベル文字列
      columnWidth=「クリップボード」タブのカラム幅

      [customTabInfo]
      tabCount=タブ数(phraseDataフォルダ配下のフォルダ・ファイル数)
      [customTab0]
      tabLabel=タブラベル
      columnWidth=リストのカラム幅
      itemCount=リストのアイテム数
      item0=アイテムのファイル名/順序
      ————————————————————

      カラー変更

      ; 灰色
      ItemBackground1=#FFFFFF
      ItemBackground2=#F0F0F0
      SelectBorderBrush=Gray
      SelectBorderThickness=2

      色を変更する場合は、上記の4行を修正してください。

      定義ファイルの編集後にアプリ再起動が必要です。F5キーです。

      既知の不具合

      • Ctrl+ダブルクリックでアプリが異常終了する。
      • Deleteキーでファイル削除後、アイテムの選択フォーカスが0に強制される。
      • 複数項目選択できてしまう
      • 起動時に画面がちらつく(画面の初期化が完了していないとキーボートフックの通知先が取得できずメイン画面が表示できない)

      など多数あります。

      注意事項

      パスワードなどの機微情報をコピーした場合、作成された当該ファイルを削除してください。Deleteキーです。

      コピーしたデータはすべて残していく仕様のため、大きなファイルを頻繁にコピーするような作業には向いていません。ディスク使用量を確認して必要に応じて不要なファイルを削除してください。

      所感

      • System.Windows.Forms(Formsアプリ)
      • System.Windows.Window(WPFアプリ) <= 今ここ
      • WinUI 3

      C#初心者だけど愚見を述べたい。酒でも飲みながら…