C#中的常用例程

0. 從C#中調用COM組件 (後期連接)
.NET框架是COM的一個自然發展,兩者共享許多核心要素,這包括組件的再利用以及語言的種 立性。
爲了向後兼容,COM Interop可以使用現存的COM組件而不要求對原始組件進行修改。當一個

框架開發人員想將COM代碼合併到一個管理應用程序中時,就可以用COM Interop功能引入相相關的CO
類型。引入之後,這個COM類型就可以使用了。這屬於前期連接。但是有時候你需要對象的漢 期連接,
這在.NET中也能實現,使用名稱空間映射就可以通過後期連接來調用COM對象。
  
這裏介紹一個應用程序例程,它將調用Excel,並且通過使用後期連接使它可視。
後期連接將使用Reflectionb的Type類,這個Type類有許多方法可以取得COM對象,
GetTypeFromProgID("Application"),這個方法從系統註冊表中得到COM ID,
然後使用STATIC類的成員 Activator.CreateInstance()創建這個COM對象的一個新例示。
  
要想調用COM對象的方法、函數和屬性,就必須使用包含正確設置的Type對象的InvokeMethood()方法。
這個方法接受一些參數變量,其中最重要的一個是方法類型的ex屬性(get或set)。在例子子中我們?
Excel.Visible使用了set屬性,從而使Excel應用程序可視。
我們將嘗試在.NET環境中調用Excel應用程序。這是一個後期連接應用程序,因爲如果是前破 連接的話
就需要使用COM對象的RCW(RunTime Callable Wraper)來完成下面的命令行程序tblimp所屯 成的任務:
ex. c:/> tblimp /out:
  
//Variable
Type Excel;
object[] parameter= new object[1];
object ExcelObject;
try
{
Excel = Type.GetTypeFromProgID("Excel.Application");
ExcelObject = Activator.CreateInstance(Excel);
parameter[0] = true;
Excel.InvokeMember("Visible", BindingFlags.SetProperty, null, ExcelObject, parammeter);
}
catch(Exception e)
{
Console.WriteLine("Error Stack {0} ", e.Message) ;
}
finally
{
//When this object is destroyed the Excel application will be closed
//So Sleep for sometime and see the Excel application
Thread.Sleep(5000);
//Relaese the object
//GC.RunFinalizers()
}
  
  
1.如何讀取Windows註冊表信息?
public static int Main(string[] args)
{
RegistryKey SUBKEY;
RegistryKey TAWKAY = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive..CurrentUser,"");
string subkey = "Software//TAW//BSE";
SUBKEY = TAWKAY.OpenSubKey(subkey);
object dsn = SUBKEY.GetValue("DSN");
object user = SUBKEY.GetValue("user");
object password = SUBKEY.GetValue("password");
object server = SUBKEY.GetValue("server");
return 0;
}
  
2.如何調用Windows API?
在C#中調用一個APIAPI的DLL名稱,並且使用sysimport引入它。
下面這個例子顯示瞭如何調用MessageBox API:
using System;
class callAPICls {
[sysimport(dll="user32.dll")]
public static extern int MessageBoxA(int h, string m, string c, int type);
public static int Main()
{
return MessageBoxA(0, "Hello World!", "Caption", 0);
}
}
  
3.如何獲取機器上正在運行的進程
使用System.Diagnostics.Process類可以啓動和停止系統進程
GetProcesses函數返回了機器上正在運行的所有進程
public static Process[] GetProcesses();
public static Process[] GetProcesses(string);
eg.
using System.Diagnostics;
.....
Process[] procList = new Process[100];
procList = Process.GetProcesses();
for ( int i=0; i<20; i++)
{
string strProcName = procList[i].ProcessName;
int iProcID = procList[i].Id;;
}
  
通過使用Process類的方法,甚至可以啓動、停止或取消進程:
在應用程序中打開瀏覽器
System.Diagnostics.Process.Start("http://www.c-sharpcorner.com");
打開Wav文件
可以用PlaySound API來播放一個wav文件。
[sysimport(dll="winmm.dll")]
public static extern long PlaySound(String lpszName, long hModule, long dwFlags));
......
PlaySound( szWavFileName , 0 , 0);
  
  
4.如何在C#中發送郵件?
涉及到的名稱空間有System.Web.Util,集合有System.Web.dll。
可用SmtpMail類在C#應用程序中發送郵件。默認狀態下,
郵件在系統中是排隊的,SmtpMail類在System.Web.Util名稱空間中定義。
可以通過兩種途徑來調用Send方法:
public static void Send(MailMessage);
SmtpMail.Send("[email protected]", "[email protected]", "Subject",
"Message body");
  
5.使用系統剪貼板
涉及的集合是System.Winforms.dll,名稱空間是System.Winforms。
在C#中,ClipBoard類提供了將數據放在系統剪貼板以及從系統剪貼板恢復數據的方法。
在.NET中,使用DataFormat類,它執行IdataObject,爲數據傳輸提供了一種格式獨立的結構埂?
Clipboard類只有3個成員,它們是構造器、GetDataObject和SetDataObject。
SetDataObject方法有兩個定義:
public static void SetDataObject(Object);
public static void SetDataObject(Object data, bool copy);
copy這個參數指明應用程序退出後,數據是否應該保留在剪貼板上。
GetDataObject方法
public static IDataObject GetDataObject();
  
6.獲取主機的IP地址
// Call DNS.GetHostName to get IPHostEntry and get the IP address list.
IPHostEntry ipEntry = DNS.GetHostByName ("www.mindcracker.com");
IPAddress [] IpAddr = ipEntry.AddressList;
for (int i = 0; i < IpAddr.Length; i++)
{
Console.WriteLine ("IP Address {0}: {1} ", i, IpAddr[i].ToString ());
}

另外,使用無參數的GetHostName可以返回本地機器的主機名:
string strHostName = DNS.GetHostName ();
然後將這個主機名作爲參數傳遞給GetHostByName,就可以獲取本地機器的IP地址信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章