Skip to content

SEC-RKatayama/CursorTrajectory

Repository files navigation

一定時間、マウスカーソルの位置を記録して、それを画面と同じサイズの画像に軌跡として描画します。

OpenCVをちょっと触ってみたくて、お遊びで作ったものです。

Prerequisites

  • CMake 3.25以上

Build

mkdir build && cd build
cmake ..
make

これで実行ファイルmain.exeが生成されるので、

chmod +x ./main.exe

 

How to use

Command-line use

./main.exe 1 2

これで、実行してから1秒後から2秒間のカーソル座標を記録する。 引数の詳細は下の方に記載。

記録されたカーソルの軌跡は画像として、実行ディレクトリに保存される。 ファイル名はoutput.png

 

Command-line arguments

  1. [long] 記録開始までの時間 [秒]
  2. [long] 記録の期間 [秒]
  3. [long] 記録の間隔 [ミリ秒](デフォルト:50ミリ秒)

 

これから追加したいと思っている機能(実装するとは言ってない)

  • GUI機能
    • ボタンクリックを開始/終了とする
    • 指定キー(スペースキー)押下を開始/終了とする
  • 時間指定
    • 今すぐスタート/今すぐストップ
    • スタート・ストップのタイミングを時刻で指定
    • スタート・ストップのタイミングを現在からの経過時間で指定
  • 背景を透過するかどうかを選択
  • 線の色を指定
  • 画像の保存場所を指定
  • 画像のファイル名を指定
  • Debugモード
    • 詳細なログを出力
  • macOS対応
  • Linux対応

 

std::threadで時間周期的処理を実装する理由(ChatGPT 3.5談)

forループの中にsleepを入れる方法とstd::threadを使用する方法にはいくつかの違いがあります。

forループにsleepを入れる方法:

  1. シンプルさ:

    • forループ内でsleepを使用する方法はシンプルで直感的です。処理の一部としての時間待ちを明確に示すことができます。
  2. 単純な周期的な処理:

    • 単純な周期的な処理を行う場合には、forループとsleepを組み合わせることで、比較的簡単に実装できます。

std::threadを使用する方法:

  1. 非同期処理:

    • std::threadを使用することで、処理をメインスレッドから分離し、非同期で実行できます。これにより、他の処理と並行して時間を待つことができます。
  2. 柔軟性:

    • std::threadを使用すると、スレッド内で処理を実行しながら、そのスレッドを停止させる時間やタイミングをより柔軟に制御できます。sleepは一定の時間待つだけですが、std::threadを使うとスレッドを動的に制御できます。
  3. 複雑な処理の分離:

    • std::threadを使用することで、複雑な処理をスレッド内で管理し、メインスレッドと分離することができます。これにより、処理の複雑さに応じてスレッドごとに制御できます。
  4. 同時性:

    • std::threadを使うことで、複数の処理を同時に実行し、マルチタスクを実現できます。これにより、システム全体のレスポンスが向上する場合があります。

ただし、std::threadを使う際には、マルチスレッドプログラミングに伴う注意が必要です。同期、競合条件、デッドロックなど、スレッドセーフなコードを書くことが重要です。また、スレッドの管理やオーバーヘッドについても考慮する必要があります。

About

Draw mouse cursor trajectory

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published