『眠気吹っ飛ばす作業用アプリ』【暖かい目で見てね】


なぜつくったの?

寝落ちでぴえんしそうになったから

作ったもの

  • 常駐するWPFアプリケーション
    GitHub リリースページ
    Github初心者感すごいですが、気にしないでください

概要gif

解決したい課題

寝落ちせずに作業がしたい

私の趣味は、『締め切りギリギリに徹夜で作業や課題をすること
この趣味は、寝落ちする可能性をぬぐい切れません。
そこで、寝落ちしないようなアプリケーションを作成した。

こうなってほしい

1.作業中に常駐する

2.マウスとキーボードの入力が一定時間止まる

3.設定したアラーム音を鳴らす

4.びっくりして起きる

問題点

気持ちよく寝ているところを起こされると不機嫌になってしまう

実装した処理(折り畳み:ソースコード)

入力が一定時間ないことを判別する
public static class User32Interop{
/// 最終操作からの経過時間
/// </summary> ミリ秒で表示される Ex. 1sec -> 1000, 5sec -> 5000
    public static TimeSpan GetLastInput(){
        var plii = new LASTINPUTINFO();
        plii.cbSize = (uint)Marshal.SizeOf(plii);
        if (GetLastInputInfo(ref plii))
            return TimeSpan.FromMilliseconds(Environment.TickCount - plii.dwTime);
        else
            throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
    }
    [DllImport("user32.dll", SetLastError = true)]
    static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
    struct LASTINPUTINFO{
        public uint cbSize;
        public uint dwTime;
    }
}


アラーム音を鳴らす
SoundFilePlay.cs
string SoundFilePath = SleepDown.Properties.Settings.Default.FilePath;
string FileExtension = System.IO.Path.GetExtension(SoundFilePath);
switch (FileExtension){
    case ".mp3"://This is fall through so it's not that i forget break;
    case ".wav":
    case ".flac":
        Microsoft.SmallBasic.Library.Sound.PlayAndWait(SoundFilePath);
        break;

    default:
        MessageBox.Show("音声ファイルは\n対応した拡張子を設定してください");
        break;
}


再生する音源をローカルファイルから選択可能にする
GetFilePath.cs
//設定に音源ファイルのパスを保存しているため
//パスを取得
var FileDialog = new Microsoft.Win32.OpenFileDialog();
FileDialog.Title = "開くファイルを選択してください";
FileDialog.Filter = "mp3ファイル|*.mp3|wavファイル|*.wav|flacファイル|*.flac";
if (FileDialog.ShowDialog() == true){
    SoundFilePath = FileDialog.FileName;
}

実装したい処理

  • 再生音源の音量調整
  • アラーム音を再生途中で入力があった場合の途中停止

最後に

もし読んでくれた人がいたならありがとうございます
深夜テンションでヒャッハー!して書いたのでわけわからないところはご愛嬌で頼んます。

ps.
初めて書いたのでC#もQiitaもぐちゃぐちゃです。