Hallo DarkWolf,
hatte ich wohl überlesen, dass mit den Fenstern nicht in den
Vordergrund.. Sorry!
Also dann wäre noch die Methode über SendMessage die mir
einfällt. Laut MSDN gibt es auch anscheinend derzeitig keine
andere Methode. Ich finde API Aufrufe aus NET etwas „nervig“
– Unmanaged-Code kann in Managed-Code schnell mal zur
Problemfalle werden Auch in Betracht mit den Security Options
in NET – aber das musst Du als Entwickler letztendlich
entscheiden.
[u]Teste mal den Code:
Imports System
Imports System.Runtime.InteropServices
Public Class Form1
Const WM_GETTEXT As Integer = 13 ' 0x000d
Const WM_SETTEXT As Integer = 12 ' 0x000c
("user32.dll")> _
Private Shared Function FindWindowEx( _
ByVal hwndParent As IntPtr, _
ByVal hwndChildAfter As IntPtr, _
ByVal lpszClass As String, _
ByVal lpszWindow As String) As IntPtr
End Function
("user32.dll")> _
Private Shared Function SendMessage( _
ByVal hWnd As IntPtr, _
ByVal Msg As Integer, _
ByVal wParam As Integer, _
ByVal lParam As System.Text.StringBuilder) _
As Integer
End Function
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim myProcess As Process() =
Process.GetProcessesByName("Notepad")
Dim hWnd_EditBox As IntPtr = _
FindWindowEx(myProcess(0).MainWindowHandle, _
IntPtr.Zero, "EDIT", Nothing)
If Not (hWnd_EditBox = IntPtr.Zero) Then
Dim SB As New Text.StringBuilder
Dim BufferSize As Integer = 32768
SB.EnsureCapacity(BufferSize)
SendMessage(hWnd_EditBox, WM_GETTEXT, BufferSize,
SB)
SB.Append("Hallo vbWelt!" + vbNewLine)
SendMessage(hWnd_EditBox, WM_SETTEXT, BufferSize,
SB)
End If
End Sub
End Class Bei dem Code wird nach dem Unterfenster im
Notepad gesucht (nach dem Handle) – dieses Unterfenster
spricht man dann über das Nachrichten-System von Windows an
und kann somit den Text auslesen und danach wieder zuweisen –
Das musst Du natürlich, entsprechend der Applikation von der
Text ausgelesen bzw. eingelesen wird, anpassen. In dem Falle
heißt die Klasse bei dem Notepad „EDIT“ – Hier empfehlen sich
Programme wie z.B. Spy++ von Microsoft.
Siehe (bzw. muss das noch angepasst werden) Dim hWnd_EditBox As IntPtr =
FindWindowEx(myProcess(0).MainWindowHandle, IntPtr.Zero,
"EDIT", Nothing) Wichtig – die Buffersize
– die habe ich jetzt mal völlig hoch gehalten um das
Prinzip zu erklären. Hier musst Du evtl. auch noch bei.
Viel Erfolg + Glück
BrickTop
|