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
<DllImport("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
<DllImport("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 ClassBei 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
_________________________________________________________________________________________________
Internet-Adressen innerhalb des (..) WWW beginnen stets mit der Buchstabenfolge http://www. (LG Duisburg, AZ 8 O 219/99) |