Просмотр полной версии : Получить id процесса COM объекта (C#)
nc.STRIEM
28.04.2010, 16:33
Пишу на c#, через COM запускаю IE
IE = new SHDocVw.InternetExplorer();
Проблема в том что завершение работы браузера через IE.Quit() не всегда происходит коректно, иногда окно всеравно не закрывается, например в случае когда выскакивает какое либо диалоговое окно на сайте. Вопрос в следуюшем как получить id процесса который создается при запуске IE? используя его хочу убивать IE
Sunstrider
28.04.2010, 16:38
http://msdn.microsoft.com/en-us/library/ms633522.aspx если я понял что ты спрашиваеш
IE = new SHDocVw.InternetExplorer();
у этого объекта должен быть handle.
дальше Process.GetProcessByName("iexplore").First(a => a.Id == IE.Handle).Kill()
Sunstrider
28.04.2010, 17:28
IE = new SHDocVw.InternetExplorer();
у этого объекта должен быть handle.
дальше Process.GetProcessByName("iexplore").First(a => a.Id == IE.Handle).Kill()
я спрашивал,не подходит т.к. будет много окон многопоточно
nc.STRIEM
28.04.2010, 18:20
IE.HWND и a.Id это разные вещи, а подвисший IE через Kill() не убивается, его нужно только с принудительным завершением
да посмотрел. Как вариант искать по заголовку.
a.MainForm.Title (что-то в таком духе)
Sunstrider
28.04.2010, 18:48
да посмотрел. Как вариант искать по заголовку.
a.MainForm.Title (что-то в таком духе)
ты не понял он хочет искать id процесса exploer и гасить его,заголовки не помогут тут ченить другое надо
ты не понял он хочет искать id процесса exploer и гасить его,заголовки не помогут тут ченить другое надо
бл**ь иногда лучше промолчать
Может для реализации не подойдёт, но может проще делать через компонент WebBrowser (http://msdn.microsoft.com/ru-ru/library/system.windows.controls.webbrowser.aspx)?
nc.STRIEM
29.04.2010, 13:08
проблема не в том как завершить процесс, а в том как получить его id
nc.STRIEM
29.04.2010, 17:21
System.Diagnostics.Process.GetProcessesByName("iexplore")[0].Id;
Это в случае если он 1, в моем случае их много
BrainDeaD
29.04.2010, 17:59
ну ты же его всёравно убиваешь. тогда в цикле при следующем GetProcessesByName ты получаешь id очередного процесса и т.д.
Edit:в дополнение к W!z@rD[DllImport("user32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int GetWindowThreadProcessId(HandleRef handle, out int processId);
nc.STRIEM
29.04.2010, 18:24
работает много IE мне нужно убить только некоторые из них. Для этого нужно знать конкретные id, чтоб не все подряд рубить, а только то что надо
а не проще сделать тот же самое через бат? Оо чтоб гнал ие
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot