Shell32.ShellClass sc = new Shell32.ShellClass();
sc.FileRun();
2,不用添加任何引用直接用反射 C#
//通过 ProgID 取得 com 对象类型
Type tShell =Type.GetTypeFromProgID("Shell.Application");
//实列对象
object oShell = Activator.CreateInstance(tShell);
//反射调用
tShell.InvokeMember("FileRun"
, BindingFlags.InvokeMethod | BindingFlags.Default
, null
, oShell
, null //如果有参数在这里 new object[]{参数一,参数二,参数三,....}
);
//释放对象
System.Runtime.InteropServices.Marshal.ReleaseComObject(oShell);
上面二個方式都可以實作,
不過比較起來的話,第一種的方法比較容易撰寫,
瞬間跟CCN大師請教一下就有了結果,
不過是神之手,不過還是記錄一下,避免忘記
以下是利用shell32控制網路連線自動連線方法,
不過只適用32位元以及繁體中文os,自已用的小工具就不考慮太多了XD,
用個timer就可以一直監控了!!
PS:記得加入參考 COM->Microsoft Shell Controls And Automation(SHELL32.dll)
/// <summary> /// 保持連線 /// </summary> /// <param name="connectionName">連線的裝置名稱</param> void KeepConnection(string connectionName) { Shell32.ShellClass shell = new ShellClass(); //列出namespace代碼 //for (int i = 0; i < 100; i++) //{ // if (shell.NameSpace(i) != null) // this.listBox1.Items.Add("[" + i.ToString() + "]" + shell.NameSpace(i).Title); //} Folder applicationObj = shell.NameSpace(3); //取得控制台清單 foreach (FolderItem fItem in applicationObj.Items()) { //this.listBox1.Items.Add(fItem.Name); if (fItem.Name == "網路連線") { if (fItem.IsFolder) { //這裡的轉換要注意一下 Folder network = (Folder)fItem.GetFolder; //取得網路連線清單 foreach (FolderItem fItem2 in network.Items()) { //this.listBox1.Items.Add(fItem2.Name); if (fItem2.Name == connectionName) { //列出該項目右鍵選單 foreach (FolderItemVerb fivb in fItem2.Verbs()) { //this.listBox1.Items.Add(fivb.Name); if (fivb.Name.IndexOf("連線") > -1 && fivb.Name.IndexOf("預設") == -1 && fivb.Name.IndexOf("中斷") == -1) fivb.DoIt(); } } } } } } }
以下是G大神提供的資料~
Reference:
C#调用dll文件中的函数的问题
minimizes all windows..
[VB.NET/ C#.Net / VC++.Net] 如何由程式開啟 IE 並進行會員登入
[C#][VB.NET]顯示桌面
C#怎么实现启用和禁用本地网卡?
沒有留言:
張貼留言
留個話吧:)