[C#] Inhalt eines Textfeldes auslesen


O

orlando

Hallo zusammen ich versuche seit längeren einen Code zu schreiben/finden mitdem ich den inhalt eines Textfeldes einer Anwendung auslesen kann!

Mir ist klar, das ich dem Programm irgend wie sagen muss welches Textfeld gemeint ist.
Vieleicht ist es möglich das textfeld zu nehmen aufdas meine Maus zeigt?

(Noch mal für besonders schlaue: Das Textfeld gehört NICHT zu meiner Anwendung, es befindet sich auf einer 2. externen Anwendung )

Hoffe auf schnelle und qualitative Hilfe
Danke im voraus!
 
O

orlando

##################

sry

##################

Kann mir jemand den link ins richtige Forum geben?
Danke im voraus!
und nochmal Entschuldigung!
 

Erik

Erfahrenes Mitglied
Hi,

Ich glaube nicht das das geht es ist ja ein externes Program. Würde auch ziemlich unsicher sein. (man könnte Passwörter etc. erspähen)

Gruß
x y z
 

engelmarkus

Erfahrenes Mitglied
Folgendermaßen kommt man über ein paar Umwege an den Text von Controls ran:
C#:
class Helper {
  [DllImport("user32.dll")]
  public static extern IntPtr WindowFromPoint(Point lpPoint);
  
  [DllImport("user32.dll")]
  public static extern bool GetCursorPos(out Point lpPoint);
  
  [DllImport("user32.dll", CharSet = CharSet.Auto)]
  public static extern int GetClassName(IntPtr hWnd,
    StringBuilder lpClassName, int nMaxCount);
  
  [DllImport("user32.dll")]
  public static extern int SendMessage(IntPtr hWnd, uint Msg,
    int wParam, StringBuilder lParam);
  
  [DllImport("user32.dll")]
  public static extern int SendMessage(IntPtr hWnd, uint Msg,
    int wParam, int lParam);
  
  const uint WM_GETTEXT = 0x0D;
  const uint WM_GETTEXTLENGTH = 0x0E;
  
  public static string GetControlText(IntPtr hWnd) {
    int length = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);
    
    StringBuilder buffer = new StringBuilder(length+1);
    
    SendMessage(hWnd, 0x0d, buffer.Capacity, buffer);
    
    return buffer.ToString();
  }
  
  public static IntPtr GetWindowUnderCursor() {
    Point ptCursor = new Point();
    
    if (!GetCursorPos(out ptCursor))
      return IntPtr.Zero;
    else
      return WindowFromPoint(ptCursor);
  }
  
  public static string GetWindowClassName(IntPtr hWnd) {
    StringBuilder buffer = new StringBuilder(128);
    
    GetClassName(hWnd, buffer, buffer.Capacity);
    
    return buffer.ToString();
  }
}
Im Endeffekt lässt du dir das Handle vom Control unter dem Mauszeiger ermitteln, schaust, ob die Klasse des Controls "Edit" ist, und wenn ja, dann fragst du den Text ab...
 
Zuletzt bearbeitet:
O

orlando

Vielen dank probiere ihn gleich mal aus

Ich finde es sehr gut, dass man hir so schnell hilfe findet

(Wenn man gleich ins richtige forum schreibt, nicht wie ichg ins falsche :-( )

Ich habe noch ne frage: Wie benütze ich deinen code?



private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = Was_muss_hir_rein?
}

oder ganz anders?
 

engelmarkus

Erfahrenes Mitglied
So zum Beispiel:
C#:
IntPtr windowHandle = Helper.GetWindowUnderCursor();

label1.Text = windowHandle.ToString();
label2.Text = Helper.GetWindowClassName(windowHandle);
label3.Text = Helper.GetControlText(windowHandle);
 
O

orlando

Danke!


-------

Ich bekome bei

[DllImport("user32.dll")]

2 Fehler Ich habe die zeile erstmal gelöscht
Es entschtanden keine neuen fehler

alerdings ist da noch das:

Error 1 The type or namespace name 'Point' could not be found (are you missing a using directive or an assembly reference?) C:\Dokumente und Einstellungen\orlando\Eigene Dateien\Visual Studio 2008\Projects\test2\test2\Class1.cs 12 53 test2
 

engelmarkus

Erfahrenes Mitglied
Folgendes muss ganz oben in die Codedatei:
C#:
using System;
using System.Text;
using System.Drawing;
using System.Runtime.InteropServices;
 
O

orlando

Danke was für ein dummer Fehler
Bin von der schenellen und guten hilfe beeindruckt
War mein erstes mal auf tutorials.de

Werde warscheinlich stamm User :)
 

blacki3011

Grünschnabel
Erst mal ein dickes DANKE an engelmarkus für die Hilfe.
Ich bin an dem selben Thema dran deshalb hänge ich mich mal hier mit rein.

Dein Code funktioniert wunder bar. Aber ich bekomme als WindowsClassName z.B. nicht EDIT angezeigt sondern -> WindowsForms10.EDIT.app.0.33c0d9d ok da steht das edit mit drin. Kann man das auch isolieren ohne den String zu bearbeiten?

Zweite sache wie kann ich ein Feld in der externen Anwendung füllen?