一个C#获得桌面窗口的例子

来源:互联网 发布:java 在线客服 编辑:程序博客网 时间:2024/05/02 02:16
一个网上的例子c# 获取鼠标处窗口句柄,程序嵌入桌面using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace WindowsApplication1{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        [DllImport("user32.dll", EntryPoint = "FindWindow")]        public static extern int FindWindow(            string lpClassName,            string lpWindowName        );        [DllImport("user32.dll", EntryPoint = "GetWindow")]//获取窗体句柄,hwnd为源窗口句柄        /*wCmd指定结果窗口与源窗口的关系,它们建立在下述常数基础上:              GW_CHILD              寻找源窗口的第一个子窗口              GW_HWNDFIRST              为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口              GW_HWNDLAST              为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口              GW_HWNDNEXT              为源窗口寻找下一个兄弟窗口              GW_HWNDPREV              为源窗口寻找前一个兄弟窗口              GW_OWNER              寻找窗口的所有者         */        public static extern int GetWindow(            int hwnd,            int wCmd        );        [DllImport("user32.dll", EntryPoint = "SetParent")]//设置父窗体        public static extern int SetParent(            int hWndChild,            int hWndNewParent        );        [DllImport("user32.dll", EntryPoint = "GetCursorPos")]//获取鼠标坐标        public static extern int GetCursorPos(            ref POINTAPI lpPoint        );        [StructLayout(LayoutKind.Sequential)]//定义与API相兼容结构体,实际上是一种内存转换        public struct POINTAPI        {            public int X;            public int Y;        }        [DllImport("user32.dll", EntryPoint = "WindowFromPoint")]//指定坐标处窗体句柄        public static extern int WindowFromPoint(            int xPoint,            int yPoint        );        private void timer1_Tick(object sender, EventArgs e)        {            POINTAPI point = new POINTAPI();//必须用与之相兼容的结构体,类也可以                        GetCursorPos(ref point);//获取当前鼠标坐标            int hwnd = WindowFromPoint(point.X, point.Y);//获取指定坐标处窗口的句柄            this.label1.Text =point.X.ToString() + ":" + point.Y.ToString() + "-" + hwnd.ToString();//显示效果,此时窗口已经嵌入桌面了        }        const int GW_CHILD = 5;//定义窗体关系        private void Form1_Load(object sender, EventArgs e)        {            int hDesktop = FindWindow("Progman", null);//获取系统句柄            hDesktop = GetWindow(hDesktop, GW_CHILD);//获取其子窗口句柄,就是桌面的句柄            SetParent((int)this.Handle, hDesktop);//设置父窗体,第一个为要被设置的窗口,第二个参数为指定其父窗口句柄        }    }} 

 

 

原创粉丝点击