Control aus fremder Anwendung auslesen !

13/01/2010 - 19:39 von Rene Klatte | Report spam
Hallo liebe Leute,
ich bin relativ neu im Bereich C# und habe mal eine Frage an die hiesigen Experten.

Ich m?chte gerne den Inhalt einer fremden Anwendung Anhand des Handles auslesen.
Das Anwendungswindow besteht aus mehreren Controls, wovon ich eine ComoBox auslesen m?chte.

Ich habe schon eine kleine Funktion gebastellt die allerdings nur mit Einschr?nkungen funktioniert.
Das Problem ist, die Daten werden nur aus dem Control ausgelesen, sofern das Window im Vordergrund ist bzw. auf dem Bildschirm sichtbar.
Vielleicht kann mir jemand einen typ geben, hier mal mein Versuch :

Danke


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private const int WM_GETTEXT = 0xD;
private const int WM_GETTEXTLENGTH = 0xE;

[DllImport("USER32.dll")]
private static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

[DllImport("USER32.dll")]
private static extern int SendMessageA(IntPtr hWnd, int msg, int wp, StringBuilder lp);

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

const int handle = 0x005E014C; // Dieses Handle ?ndert sich bei jedem Neustart!

int textLength;
int res;

StringBuilder FensterText = new StringBuilder();
textLength = SendMessage((IntPtr)handle, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero) + 1;
if (textLength <= 1)
{
this.textBox1.Text = "L?nge konnte nicht ermittelt werden";
}
else
{
FensterText.Capacity = textLength;
}

//Liest den FensterText aus.
res = SendMessageA((IntPtr)handle, WM_GETTEXT, FensterText.Capacity, FensterText);
if (res == 0)
{

this.textBox1.Text = "Text konnte nicht ermittelt werden!";
}
else
{

this.textBox1.Text = FensterText.ToString();

}
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}


Submitted via EggHeadCafe - Software Developer Portal of Choice
C# Multipart MIME Encoding Library using CDO
http://www.eggheadcafe.com/tutorial...codin.aspx
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
13/01/2010 - 22:34 | Warnen spam
Hallo Rene!

Am 13.01.2010 19:39, schrieb Rene Klatte:
Ich m?chte gerne den Inhalt einer fremden Anwendung Anhand des Handles auslesen.
Das Anwendungswindow besteht aus mehreren Controls, wovon ich eine ComoBox auslesen m?chte.

Ich habe schon eine kleine Funktion gebastellt die allerdings nur mit Einschr?nkungen funktioniert.
Das Problem ist, die Daten werden nur aus dem Control ausgelesen, sofern das Window im Vordergrund ist bzw. auf dem Bildschirm sichtbar.
Vielleicht kann mir jemand einen typ geben, hier mal mein Versuch :



Zum Ermitteln der Fensterzugriffsnummer kannst Du über die Klasse
'Process.GetProcess*' die Fensterzugriffsnummer des Hauptfensters
(Eigenschaft 'MainWindowHandle') ermitteln. Anschließend kannst Du Dich
mit der Funktionen 'FindWindowEx' weiterhangeln. Eventuell sind auch die
Funktionen 'FindWindow', 'EnumWindows', 'EnumChildWindows',
'GetDlgCtrlID', 'GetDlgItem' etc. von Nutzen.

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen