Vector2D Δημοσ. 14 Ιουνίου 2015 Δημοσ. 14 Ιουνίου 2015 Καλησπέρα, προσπαθώ να αυτοματοποίησω μια διαδικασία. Έχει μια λίστα με Likes για Facebook. Κάθε φορά που πατάς ένα κουμπί, ανοίγει μια νέα καρτέλα και η κύρια καρτέλα πειρμένει να κάνεις το Like και να την κλείσεις ώστε να σου δώσει τους πόντους. (είναι τρύπιο. ακόμα και να κλείσεις την καρτέλα χωρίς λικε, σου τα δίνει) Τι γίνεται λοιπόν, έχω φάει τον κόσμο! δεν μπορώ με τίποτα να κλείσω αυτή την νέα καρτέλα που ανοίγει. Έχω δοκιμάσει: NewWindow event του GeckoWebBrowser FindWindow (C++), και να κιλλαρω ότι δεν είναι WhiteList (το νεο παράθυρο που ανοίγει δεν έχει σταθερό όνομα... οπότε ανγκαστικά θα πρέπει να κιλαρω ότι δεν είναι στην λίστα) (είναι μια λίστα που έχω αποκλείσει να κιλαρει προγραμματα οπως Google Chrome, Visual Studio etc) Το πάνω ^ δεν δουλεύει. Δουλεύει μόνο όταν του πω κίλλαρε τα πάντα! κάτι που δεν θέλω! Καμιά ιδεά; Εικόνα: To "Autoshit" είναι η κύρια εφαρμογή που ανοίγει ένα νέο παράθυρο geckobrowser "Raw footage...". To "Raw footage..." θέλω να κλείσω.
Vector2D Δημοσ. 14 Ιουνίου 2015 Μέλος Δημοσ. 14 Ιουνίου 2015 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; using System.Diagnostics; using System.Runtime.InteropServices; using Gecko; using Gecko.Events; namespace WindowsFormsApplication1 { using HWND = IntPtr; public partial class Form1 : Form { List<string> whiteList = new List<string>(); public Form1() { InitializeComponent(); Gecko.Xpcom.Initialize(@"libs\xulrunner\"); // Windows that contais these words in title, don't close them. whiteList.Add("Google Chrome"); whiteList.Add("Visual Studio"); whiteList.Add("Autoshit"); } private void button1_Click(object sender, EventArgs e) { timer1.Enabled = !timer1.Enabled; if (timer1.Enabled) { btnStart.BackColor = Color.Maroon; btnStart.Text = "Stop"; } else { btnStart.BackColor = Color.SeaGreen; btnStart.Text = "Start"; } } private void btnYoutubeViews_Click(object sender, EventArgs e) { if (timer1.Enabled) timer1.Enabled = false; geckoWebBrowser1.Navigate("http://likesplanet.com/fbpost.php"); } [DllImport("user32.dll")] public static extern int FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] public static extern int SendMessage(int hWnd, uint Msg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_CLOSE = 0xF060; private void button1_Click_1(object sender, EventArgs e) { foreach (KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows()) { IntPtr handle = window.Key; string title = window.Value; bool FoundInList = false; foreach (string s in whiteList) { if (title.Contains(s)) { FoundInList = true; break; } } // If the program isnt in whitelist, clost it. if (!FoundInList) { int iHandle = FindWindow(null, title); if (iHandle > 0) { // close the window using API SendMessage(iHandle, WM_SYSCOMMAND, SC_CLOSE, 0); } } }//foreach } private void geckoWebBrowser1_CreateWindow(object sender, GeckoCreateWindowEventArgs e) { } } public static class OpenWindowGetter { /// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary> /// <returns>A dictionary that contains the handle and title of all the open windows.</returns> public static IDictionary<HWND, string> GetOpenWindows() { HWND shellWindow = GetShellWindow(); Dictionary<HWND, string> windows = new Dictionary<HWND, string>(); EnumWindows(delegate(HWND hWnd, int lParam) { if (hWnd == shellWindow) return true; if (!IsWindowVisible(hWnd)) return true; int length = GetWindowTextLength(hWnd); if (length == 0) return true; StringBuilder builder = new StringBuilder(length); GetWindowText(hWnd, builder, length + 1); windows[hWnd] = builder.ToString(); return true; }, 0); return windows; } private delegate bool EnumWindowsProc(HWND hWnd, int lParam); [DllImport("USER32.DLL")] private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam); [DllImport("USER32.DLL")] private static extern int GetWindowText(HWND hWnd, StringBuilder lpString, int nMaxCount); [DllImport("USER32.DLL")] private static extern int GetWindowTextLength(HWND hWnd); [DllImport("USER32.DLL")] private static extern bool IsWindowVisible(HWND hWnd); [DllImport("USER32.DLL")] private static extern IntPtr GetShellWindow(); } }
albNik Δημοσ. 15 Ιουνίου 2015 Δημοσ. 15 Ιουνίου 2015 Η GeckoCreateWindowEventArgs τι properties εχει? Π.χ handle του παραθύρου.
Vector2D Δημοσ. 15 Ιουνίου 2015 Μέλος Δημοσ. 15 Ιουνίου 2015 Το ιδανικό θα ήταν να έχω πρόσβαση στο νέο Window και να το κάνω Dispose (και όχι με 2ο πρόγραμμα που κοιτάει τι Windows υπάρχουν), αλλά όταν κάνω το παρακάτω, μου πετάει nullreference error private void geckoWebBrowser1_CreateWindow(object sender, GeckoCreateWindowEventArgs e) { WebBrowser wb = (WebBrowser)sender; Thread.Sleep(5000); wb.Dispose(); } ή private void geckoWebBrowser1_CreateWindow(object sender, GeckoCreateWindowEventArgs e) { Thread.Sleep(5000); e.WebBrowser.Dispose(); } Θα μπορούσα πολύ εύκολα να σταματήσω τα New Windows, να πάρω το Uri και να το φορτώσω σε 2ο Webbrowser, αλλά δεν δουλεύει... (όπως είπα: το κύριο παράθυρο περιμένει να ανοίξεις το new window, να κάνεις κάτι και να το κλείσεις)
albNik Δημοσ. 15 Ιουνίου 2015 Δημοσ. 15 Ιουνίου 2015 Με e.Cancel=true; υποθετω δεν εμφανιζεται καν αλλα μαλλον δεν το θες αυτο. Αν με Dispose() κλεινει το παραθυρο μην χρησιμοποιεις Thread.Sleep(), βαλε timer σε 5 sec. private void geckoWebBrowser1_CreateWindow(object sender, GeckoCreateWindowEventArgs e) { var timer = new Timer() { Interval = 5000}; timer.Start(); timer.Tick += (o, e) => { e.WebBrowser.Dispose(); timer.Dispose(); }; } Επισης βαλε breakpoint στην geckoWebBrowser1_CreateWindow και δες τα properties του e.WebBrowser τι τιμες εχουν Edit Το νεο παράθυρο πρεπει να ειναι child της Form1, αν ειναι το πρωτο μπορεις να το κλεισεις ετσι this.OwnedForms[0].Close();
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα