C# Fensterinhalt vom Firefox auslesen

Hallo,

ich möchte, wie der Titel schon sagt, den aktuellen Fensterinhalt vom Firefox auslesen.
Ich habe nur keine Ahnung wo ich anfangen soll.
Ich habs über System.Diagnostics.Process versucht, komme aber nicht weiter.

Bitte um Rat.


danke schonmal
 
Ja, hat mir weitergeholfen.

ich kann jetzt die Titelleiste vom FF auslesen. Scheinbar bietet die user32.dll da ein paar hilfreiche Methoden. Kennt sich jemand damit aus?

Hier erstmal der Code:
Code:
namespace FFauslesen
{
    class Program
    {
        static void Main(string[] args)
        {

            Process[] processes = Process.GetProcessesByName("firefox");
            string titel = "";
            foreach (Process process in processes)
            {

                 titel = process.MainWindowTitle;

            }
            IntPtr hwnd = UnsafeNativeMethods.FindWindow(null, titel);

            StringBuilder stringBuilder = new StringBuilder(256);

            UnsafeNativeMethods.GetWindowText(hwnd, stringBuilder, stringBuilder.Capacity);

            Console.WriteLine(stringBuilder.ToString());
         }
    }

    [SuppressUnmanagedCodeSecurity]

    internal static class UnsafeNativeMethods
    {

        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]

        internal static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);

        [DllImport("user32.dll", SetLastError = true)]

        internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);



    }
}
 
In einem Browserfenster gibts jede Menge Inhalt. Was genau willst du davon auslesen und was hast du damit vor? Mit etwas mehr Informationen kann man dir vielleicht auch besser helfen.
 
ich möchte den gesamten Text des gerade aktiven Fensters bzw. Tab auslesen.(nicht den Seitenquelltext, auch keine Bilder). Diesen Text will ich dann später nach bestimmten Inhalten durchsuchen.
 
naja wenn du den quelltext hast, kannst ja trotzdem durchsuchen oder versteh ich das falsch?
 
vermutlich wäre es einfacher ein firefox addon zu bauen, dass dann irgendwie mit deiner anwendung kommuniziert, wenn das gefunden wurde was du suchen lässt...

edit: zumindest hättest du zugriff auf DOM und könntest effizient suchen
 
naja wenn du den quelltext hast, kannst ja trotzdem durchsuchen oder versteh ich das falsch?

Ich habe den Quellcode ja nichtmal, nur den Text in der Titelleiste des FF. selbst wenn reicht mir der Quellcode leider nicht. Wenn eine Webseite z.b. mit php geschrieben ist bekomme ich da nicht den Text den ich eigentlich will.



Ein Firefox addon zu bauen ist leider keine Möglichkeit, da ich den Firefox nicht verändern möchte/kann.
Sry, aber mein Code soll teil eines größern Programms werden, an dem ich und ein paar Freunde arbeiten.
 
Zuletzt bearbeitet:
dann wirst du aus c#/.net nicht nativ da dran kommen.

es gibt schnittstellen zu xpcom, aber meines wissens keine für .net

ein anderer weg wäre die konfiguration zwischenzeitlich zu ändern, und einen proxy für FF zu bauen, der mitlesen kann ...


Wenn eine Webseite z.b. mit php geschrieben ist bekomme ich da nicht den Text den ich eigentlich will.
an den php quelltext kommst auf clientseitig in der regel gar nicht ...

Ein Firefox addon zu bauen ist leider keine Möglichkeit, da ich den Firefox nicht verändern möchte/kann.
Sry, aber mein Code soll teil eines größern Programms werden, an dem ich und ein paar Freunde arbeiten.
was ist das hindernis ?

dein programm kann das FF addon als resource mitführen, und bei bedarf installieren ...

das addon selbst öffnet beispielsweise via xpcom einen socket zu deiner c# anwendung und schiebt nach jedem seitenaufruf was auch immer auf dem socket raus ...
 
Ich will gar nicht an das php script, sondern wirklich an den angezeigten Text.
Eine Alternative wäre vlt. eine Tastatureingabe zu simulieren, Strg +C und den Text aus der Zwischenablage auszulesen. Nur müsste das bei jedem Öffnen einer neuen Webseite oder eines Fensters geschehen. Denke das würde doch den user dann stören, oder?
 
Also erstmal verstehe ich deine Aussage nicht, dass dir der Quelltext nicht reichen würde, wenn die Seite mit PHP erstellt/generiert ist. Der Quelltext ist das, was am Ende auch von deinem Browser angezeigt wird. Wenn, dann könnte ich mir höchstens bei JS, speziell AJAX, Probleme vorstellen.

Und falls xpcom wirklich die Möglichkeiten zur Verfügung stellt, die man benötigt, kann man das auch aus .NET heraus benutzen.
Du könntest dir dafür z.B. einen Wrapper schreiben. http://msdn.microsoft.com/en-us/library/ms235281(VS.80).aspx

