2021.4.15
INASOFT
/トップ/マウスふるふる ダウンロード/WebHelp/ヘルプトップ
動作原理について(基本編)
ここでは、本ソフトの動作原理の基本について解説しています。
なお、本ソフトはC++言語を用いて開発しておりますので、解説もC++言語で行っています。
スクリーン セーバー、スリープモードへ入るのを防ぐには
スクリーン セーバー、スリープモードへ入るのを防ぐための、もっとも単純な手段としては、Windowsの設定を変更し、これらのモードへ入ることをOFFにすることになります。
しかしながら、何らかの理由(会社のセキュリティポリシーで変更が禁止されている、あるいは面倒くさいなど)で上記のような手段を採れない場合は、マウスを定期的に動かし続けるとか、キーボードを定期的に押し続けるとかいった手段を採る必要があります。
本ソフトは、それをソフトウェア的に実現します。ここでは、その実現方法について述べます。
ソフトウェア的なマウスの動かし方
Windowsにおいて、マウスポインタの位置をソフトウェア的に変えたい場合は、SetCursorPos() APIを使うことになりますが、ここでやりたいことは「マウスの動きをエミュレーションする」ことです。
ソフトウェア的にマウスの動きをエミュレーションするためには、mouse_event() APIを使います。
mouse_event(MOUSEEVENTF_MOVE, 1, 0, 0, 0); // マウスを右へ1ミッキー移動 mouse_event(MOUSEEVENTF_MOVE, -1, 0, 0, 0); // マウスを左へ1ミッキー移動
「ミッキー」とはマウスの移動量の単位です。マイクロソフトの技術者が、ジョークとして、某夢の国のキャラクターにちなんで名付けたらしいです。
1ミッキーが、画面上の何ピクセルの移動に割り当てられているかは、OSの設定に依存します。1ピクセルに満たない移動量かもしれません。それでも、スクリーン セーバー、スリープモードへ入るのを防ぐには十分な移動量となります。
本ソフトの目的としては、PCに触っていないときはもちろんのこと、PCに触っているときも、ユーザーの操作に悪影響があってはいけませんから、むしろ1ピクセル未満の移動量の方が望ましいとも言えます。
この移動を、指定秒数の時間だけ経過したら行うようにして、それをインターバルタイマで繰り返し行います。インターバルタイマは、SetTimer() APIとWM_TIMERメッセージを使いますが、そのあたりは今回の本題からは逸れますので解説は割愛します。
余談ですが、動物のマウスを表すときは、単数系/複数形がmouse/miceとなります。しかし、コンピュータ周辺機器としてのマウスが2つあっても、two miceとは聞きませんね。
ソフトウェア的なキーボードの押し方
マウスが接続されていない環境や、VDI環境のためにクライアント側マウスを自由に動かせない環境の場合の考慮も必要です。その場合は、キーボードの押下で代替します。
Windowsにおいて、キーボードの押下状態をソフトウェア的に変えたい場合は、keybd_event() APIを使うことになります。
if (GetKeyState(VK_SHIFT) < 0) { // すでにキーを押下中の場合は、ユーザーがPCを利用中とみなし、何もしない } else { // シフトキーの押下/解除をエミュレート keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); }
ユーザーがPCに触っていないときなら問題ありませんが、PCに触っている場合、シフトキーの押下エミュレートだと、低確率ながらユーザーの操作に悪影響が出る可能性もあります。そのため、VK_SHIFT(シフトキー)ではなく、VK_SCROLLやVK_PAUSEを使うほうが良いかもしれません。なお、VK_SCROLLを使う場合、1回の押し離しではトグル状態(ロックされてしまう状態)にハマるため、VK_SCROLLを使う場合は、押し離し操作を2回繰り返して行うのがよいです。
動作原理について(応用編)
おまけページの目次へ戻る
目次へ
※このページは、ソフトウェアに付属のヘルプファイルをWeb用に再構築したものです。大部分に自動変換を施しているため、一部は正しく変換しきれずに表示の乱れている箇所があるかもしれませんが、ご容赦下さい。また、本ドキュメントはアーカイブドキュメントであり、内容は、右上の作成日付の時点のものとなっております。一部、内容が古くなっている箇所があるかと思いますが、あらかじめご了承下さい。
※このページへは、自由にリンクしていただいてかまいません。
■このページに関するご意見をお待ちしております → フィードバックページ