C# 获取句柄程序

这个小程序需要用到系统API,也就是需要用到user32中的三个函数。
第一个:WindowFromPoint 返回一个窗口句柄
第二个:GetWindowText  获取窗口标题
第三个:GetClassName  获取类名
当然,最重要的一点就是要引用命名空间:using System.Runtime.InteropServices;
先来看看做出来的效果:
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 prjCursorHandler
{
    public partial class Form1 : Form
    {
        //获取窗口标题
        [DllImport("user32", SetLastError = true)]
        public static extern int GetWindowText(
        IntPtr hWnd, //窗口句柄
        StringBuilder lpString, //标题
        int nMaxCount  //最大值
        );
        //获取类的名字
        [DllImport("user32.dll")]
        private static extern int GetClassName(
            IntPtr hWnd, //句柄
            StringBuilder lpString, //类名
            int nMaxCount //最大值
        );
        //根据坐标获取窗口句柄
        [DllImport("user32")]
        private static extern IntPtr WindowFromPoint(
        Point Point  //坐标
        );
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.timer1.Enabled = !this.timer1.Enabled;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int x = Cursor.Position.X;
            int y = Cursor.Position.Y;
            Point p = new Point(x, y);
            IntPtr formHandle = WindowFromPoint(p);//得到窗口句柄
            StringBuilder title = new StringBuilder(256);
            GetWindowText(formHandle, title, title.Capacity);//得到窗口的标题
            StringBuilder className = new StringBuilder(256);
            GetClassName(formHandle, className, className.Capacity);//得到窗口的句柄
            this.textBox1.Text = "窗口句柄:" + formHandle.ToString() + Environment.NewLine + "窗口标题:" + title + Environment.NewLine + "类名:" + className;
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode==Keys.Enter || e.KeyCode==Keys.Space)
            {
                this.button1.PerformClick();
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7安装oracle12c 一

本文 基本参考了下面这篇文章http://blog.csdn.net/gq5251/article/details/42004035 和http://www.linuxidc.com/Linux/2017-08/146528.htm 但是改正了一些错误操作系统:CentOS Linux release 7.2.1511 (Core) oracle: oarcle (12.1.0.2.0) - Standard Edition (SE2)几点要注…

阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记

本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 一、学习知识点概要 本次主要通过阿里云天池的赛题【Python入门系…

JMETER从JSON响应中提取数据

如果你在这里,可能是因为你需要使用JMeter从Json响应中提取变量。 好消息!您正在掌握掌握JMeter Json Extractor的权威指南。作为Rest API测试指南的补充,您将学习掌握Json Path Expressions 所需的一切。 我们走吧!并且不要惊慌&…

centos7安装oracle12c 二

环境:CentOS7VMware12,分配资源:CPU:2颗,内存:4GB,硬盘空间:30GB Oracle 12C企业版64位 下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/down…

阿里云天池 Python训练营Task5:Python训练营测试 学习笔记

一、学习知识点概要 本次是Python训练营的测试,在45分钟内完成25题,满分100分及格80分。题目主要考察Task1到Task3里面的Python基础知识。在我随到的25道题里,知识点有: 变量(包括数据类型和容器类型)运算…

centos7安装oracle12c 三

场景描述:我在自己电脑的虚拟机上linux环境下安装oracle11g数据库。 Linux版本为:CentOS release 6.8 (Final),Oracle版本为:linux.x64_11gR2 问题描述:在oracle安装到Prerequisite Checks这一步的时候,出现…

《属性数据分析引论》 部分课后习题R语言实践(第三章、第四章)

目录 前言 第三章 广义线性模型 习题3.18 a小题 b小题 c小题 d小题 习题3.19 a小题 b小题 c小题 第四章 Logistic回归 习题4.1 a小题 b小题 c小题 d小题 e小题 习题4.2 a小题 b小题 c小题 d小题 小结 前言 习题选自高等教育出版社译制,Alan A…

Linux下SVN搭建

在Linux系统中搭建svn服务所需要用到的软件叫做subversion,可以通过yum来进行安装,如图 安装好软件后第一件事就是创建一个仓库目录 [rootserver1 ~]# mkdir /svn 使用svn自带命令建立仓库 [rootserver1 ~]# svnadmin create /svn 进入该仓库&#xff0c…

可用于 线性判别、聚类分析 的R语言函数总结

一、判别分析 判别分析是一种分类技术,其通过一个已知类别的“训练样本”来建立判别准则,并通过预测变量来为未知类别的数据进行分类。根据判别的模型分为线性判别和非线性判别,线性判别中根据判别准则又分为Fisher判别,Bayes判别…

Android APK 打包过程 MD

Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.comAndroid APK 打包流程 MD 目录 目录APK 的打包流程整体流程资源的编译和打包资源ID资源索引概况具体打包过程aapt阶段aidl阶段Java Compiler阶段dex阶段a…

可用于 主成分分析、R型因子分析、简单相应分析 的R语言函数总结

一、主成分分析 主成分分析是多元统计分析的一种常用的降维方法,它以尽量少的信息损失,最大程度将变量个数减少,且彼此间互不相关。提取出来的新变量成为主成分,主成分是原始变量的线性组合。 1.1 KMO检验和Bartlett球形检验 在…

持续集成之Jenkins安装部署

安装JDKJenkins是Java编写的,所以需要先安装JDK,这里采用yum安装,如果对版本有需求,可以直接在Oracle官网下载JDK。 [rootlinux-node1 ~]# yum install -y java-1.8.0 安装Jekins [rootlinux-node1 ~]# cd /etc/yum.repos.d/ […

jenkins svn tomcat ant自动部署

Jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1、持续的软件版本发布/测试项目。 2、监控外部调用执行的工作。 跟其他持续集成相比,它的主要优点有: 开源,即免…

553 mail from must equal authorized user解决方法

在配置发送邮件通知,验证其正确性时,出现"553 mail from must equal authorized user"提示的错误; 原因在于没有在"系统管理(Manage Jenkins)"的"系统设置(Configure system&…

[Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...

创建临时配置文件以在设备上运行您的应用程序而无需Xcode。在开始之前,您需要一个App ID,一个分发证书和多个注册设备。 有关完整的临时配置文件工作流程,请转到Xcode帮助中的分发到已注册设备(iOS,tvOS,wa…

解决做好一个机器学习项目的3个问题

机器学习是目前人工智能最令人激动的研究方向之一。我们可能更关注机器学习算法的实现细节,沉浸于机器学习所需要的数学功底,但对于机器学习从业者来说,如何更好更快速的实现一个机器学习项目更值得关注。 正如吴恩达在《机器学习》这门课中所…

[币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 除此之外,你最好还了解一些HTML及JavaScript知识。 本文通过实例教大家来开发去中心化应用,应用效果如图: 项目背景 Pete有一个…

怎么通俗易懂地解释贝叶斯网络和它的应用?

作者:小杰链接:https://www.zhihu.com/question/28006799/answer/38996563来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。英语原文:http://www.norsys.com/tutorials/netica/secA/tut…

SVM分类算法的基本理论问题

1.引言   随着网络技术的飞速发展和普及,进入了信息大爆炸的时代。信息无处不在,给我们的学习生活带来了诸多便捷,由于堪称海量的信息量,我们从中获取有用的信息变得困难,解决这一难题就是要对这些大量的信息进行分…

决策树案例理解

小王是一家著名高尔夫俱乐部的经理。但是他被雇员数量问题搞得心情十分不好。某些天好像所有人都來玩高尔夫,以至于所有员工都忙的团团转还是应付不过来,而有些天不知道什么原因却一个人也不来,俱乐部为雇员数量浪费了不少资金。 小王的目的是…