網上找了個WinAPI的例子不過是VB6.0版的,趕快上亦彩載了個mini,哇!好久沒看到這個介面了!
記得高一的時候,一個個子趨於無窮大(至少他很高)、頭髮有些發白的老頭在賣力地為我們講VB6.0,當時的我們簡直個個瞪著眼、坐在教室裡不知道在講什麼。有一個算是比較high的懂得要實現Timer控制項的事件應該在哪裡寫代碼,當時上機的時候旁邊的人都把他奉為神,個個都嘲他喊:曉傑曉傑快過來!SOS哦。呵呵,記得當時下課後教室裡的人都走光了,我還圍著高老頭問啊問,想問出什麼東西來。當時的我挺甚解的吧?至少現在上完課後我再也不會圍著老師問問題了,因為這個專業確實very null!說這些是為了懷念一下我的那個高老頭,學校裡唯一騎單車的老師…好了,廢話少來,直切主題:
相信很多看了這張圖片後都會覺得很熟悉,幾年前就是用這個工具來作實驗的,不過現在還用VB6.0的應該少了吧,或者用更高的版本了。
這是一個使用WinAPI的小應用程式,可以擷取任何表單(object)的名稱、控制代碼、類名等,通過使用GetWindowText、GetClassName、GetCursorPos 來擷取表單的名稱、類名或者顯示隱藏滑鼠。下面舉個例子來說明:
in VB6.0:
'聲明POINTAPI類型,欄位X、Y為當前滑鼠座標
Public Type POINTAPI
X As Long
Y As Long
End Type
'聲明GetCursorPos API,該API位於user32.dll內
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
GetCursorPos tPA
' 從表單座標擷取表單控制代碼
lhWnd = WindowFromPoint(tPA.X, tPA.Y)
' 擷取表單標題,存在sTitle
GetWindowText(lhWnd, sTitle, 255)
in C#:
//聲明POINT結構體
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
public static implicit operator System.Drawing.Point(POINT p)
{
return new System.Drawing.Point(p.X, p.Y);
}
public static implicit operator POINT(System.Drawing.Point p)
{
return new POINT(p.X, p.Y);
}
//定製屬性:擷取當前座標表單的控制代碼
[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(POINT Point);
//擷取游標位置
System.Drawing.Point ptCursor = Cursor.Position;
//把座標資訊賦給POINT結構體
POINT ptCurrent = new POINT(ptCursor.X, ptCursor.Y);
//通過座標資訊獲得當前對象的控制代碼
hWindows = WindowFromPoint(ptCurrent);
//有了該控制代碼就可以做很多工作了:判斷該對象是不是一個表單
isWindows = IsWindowVisible(hWindows);
//設定該表單處於最前端
if (isWindows == true)
{
WinAPIUtilty.SetWindowPos(this.Handle, -1, 0, 0, 0, 0, 3);
}
上面給的是幾個WinAPI的簡單例子,事實上當我從網上找到《Windows
API大全》就像是得到武林密籍一樣,有一種想翻遍Gates老底---Windows的衝動!在C#裡實現一些很實用的功能原來這麼簡單,像開關CD磁碟機、排列表單等等。
使用WinAPI我又寫了一個小程式,是用來排列任意視窗的。有些時候我們的視窗開多了,想要使一個視窗固定在最上方,另一個視窗在它下面作觀察對比,而我們的螢幕太小了(我的只有15"^_^)或是一些筆記本,這時這個小程式顯得很有用。這裡有一篇說明