Страницы: 1
Всем доброго времени суток.Значит такая проблемка, нуна закрыть Firefox из кода.если в нем открыто много вкладок, тогда вылетает запрос мол уверены ли вы что закрываете все.Это происходит когда вызывается для его процесса closemainwindow().если вызвать Kill то все ок,firefox тихонечко закроется без лишних вопросов,токо Kill низя вызывать. Так вот хотелось бы узнать как закрыть firefox closemainwindow() да при том чтобы он ничего и не спрашивал!?очень надо!
Замечание п. 4.6
Дубликат темы удален.
Sergeys
Отсутствует
Подозреваю что нормально закрыть (не принудительное убийство процесса) никак, если у ФФ не отключена опция подтверждения выхода при закрытии вкладок.
Дело не в .net-e.
Отсутствует
или как вариант - программно нажать нужную кнопку в этом запросе.
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
программно нажать кнопку, ну это понятно, вопрос в том,как?! ниже представлен код, который я написал, он ищет firefox после чего ищет все его дочерние окошки, и посылает им сигнал закрыться, токо он все равно выдает messagebox(((((
namespace firefoxCloser { public partial class Form1 : Form { private Process[] processes; static private string txt=""; private static List<IntPtr> handles = new List<IntPtr>(); private static List<string> captions = new List<string>(); private IntPtr mainHwnd; public Form1() { InitializeComponent(); this.ShowProcesses(); } private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); private delegate bool EnumWindowsChildProc(IntPtr hWnd, IntPtr lParam); [DllImport("User32.dll")] private static extern bool EnumChildWindows(IntPtr hWnd,EnumWindowsChildProc enumFunc,IntPtr lParam); [DllImport("User32.dll")] private static extern bool EnumWindows(EnumWindowsProc enumFunc, IntPtr lParam); [DllImport("User32.dll")] private static extern bool GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport("User32.dll")] private static extern bool PostMessage(IntPtr hWnd, uint msg, uint wParam, uint lParam); private static bool EnumFunc(IntPtr hWnd, IntPtr lParam) { const uint WM_CLOSE = 0x0010; StringBuilder wndCaption = new StringBuilder(1024); GetWindowText(hWnd, wndCaption, 1024); if (wndCaption.ToString() == txt) { EnumChildWindows(hWnd,new EnumWindowsChildProc(CloseChildren), IntPtr.Zero ); return false; } else { return true; } } private static bool CloseChildren(IntPtr hWnd, IntPtr lParam) { const uint WM_CLOSE = 0x0010; StringBuilder wndCaption = new StringBuilder(1024); GetWindowText(hWnd, wndCaption, 1024); if(wndCaption.ToString()!="") captions.Add(wndCaption.ToString()); handles.Add(hWnd); //PostMessage(hWnd, WM_CLOSE, 0, 0); return true; } private void ShowProcesses() { handles.Clear(); processes = Process.GetProcessesByName("firefox"); foreach(Process proc in processes) { this.mainHwnd = proc.MainWindowHandle; txt = proc.MainWindowTitle.ToString(); this.richTextBox1.Text += proc.ProcessName+txt+"\n"; } } private void button1_Click(object sender, EventArgs e) { foreach (Process proc in processes) { try { EnumWindows(new EnumWindowsProc(EnumFunc), IntPtr.Zero); foreach (IntPtr ptr in handles) this.richTextBox2.Text += ptr.ToString() + "\n"; foreach (string str in captions) this.richTextBox3.Text += str+ "\n"; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } private void GetProcessesById() { Process proc; foreach(IntPtr ptr in handles) { try { proc = Process.GetProcessById(ptr.ToInt32()); this.richTextBox3.Text += "***" + ptr.ToString() + "***" + "\n"; this.richTextBox3.Text += proc.MainWindowTitle.ToString() + "\n"; } catch(Exception ex) { MessageBox.Show(ex.Message); } } } } }
чего делать то (((((
Отсутствует
Видимо для корректного завершения работы FF. Например: Сидите вы на работе, в FF, заходит начальство - нажали "горячую" комбинацию клавиш и FF пропал
В свое время делал такое для IE, но тогда FF еще не было
"Software is like SEX - it's better when it's FREE" (C) Linus Torvalds
Отсутствует
Страницы: 1