對於這些經常泡網、載東東、寫程式的人來說,通常要開N多個視窗,有些時候為了比較兩個視窗、觀察效果經常要在兩個視窗上來回切換,很是不便,特別是螢幕小的更是麻煩!下面這個程式是專門用來設定任意表單處於最頂端的,通過拖動十字游標到所要的視窗,就可以得到該視窗的控制代碼並自動設為最頂層,也可以通過右鍵來刪除不要的視窗:
下面就來分析代碼:
要設定視窗在Windows Z軸的位置可以調用WinAPI:SetWindowPos:
in VB6.0
DWORD_PRT SetWindowPos(HWND hWnd,HWND hInsertAfter,int x,int y,int cx,int cy,UINT nFlag)
in C#:
[DllImport("user32.dll",EntryPoint = "SetWindowPos",CharSet = CharSet.Auto)]
public static extern long SetWindowPos(IntPtr hwnd, int hInsertAfter, int x, int y, int cx, int cy, int nFlag);
[DllImport("user32.dll", EntryPoint = "SetWindowPos", CharSet = CharSet.Auto)]
public static extern long SetWindowPos(IntPtr hwnd, IntPtr hInsertAfter, int x, int y, int cx, int cy, int nFlag);
下面表格是對參數的說明:
參數 |
說明 |
in VB6.0 |
in C# |
|
HWND hWnd |
IntPtr hwnd |
要移動的視窗的控制代碼 |
HWND hInsertAfter |
HWND_BOTTOM(1) |
IntPtr hwnd int |
把視窗放在Z軸的最後,即所有視窗的後面 |
HWND_TOP(0) |
IntPtr hwnd int |
將視窗放在Z軸的頂部,即所有視窗的前面 |
HWND_TOPMOST(-1) |
IntPtr hwnd int |
使視窗成為“TopMost”類型的視窗,這種類型的視窗總是在其它視窗的前面,直到它被關閉 |
HWND_NOTOPMOST(-2) |
IntPtr hwnd int |
將視窗放在所有“TopMost”類型 視窗的後面、其它類型視窗的前面 |
int x |
int x |
以客戶座標指定視窗新位置的左邊界 |
int y |
int y |
以客戶座標指定視窗新位置的頂邊界 |
int cx |
int cx |
以像素指定視窗的新的寬度 |
int cy |
int cy |
以像素指定視窗的新的高度 |
UINT nFlag |
SWP_ASNCWINDOWPOS |
int |
如果調用進程不擁有視窗,系統會向擁有視窗的線程發出需求。這就防止調用線程在其他線程處理需求的時候發生死結 |
SWP_DEFERERASE |
int |
防止產生WM_SYNCPAINT訊息 |
… |
|
好多啊,有興趣的可以查一查《Windows API大全》或者:MSDN |
要獲得第一個參數(控制代碼,C#裡為IntPtr類型)可以使用WindowFromPoint(POINT Point)方法,該方法在C#的定義為:
[DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(POINT Point);
這裡有一個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);
}
這樣,我們就可以擷取任意座標、任意object的控制代碼了,有了該控制代碼剩下的就是查一下Windows API看看使用該控制代碼能完成哪些任務了。
最近在想有沒有這樣的一個程式在你關機前能夠有選擇地儲存一些應用程式的狀態,等到下次開機的時候又把這些程式還原到上次的狀態,就像Firefox裡的標籤儲存功能。或許使用Windows
API也可以完成這些任務,有時間的話再找找看。
最後,把壓縮包連結上來,對該程式有意見的不要忘記ps我哦~~