aktives Control ermitteln

05/10/2009 - 10:52 von Stefan Simon | Report spam
Hallo,

ich versuche, von einer Fremdanwendung das aktivierte Steuerelement zu
ermitteln.

\\\
IntPtr windowThreadProcessId =
GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
IntPtr idAttach = GetWindowThreadProcessId(base.Handle,
IntPtr.Zero);
if (AttachThreadInput(idAttach, windowThreadProcessId, true))
{
IntPtr focus = GetFocus();
if (focus != IntPtr.Zero)
{
Control ctrl = Control.FromHandle(focus);
if (ctrl != null)
{
this.Text = ctrl.Name;
}
else
{
StringBuilder lpClassName = new StringBuilder(0xff);
GetClassName(focus, lpClassName, 0xff);
this.Text = lpClassName.ToString();
}
}
AttachThreadInput(idAttach, windowThreadProcessId, false);
}
///

GetFocus() gibt auch ein Handle zurück, aber Control.FromHandle() kein
Object. Vielleicht funktioniert das ja nur mit .Net-Objects. Gibt es noch
eine andere Möglichkeit, an Informationen über das Steuerelement zu kommen?
Mich interessiert vor allem der Name, damit ich an das Handle komme, ohne
dass das Control den Fokus hat.

tia
Stefan
 

Lesen sie die antworten

#1 Stefan Simon
05/10/2009 - 12:11 | Warnen spam
Habs jetzt noch mit

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam,
byte[] lParam);

int msg =
GetWinFormsId.NativeMethods.RegisterWindowMessage("WM_GETCONTROLNAME");
int size = 65536;
byte[] buff = new byte[size];
int retLength = GetWinFormsId.NativeMethods.SendMessage(hwnd, msg, size,
buff);
return System.Text.Encoding.UTF8.GetString(buff);


probiert, leider bleibt buff leer ...

Hat jemand eine Idee?

Stefan

Ähnliche fragen