PDA

Просмотр полной версии : Получить 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 если я понял что ты спрашиваеш

W!z@rD
28.04.2010, 17:26
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() не убивается, его нужно только с принудительным завершением

W!z@rD
28.04.2010, 18:44
да посмотрел. Как вариант искать по заголовку.
a.MainForm.Title (что-то в таком духе)

Sunstrider
28.04.2010, 18:48
да посмотрел. Как вариант искать по заголовку.
a.MainForm.Title (что-то в таком духе)
ты не понял он хочет искать id процесса exploer и гасить его,заголовки не помогут тут ченить другое надо

W!z@rD
28.04.2010, 18:55
ты не понял он хочет искать id процесса exploer и гасить его,заголовки не помогут тут ченить другое надо
бл**ь иногда лучше промолчать

scrat
28.04.2010, 19:02
Может для реализации не подойдёт, но может проще делать через компонент 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, чтоб не все подряд рубить, а только то что надо

RexTiam
09.05.2010, 01:52
а не проще сделать тот же самое через бат? Оо чтоб гнал ие