|
分類:[C#]
開発環境はVisualstudio2019を使用しています。 C#はまだまだやり始めたばかりで、探り探り開発を行っています。
C#を使用して、Edgeで開かれているタブを指定の条件で閉じるということをしたいです。 条件として、 @Edgeで開かれているタブのURLを見て、指定した文字列を含む場合閉じる A条件に合うタブが複数ある場合は、対象となるタブ全てを閉じる ということが行いたいです。
ネットで探している中に、UIAutomationClientを使用して、開かれている最後のタブのURLを取得して、 最後のタブを閉じるというのがあり、参考にさせてもらったのですが、「最後のタブ」を参照するところを、 開かれているタブ全てにするという部分が分からない状態です。
以下が現在のソースコードになります。
using System; using UIAutomationClient;
namespace MPBRCL { class Program { static void Main(string[] args) { // EdgeのアドレスバーのURL取得
int UIA_ControlTypePropertyId = 30003; IUIAutomation uiAutomation = new CUIAutomation8(); IUIAutomationElement rootElement = uiAutomation.GetRootElement(); UIAutomationClient.IUIAutomationElement elmEdge;
string eURL = ""; {
int UIA_WindowControlTypeId = 50032;
IUIAutomationCondition condition = uiAutomation.CreatePropertyCondition( UIA_ControlTypePropertyId, UIA_WindowControlTypeId );
UIAutomationClient.IUIAutomationElementArray aryWindowControls; aryWindowControls = rootElement.FindAll(TreeScope.TreeScope_Subtree, condition); elmEdge = null; for (int i = 0; i < aryWindowControls.Length; i++) { string name = aryWindowControls.GetElement(i).CurrentName; string classname = aryWindowControls.GetElement(i).CurrentClassName; name = name.ToLower();
if (0 <= name.IndexOf("microsoft​ edge")) { Console.WriteLine("name : " + name);
elmEdge = aryWindowControls.GetElement(i); Console.WriteLine("elmEdge : " + elmEdge); int UIA_EditControlTypeId = 50004; IUIAutomationCondition condition2 = uiAutomation.CreatePropertyCondition( UIA_ControlTypePropertyId, UIA_EditControlTypeId ); UIAutomationClient.IUIAutomationElementArray aryWindowControls2; aryWindowControls2 = elmEdge.FindAll(TreeScope.TreeScope_Subtree, condition2); for (int i2 = 0; i2 < aryWindowControls2.Length; i2++) { name = aryWindowControls2.GetElement(i2).CurrentName; if (name == "アドレスと検索バー") { int UIA_ValueValuePropertyId = 30045; eURL = (string)aryWindowControls2.GetElement(i2).GetCurrentPropertyValue(UIA_ValueValuePropertyId); break; } } break; } } }
// Edgeの最後のタブを閉じる int last_iptn = -1; if (elmEdge != null) { int UIA_ButtonControlTypeId = 50000; IUIAutomationCondition condition3 = uiAutomation.CreatePropertyCondition( UIA_ControlTypePropertyId, UIA_ButtonControlTypeId );
UIAutomationClient.IUIAutomationElementArray aryWindowControls3; aryWindowControls3 = elmEdge.FindAll(TreeScope.TreeScope_Subtree, condition3);
for (int i3 = 0; i3 < aryWindowControls3.Length; i3++) { string name = aryWindowControls3.GetElement(i3).CurrentName; Console.WriteLine("name : " + name); if (name == "タブを閉じる") { last_iptn = i3; } }
if (last_iptn != -1) { IUIAutomationInvokePattern iptn; int UIA_InvokePatternId = 10000; iptn = (IUIAutomationInvokePattern)aryWindowControls3.GetElement(last_iptn).GetCurrentPattern(UIA_InvokePatternId); iptn.Invoke(); } } } } }
以上です。 ご教授いただけたらと思います。
|