Welcome guest. Before posting on our computer help forum, you must register. Click here it's easy and free.

Author Topic: keypress or mouse move exe  (Read 7817 times)

0 Members and 1 Guest are viewing this topic.

Blisk

    Topic Starter


    Intermediate

    Thanked: 1
    • Experience: Familiar
    • OS: Windows 7
    keypress or mouse move exe
    « on: November 15, 2019, 01:23:07 AM »
    I need a small program which will detect if any key from A to Z or 0 to 9 is pressed than it makes a txt file, after that if nothing happend for 30 minutes it delete that file and it should work as process.
    And there is config file to set path and time.
    I get this in C# but it doesn't work, can someone look at it and see why it is not working, please?
    here is C# version

    Code: [Select]
    using System.Runtime.InteropServices;
    using System.Threading.Tasks;



    [DllImport("user32.dll")]
    static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

    [StructLayout(LayoutKind.Sequential)]
    struct LASTINPUTINFO
    {
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

    [MarshalAs(UnmanagedType.U4)]
    public UInt32 cbSize;
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
    }

    static uint GetLastInputTime()
    {
    uint idleTime = 0;
    LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
    lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
    lastInputInfo.dwTime = 0;

    uint envTicks = (uint)Environment.TickCount;

    if (GetLastInputInfo(ref lastInputInfo))
    {
    uint lastInputTick = lastInputInfo.dwTime;
    idleTime = envTicks - lastInputTick;
    }

    return ((idleTime > 0) ? (idleTime / 1000) : 0);
    }

    private uint _lastInputTime;
    private bool _idle = false;
    private string _fileName;
    private int _idleTime = 1800;

    void Main()
    {
    var cfg = File.ReadAllLines("nastavitve.cfg");
    _fileName = cfg[0];
    int.TryParse(cfg[1], out _idleTime);

    _lastInputTime = GetLastInputTime();

    while (true)
    {
    var inputTime = GetLastInputTime();

    if (_idle && inputTime - _lastInputTime < 1)
    {
    _idle = false;

    File.Create(_fileName).Close();
    }

    if (!_idle && inputTime - _lastInputTime > 5)
    {
    _idle = true;

    if (File.Exists(_fileName))
    File.Delete(_fileName);
    }

    Thread.Sleep(1000);
    }
    }


    and here is version for compiling with VS

    Code: [Select]
    using System;
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Threading;

    namespace ConsoleApp1
    {
        class Program
        {
            [DllImport("user32.dll")]
            static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

            [StructLayout(LayoutKind.Sequential)]
            struct LASTINPUTINFO
            {
                private static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

                [MarshalAs(UnmanagedType.U4)]
                public uint cbSize;
                [MarshalAs(UnmanagedType.U4)]
                public uint dwTime;
            }

            static uint GetLastInputTime()
            {
                uint idleTime = 0;
                LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
                lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
                lastInputInfo.dwTime = 0;

                uint envTicks = (uint)Environment.TickCount;

                if (GetLastInputInfo(ref lastInputInfo))
                {
                    uint lastInputTick = lastInputInfo.dwTime;
                    idleTime = envTicks - lastInputTick;
                }

                return ((idleTime > 0) ? (idleTime / 1000) : 0);
            }

            private static uint _lastInputTime;
            private static bool _idle = false;
            private static string _fileName;
            private static int _idleTime = 1800;

            static void Main()
            {
                var cfg = File.ReadAllLines("nastavitve.cfg");
                _fileName = cfg[0];
                int.TryParse(cfg[1], out _idleTime);

                _lastInputTime = GetLastInputTime();

                while (true)
                {
                    var inputTime = GetLastInputTime();

                    if (_idle && inputTime - _lastInputTime < 1)
                    {
                        _idle = false;

                        File.Create(_fileName).Close();
                    }

                    if (!_idle && inputTime - _lastInputTime > _idleTime)
                    {
                        _idle = true;

                        if (File.Exists(_fileName))
                            File.Delete(_fileName);
                    }

                    Thread.Sleep(1000);
                }
            }
        }
    }