• 応援・寄付のお願い

    Cliborの真似です。
    https://chigusa-web.com/clibor/dnt

    Amazonギフトカード

    Amazonギフトカード

    メールアドレス「develop.kozawa@gmail.com」を用意してみました。

    15円から投げられて、手数料・消費税はかからないとか。

    より良いフリーソフトのためにー

    欲しいものリスト

    欲しいものリスト

    おいしーーーー!

    オレはまだイチローになりたいんだー

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

    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#初心者だけど愚見を述べたい。酒でも飲みながら…

  • 中居正広

    🔥FIRE いいなー😏

  • キーのリマッピング

    もう「Microsoft PowerToys」の「FancyZones」でいいかもしれないけど、自分用に修正したので貼っておこー

    バグ修正

    • Alt+Qキーでの画面移動時に高さの指定に誤りがありましたので修正しました。

    機能変更

    Alt+Q、Alt+A、Alt+W、Alt+Sキー:画面幅を固定値(スクリーン幅/2)としていた処理を修正しました。
    →Alt+1キーまたはAlt+3キーで画面幅を変更した後、Alt+Q、Alt+A、Alt+W、Alt+Sキーで高さを変更してください。

    機能追加

    Alt+F12:アクティブ画面の位置・サイズを埋め込んだスクリプト文字列をメッセージボックスで表示します。

    !F12:: {
        WinGetPos &x, &y, &width, &height, WinGetID("A")
        message := Format('WinMove({1}, {2}, {3}, {4}, WinGetID("A"))', x, y, width, height)
        A_Clipboard := message
        MsgBox(message,, "OK")
    }

    →クリップボードに「WinMove(0, 0, 960, 516, WinGetID(“A”))」のようなスクリプト文字列がコピーされます。固定位置に画面を移動させたい場合に任意のホットキーに割り当ててください。

    例:Alt+4、Alt+5、Alt+6

    ; 画面位置設定例
    !*4:: WinMove(0, 0, 960, 516, WinGetID("A"))
    !*5:: WinMove(500, 250, 960, 600, WinGetID("A"))
    !*6:: WinMove(960, 516, 960, 516, WinGetID("A"))

    スクリプト修正後はスクリプトのリロードが必要です。

    作ったもの

    keyremap_20250122.zip

  • 大寒

    寒さが最も厳しくなる頃。寒(小寒 – 立春前日)の中日で、一年で最も寒い時期。

    https://ja.wikipedia.org/wiki/大寒

    暖かいですねぇ… 🫠