Poslání stringu do textboxu jiné aplikace aneb Ochrana pred SendMessage?   otázka

VB.NET, WinAPI

Zdravím mám externí aplikaci kde jsou dva textboxy

Potřebuji je z mé aplikace vyplňovat.

Idea byla jednoduchá:

 mhWnd = FindWindow("WindowsForms10.Window.8.app.0.378734a", "Cizi Aplikace")
 hWnd = FindWindowEx(mhWnd, 0, "WindowsForms10.Window.8.app.0.378734a", vbNullString)
            hWnd = FindWindowEx(mhWnd, hWnd, "WindowsForms10.Window.8.app.0.378734a", vbNullString)
   

   
        jhWnd = FindWindowEx(hWnd, 0, "WindowsForms10.EDIT.app.0.378734a", vbNullString)
        Debug.Print(jhWnd.ToString & "HEX " & jhWnd.ToString("X"))
        hhWnd = FindWindowEx(hWnd, jhWnd, "WindowsForms10.EDIT.app.0.378734a", vbNullString)
        Debug.Print(hhWnd.ToString & "HEX " & hhWnd.ToString("X"))
   
        'Debug.Print(SendMessageString(jhWnd, WM_SETTEXT, 0, sText))
        Call SendMessage(jhWnd, WM_SETTEXT, Len(STEXT), STEXT)

Bohužel nic se neděje :D pomoci WinSpy++ jsem si ověřil že HWND jsou správná.

Může být v aplikaci nějaká ochrana?

Díky za nakopnutí správným směrem

Marek Krejčí

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Neuvedl jste deklarace API funkcí, a v tom právě může být problém, není-li efekt žádný. Ošetření chybových zpráv by mohlo pomoci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jestli sem někdo, mající podobný problém ještě zavítá, můžete také zkusit použít místo SendMessage funkci PostMessage. Osobně mám dojem, že je spolehlivější. Deklarace je stejná, pro VB.NET:

Imports System.Runtime.InteropServices 
'
'
'
<DllImport("user32", EntryPoint:="PostMessageA", CharSet:=CharSet.Auto, SetLastError:=True, ExactSpelling:=True)> _
Public Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
End Function

nebo i jen:

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

použití:

Const WM_KEYDOWN As Integer = &H100
Const WM_KEYUP As Integer = &H101 

PostMessage(hWndCilovehoOkna, WM_KEYDOWN, &H41, &H0)
PostMessage(hWndCilovehoOkna, WM_KEYUP, &H41, &H0)

'(41 je kód znaku)
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback