ユーザーがアクティブかどうかをチェックするC++アプリ

Covid 19の危機以来、多くの企業が従業員のオフィスへの出勤は必要ないと気づきました。なぜなら、彼らは自宅からでも十分に仕事ができるからです。現在でも多くの企業がこの一歩を踏み出すことを恐れています。なぜなら、従業員が働いているかどうかを監視できないからです。

この投稿では、チームメンバーが仕事をしているか、それとも自宅でサボっているかを知ることができる興味深いアプリを提案します。

```cpp
#include <iostream>
#include <thread>
#include <chrono>

#ifdef _WIN32
#include <windows.h>
#elif __APPLE__
#include <ApplicationServices/ApplicationServices.h>
#endif

void sendInactive() {
    std::cout << "ユーザーはアクティブではない。通知を送信する...\n";
}

void sendActif() {
    std::cout << "ユーザーはアクティブです。 通知を送信する...\n";
}

void detectInactivity(int seconds) {
    bool userActive = true;
    while (true) {
        std::this_thread::sleep_for(std::chrono::seconds(seconds));
#ifdef _WIN32
        LASTINPUTINFO lastInputInfo;
        lastInputInfo.cbSize = sizeof(LASTINPUTINFO);
        if (GetLastInputInfo(&lastInputInfo)) {
            DWORD idleTime = GetTickCount() - lastInputInfo.dwTime;
            if (idleTime >= seconds * 1000) {
                sendInactive();
                userActive = false;
            } else {
                if (!userActive) {
                    sendActif();
                    userActive = true;
                }
            }
        }
#elif __APPLE__
        CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
        CGEventRef event = CGEventCreate(NULL);
        double idleTime = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateHIDSystemState, kCGAnyInputEventType);
        CFRelease(event);
        CFRelease(source);
        if (idleTime >= seconds) {
            sendInactive();
            userActive = false;
        } else {
            if (!userActive) {
                sendActif();
                userActive = true;
            }
        }
#endif
    }
}

int main() {
    sendActif();
    detectInactivity(1);
    return 0;
}
```

## Windowsの場合

1. システムにC++コンパイラがインストールされていることを確認してください。**MinGW**、**Microsoft Visual Studio**、またはその他の互換性のあるコンパイラを使用できます。

2. 次に、コードを拡張子.cppのファイルに配置します。たとえば、**inactivity.cpp**などです。

3. **inactivity.cpp**ファイルが含まれるディレクトリでターミナルウィンドウを開きます。

4. コンパイラを使用してソースコードをコンパイルします。たとえば、**MinGW**を使用する場合、次のようなコマンドをターミナルで使用できます：

```bash
g++ inactivity.cpp -o inactivity.exe
```

これにより、**inactivity.exe**という名前の実行可能ファイルが作成されます。

5 . 最後に、**inactivity.exe**をダブルクリックしてアプリを実行するか、ターミナルから次のコマンドを使用して実行します：

```bash
inactivity.exe
```

## macOSの場合

1. **Xcode**とそのコマンドラインツールがインストールされていることを確認してください。これには、C++コンパイラが含まれています。

2. コードを.cpp拡張子のファイルに配置します。たとえば、**inactivity.cpp**などです。

3. ターミナルを開き、**inactivity.cpp**ファイルが含まれるディレクトリに移動します。

4. ソースコードをコンパイルするには、**g++** を使用します。たとえば：

```bash
g++ inactivity.cpp -o inactivity -framework ApplicationServices
```

これにより、**inactivity**という名前の実行可能ファイルが作成されます。

5 . ターミナルから次のコマンドを使用してアプリを実行します：

```bash
./inactivity
```

## 説明します

アプリを起動すると、ユーザーの非アクティブ状態を監視し、ユーザーが非アクティブの場合に **sendInactive()** 関数を実行し、ユーザーがアクティブの場合に **sendActif()** 関数を実行します。

## あなた次第です

このアプリは意図的に最小限に抑えられています。ユーザーがアクティブまたは非アクティブの場合に何を行うかは、あなた次第です。

以下はいくつかのアイデアです：

- チームメンバーが1時間以上非アクティブである場合、マネージャーに通知、メール、またはSMSを送信します。
- 親であり、子供が1日に3時間以上コンピューターを使用しないようにしたい場合。コンピューターの使用を制限するスクリプトを作成できます。
- 不在時に誰かがあなたのコンピューターを使用していることを知りたい場合。


## 動画

必要なら、Youtubeで動画を作成しました。

<iframe width="1062" height="606" src="https://www.youtube.com/embed/KqRTBeW82nQ" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>