随笔 - 148  文章 - 1  评论 - 15  阅读 - 30万

C#中利用Handle的操作

C#中利用Handle的操作

 

1.我新建了个窗体,窗体中放个Label,这个Label用来显示窗体的句柄。

2.拖个Timer控件到窗体中,设置属性Enable=true

3.代码里添加名字空间引用

  using System.Runtime.InteropServices;

 

复制代码
  //加入获得Handle的API

[DllImport("user32.dll")]

internal static extern IntPtr WindowFromPoint(Point Point);

//加入获得鼠标焦点的API

[DllImport("user32.dll")]

internal static extern bool GetCursorPos(out Point lpPoint);
复制代码

 

4.写Timer的Tick事件,获取Handle

复制代码
  private void timer1_Tick(object sender, EventArgs e)

  {

            Point p;

            if (GetCursorPos(out p))

            {

                IntPtr hwndCurWindow = WindowFromPoint(p);

                lblhandle.Text = hwndCurWindow.ToString();

            }

  }
View Code
复制代码

5.执行它,晃动你的鼠标,当你的鼠标在各个窗体间切换的时候,label一直在变,这个就是获得的句柄。

6.有了句柄又怎么样呢,我也不知道获得了句柄想干嘛。我的机器上有两个翻译软件,金山词霸和有道。有一个不能用的话也没有关系吧。我获得了有道窗体的句柄“B09FC”,我把它转成16进制的了,这样:hwndCurWindow.ToString("X");  于是我判断当句柄等于“B09FC”时,我就关掉窗体,我还要加入个关窗体的API:

复制代码
  [DllImport("user32.dll")]

   public static extern bool CloseWindow(IntPtr hWnd);

//然后我判断

  if (hwndCurWindow.ToString("X") == "B09FC")

  {

          CloseWindow(hwndCurWindow);

  }
复制代码

 

执行它,这时当我打开有道词典的时候,我的鼠标一放上去,窗体就关掉。

我把它改成了一个Windows服务,让它在后台执行,好了,我再也不能使用有道了。

 

这是winform的代码

复制代码
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 HandleShow

{

    public partial class Form1 : Form

    {

        [DllImport("user32.dll")]

        internal static extern IntPtr WindowFromPoint(Point Point);

        [DllImport("user32.dll")]

        internal static extern bool GetCursorPos(out Point lpPoint);

        [DllImport("user32.dll")]

        public static extern bool CloseWindow(IntPtr hWnd);

 

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            Point p;

            if (GetCursorPos(out p))

            {

                IntPtr hwndCurWindow = WindowFromPoint(p);

                lblhandle.Text = hwndCurWindow.ToString();

                if (hwndCurWindow.ToString("") == "332106")

                {

                    CloseWindow(hwndCurWindow);

                }

 

            }

 

        }

    }

}
View Code
复制代码

闲来无事,复习下API。网上搜来的,我只能说太强大了

posted on   冰魂雪魄  阅读(1612)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

WPF框架交流群:C#.net. WPF.core 技术交流�      C#WPF技术交流群:C#.net. WPF.core 技术交流�     WPF技术大牛交流群:C#.net. WPF.core 技术交流�
点击右上角即可分享
微信分享提示