WinAPI、VB6.0、C#

网上找了个WinAPI的例子不过是VB6.0版的,赶快上亦彩载了个mini,哇!好久没看到这个界面了!

记得高一的时候,一个个子趋于无穷大(至少他很高)、头发有些发白的老头在卖力地为我们讲VB6.0,当时的我们简直个个瞪着眼、坐在教室里不知道在讲什么。有一个算是比较high的懂得要实现Timer控件的事件应该在哪里写代码,当时上机的时候旁边的人都把他奉为神,个个都嘲他喊:晓杰晓杰快过来!SOS哦。呵呵,记得当时下课后教室里的人都走光了,我还围着高老头问啊问,想问出什么东西来。当时的我挺甚解的吧?至少现在上完课后我再也不会围着老师问问题了,因为这个专业确实very null!说这些是为了怀念一下我的那个高老头,学校里唯一骑自行车的老师…好了,废话少来,直切主题:

vb6.0

相信很多看了这张图片后都会觉得很熟悉,几年前就是用这个工具来作试验的,不过现在还用VB6.0的应该少了吧,或者用更高的版本了。

这是一个使用WinAPI的小应用程序,可以获取任何窗体(object)的名称、句柄、类名等,通过使用GetWindowText、GetClassName、GetCursorPos 来获取窗体的名称、类名或者显示隐藏鼠标。下面举个例子来说明:

in VB6.0:

'声明POINTAPI类型,字段X、Y为当前鼠标坐标

Public Type POINTAPI
As Long
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, -100003);
}

 上面给的是几个WinAPI的简单例子,事实上当我从网上找到《Windows API大全》就像是得到武林密籍一样,有一种想翻遍Gates老底---Windows的冲动!在C#里实现一些很实用的功能原来这么简单,像开关CD驱动器、排列窗体等等。

使用WinAPI我又写了一个小程序,是用来排列任意窗口的。有些时候我们的窗口开多了,想要使一个窗口固定在最上方,另一个窗口在它下面作观察对比,而我们的屏幕太小了(我的只有15"^_^)或是一些笔记本,这时这个小程序显得很有用。这里有一篇说明


posted @ 2006-12-31 14:38  Doho  阅读(1071)  评论(0编辑  收藏  举报