to 第一:如何获取鼠标的位置,通过位置得知当前的窗口 第二:如何获取当前窗口的句柄如果鼠标所在的窗体是有焦点的,比较简单,用GetActiveWindow即可。否则很难判断。
[DllImport("user32", EntryPoint="GetCursorPos")] public static extern int GetCursorPos ( ref POINTAPI lpPoint ); [StructLayout(LayoutKind.Sequential)] public struct POINTAPI { public int x ; public int y ; }[DllImport("user32", EntryPoint="WindowFromPoint")] public static extern int WindowFromPoint ( int xPoint, int yPoint );
Sample code as follows:[DllImport("user32.dll")] static extern IntPtr WindowFromPoint(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 ); } }//Get window Point ptCursor = Cursor.Position; POINT ptCurrent = new POINT( ptCursor.X, ptCursor.Y ); IntPtr hWindows = WindowFromPoint( ptCurrent );
第二:如何获取当前窗口的句柄如果鼠标所在的窗体是有焦点的,比较简单,用GetActiveWindow即可。否则很难判断。
public static extern int GetCursorPos (
ref POINTAPI lpPoint
);
[StructLayout(LayoutKind.Sequential)]
public struct POINTAPI {
public int x ;
public int y ;
}[DllImport("user32", EntryPoint="WindowFromPoint")]
public static extern int WindowFromPoint (
int xPoint,
int yPoint
);
static extern IntPtr WindowFromPoint(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 );
}
}//Get window
Point ptCursor = Cursor.Position;
POINT ptCurrent = new POINT( ptCursor.X, ptCursor.Y );
IntPtr hWindows = WindowFromPoint( ptCurrent );