Die Idee mit dem Screenshot ist übrigens nicht so doll, zumal du Probleme bekommen wirst, Textzusammenhänge zu erkennen und da natürlich auch nicht die ganze Seite sehen wirst, wenn die nicht komplett auf den Bildschirm passt (z.B. bei Foren).
 
Wäre es vielleicht generell nicht einfacher auf die History von Firefox zuzugreifen und den Link dann direkt im C-Programm zu laden? Das Ergebnis kann man dann ja durch einen Parser schicken um den gewollten Text zu bekommen. Nur so eine Idee..
 
Also erstmal verstehe ich deine Aussage nicht, dass dir der Quelltext nicht reichen würde, wenn die Seite mit PHP erstellt/generiert ist. Der Quelltext ist das, was am Ende auch von deinem Browser angezeigt wird. Wenn, dann könnte ich mir höchstens bei JS, speziell AJAX, Probleme vorstellen.

Ja, sry, ich hab da wohl was verwechselt. Ja der Quellcode würde auch gehen.
Trotzdem weiß ich noch nicht wie ich da ran kommen soll. Die Sache mit xpcom klingt interessant. Werd mal google damit füttern, mal sehen was raus kommt:wink:


Soll aber nicht heißen das nicht weitere Ideen gefragt sind.
 
so, dank google habe ich eine c# code gefunden der mir da weiterhilft:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
    class Program
    {
        public delegate bool CallBack(int hwnd, int lParam);
        [DllImport("user32.dll")]
        public static extern int GetClassName(int hWnd, string lpClassName, int nMaxCount);
        [DllImport("user32.dll", SetLastError = true)]
        public static extern int GetWindowText(int hWnd, StringBuilder lpString, int nMaxCount);
        [DllImport("user32.dll")]
        public static extern int EnumWindows(CallBack callback, int param);
        [DllImport("user32.dll")]
        public static extern int FindWindowEx(int hWndParent, int hWndChild, string lpsClass, string lpsTilte);

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

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int SendMessageBlah(IntPtr hwnd, int wMsg,
            IntPtr wParam,
            IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessage")]
        public static extern int SendMessageFaul(IntPtr hwnd, int wMsg,
            int wParam,
            StringBuilder lParam);

        private const int WM_GETTEXT = 0x000D;
        private const int WM_GETTEXTLENGTH = 0x000E;

        private static string GetText(IntPtr hwnd)
        {
            int lngLength;
            StringBuilder strBuffer = new StringBuilder();
            int lngRet;

            lngLength = SendMessage(hwnd, WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero) + 1;

            strBuffer.Capacity = lngLength;

            lngRet = SendMessageFaul(hwnd, WM_GETTEXT, strBuffer.Capacity, strBuffer);
            if (lngRet > 0)
                return strBuffer.ToString().Substring(0, lngRet);
            return
                null;
        }

        static void Main(string[] args)
        {

             CallBack callBack = new CallBack(DisplayWindowInfo);
            EnumWindows(callBack, 0);
            //char = (char)7;
            int hwnd = FindWindowEx(0, 0, null, "C# Fensterinhalt vom Firefox auslesen - Seite 2 - Mozilla Firefox");

            int hwndedit = FindWindowEx(hwnd, 0, "edit", null);
            //int chars = 100;
            //if (GetWindowText(hwndedit, buf, chars) != 0)
            string text = GetText((IntPtr)hwndedit);
            if (text != null)
            {
                Console.WriteLine(text);
            }
            else
            {
                
                Console.WriteLine("myfunc: " + Marshal.GetLastWin32Error());
            }
            
            Console.ReadLine();
        }
        public static bool DisplayWindowInfo(int hWnd, int lParam)
        {
            int chars = 500;
            StringBuilder buf = new StringBuilder(chars);
           
            if (GetWindowText(hWnd, buf, chars) != 0)
            {
                string searchf = "Unbenannt - Editor".ToString();
                if (String.Equals(searchf, buf.ToString()))
                {
                    StringBuilder bufc = new StringBuilder(chars);
                    Console.WriteLine("Application: " + buf);
                    Console.WriteLine("ClassName: " + GetClassName(hWnd, bufc.ToString(), chars));
                    Console.WriteLine("-----------------------------------------");

                }
                //else
                  //  Console.WriteLine("Unequal: " + searchf + " // " + buf);
            }
            return true;
        }
    }
}


Mir z.b. dem Notepad funzt das, gebe ich die Tilteleiste vom Firefox ein("C# Fensterinhalt vom Firefox auslesen - Seite 2 - Mozilla Firefox") kommt Error 87. Das soll ein ungültiger parameter sein.

Hab grad noch was verändert:
die zeile: int hwndedit = FindWindowEx(hwnd, 0, "edit", null); in int hwndedit = FindWindowEx(hwnd, 0, null, null);

da bringt der mir die ausgabe "MSCTFIME UI".
 
Zuletzt bearbeitet:
Zurück
Oben