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á:

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

1
2
3
4
5
6
7
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:

1
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í:

1
2
3
4
5
6
7
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

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