C# und Firefox

asator665

Lieutenant
Registriert
März 2011
Beiträge
530
Hallo Zusammen,

kennt jemand zufällig eine Möglichkeit in C# herauszufinden, ob ein Download im Firefox noch läuft?

Vielen Dank und Grüße
 
Hallo asator665,

asator665 schrieb:
kennt jemand zufällig eine Möglichkeit in C# herauszufinden, ob ein Download im Firefox noch läuft?

Ja, indirekt, indem Du Dir alle Fenster auf dem Desktop enumerieren lässt und nach dem "Download"-Fenster suchst.
Bei laufendem Download ist der Fenstertitel "xx% von 1 Datei - Download", bei abgeschlossenem Download nur "Download".

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


public class EnumerateOpenedWindows
{
    const int MAXTITLE = 255;
    private static List<string> lstTitles;

    private delegate bool EnumDelegate(IntPtr hWnd, int lParam);
    
    [DllImport("user32.dll", EntryPoint = "EnumDesktopWindows", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool EnumDesktopWindows(IntPtr hDesktop, EnumDelegate lpEnumCallbackFunction, IntPtr lParam);
    
    [DllImport("user32.dll", EntryPoint = "GetWindowText", ExactSpelling = false, CharSet = CharSet.Auto, SetLastError = true)]
    private static extern int _GetWindowText(IntPtr hWnd,
    
    StringBuilder lpWindowText, int nMaxCount);
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool IsWindowVisible(IntPtr hWnd);
    
    private static bool EnumWindowsProc(IntPtr hWnd, int lParam)
    {
        string strTitle = GetWindowText(hWnd);
        if (strTitle != "" & IsWindowVisible(hWnd)) //
        {
            lstTitles.Add(strTitle);
        }
        return true;
    }
    /// <summary>
    /// Return the window title of handle
    /// </summary>
    /// <param name="hWnd"></param>
    /// <returns></returns>
    public static string GetWindowText(IntPtr hWnd)
    {
        StringBuilder strbTitle = new StringBuilder(MAXTITLE);
        int nLength = _GetWindowText(hWnd, strbTitle, strbTitle.Capacity + 1);
        strbTitle.Length = nLength;
        return strbTitle.ToString();
    }
    /// <summary>
    /// Return titles of all visible windows on desktop
    /// </summary>
    /// <returns>List of titles in type of string</returns>
    private static string[] GetDesktopWindowsTitles()
    {
        lstTitles = new List<string>();
        EnumDelegate delEnumfunc = new EnumDelegate(EnumWindowsProc);
        bool bSuccessful = EnumDesktopWindows(IntPtr.Zero, delEnumfunc, IntPtr.Zero); //for current desktop
        if (bSuccessful)
        {
            return lstTitles.ToArray();
        }
        else
        {
            // Get the last Win32 error code
            int nErrorCode = Marshal.GetLastWin32Error();
            string strErrMsg = String.Format("EnumDesktopWindows failed with code {0}.", nErrorCode);
            throw new Exception(strErrMsg);
        }
    }
    static void Main()
    {
        string[] strWindowsTitles = GetDesktopWindowsTitles();
        foreach (string strTitle in strWindowsTitles)
        {
            Console.WriteLine(strTitle);
        }
        Console.ReadLine();
    }
}
Quelle: http://hintdesk.com/how-to-enumerate-all-opened-windows/
Obiger Code gibt Dir alle Fenster-Titel aus, Du musst ihn noch derart umbauen, daß er Dir nur den Titel mit "...Download" (z.B. mit Hilfe von RegEx) liefert.


HTH

BigNum
 
Hi!

sorry, dass ich jetzt erst antworte, habs schlichtweg verpennt.

Also, folgende Vorgehensweise:
- Bau dir eine Extension für den Firefox (Javascript oder C++) die eine Schnittstelle nach außen hin anbietet (per IPC, COM, COM+, wasauchimmer). Vielleicht gibt es sowas schon.
- Bau dir deine Anwendung, die an diese Schnittstelle andocken kann und darüber kommuniziert.

Diese Lösung hat mehrere Vorteile:
1) Wenn mehrere Fenster offen sind, kannst du die sauber unterscheiden.
2) Englischer Firefox? Kein Problem!
3) Erweiterungsmöglichkeiten z.B. Download-Status abfragen.

Gruß,
Kanibal
 
Cool! Vielen Dank für eure Ideen:D
Mal sehen was ich daraus bauen kann.
Grüße
 
Zurück
Oben