Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#窗口句柄

C#窗口句柄

作者头像
全栈程序员站长
发布于 2022-09-14 03:14:54
发布于 2022-09-14 03:14:54
60600
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,系统会通知你:你正在操作142号窗口,就此你的应用程序就能要求系统对142号窗口进行操作——移动窗口、改变窗口大小、把窗口极小化为图标等。实际上许多 Windows API函数把句柄作为它的第一个参数,如GDI(图形设备接口)句柄、菜单句柄、实例句柄、位图句柄等,不仅仅局限于窗口函数。换句话说,句柄是一种内部代码,通过它能引用受系统控制的特殊元素,如窗口、位图、图标、内存块、光标、字体、菜单等。

  1. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  2. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3.   Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  4.   Private Const WS_EX_LAYERED = &H80000
  5.   Private Const GWL_EXSTYLE = (-20)
  6.   Private Const LWA_ALPHA = &H2
  7.   Private Sub Form_Activate()
  8.   On Error Resume Next
  9.   For i = 0 To 150 Step 2.5
  10.   SetLayeredWindowAttributes Me.hwnd, 0, i, LWA_ALPHA
  11.   DoEvents
  12.   Next i
  13.   End Sub
  14.   Private Sub Form_load()
  15.   Dim rtn As Long
  16.   rtn = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
  17.   rtn = rtn Or WS_EX_LAYERED
  18.   SetWindowLong Me.hwnd, GWL_EXSTYLE, rtn
  19.   SetLayeredWindowAttributes Me.hwnd, 0, 0, LWA_ALPHA
  20.   End Sub
代码语言:javascript
代码运行次数:0
运行
复制
  1. //获取窗口标题
  2. [DllImport("user32", SetLastError = true)]
  3. public static extern int GetWindowText(
  4. IntPtr hWnd,//窗口句柄
  5. StringBuilder lpString,//标题
  6. int nMaxCount //最大值
  7. );
  8. //获取类的名字
  9. [DllImport("user32.dll")]
  10. private static extern int GetClassName(
  11. IntPtr hWnd,//句柄
  12. StringBuilder lpString, //类名
  13. int nMaxCount //最大值
  14. );
  15. //根据坐标获取窗口句柄
  16. [DllImport("user32")]
  17. private static extern IntPtr WindowFromPoint(
  18. Point Point //坐标
  19. );
  20. private void timer1_Tick(object sender, EventArgs e)
  21. {
  22. int x = Cursor.Position.X;
  23. int y = Cursor.Position.Y;
  24. Point p = new Point(x, y);
  25. IntPtr formHandle = WindowFromPoint(p);//得到窗口句柄
  26. StringBuilder title = new StringBuilder(256);
  27. GetWindowText(formHandle, title, title.Capacity);//得到窗口的标题
  28. StringBuilder className = new StringBuilder(256);
  29. GetClassName(formHandle, className, className.Capacity);//得到窗口的句柄
  30. this.textBox1.Text = title.ToString();
  31. this.textBox2.Text = formHandle.ToString();
  32. this.textBox3.Text = className.ToString();
  33. }

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158985.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VB实现半透明或者部分透明窗体
        Windows2000已经出了n年多了,就先介绍一下Windows2000特有的API吧!! AnimateWindow是一个窗口打开和关闭时产生动画效果的新函数,因为是一个新的函数, 所以在 API Viewer中是找不到的,必需自己定义:    Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha
用户1075292
2018/01/23
1.6K0
VB实现半透明或者部分透明窗体
WPF 在 Alt+Tab 隐藏窗口
最近在开发一个 Toast 窗口,因为这个窗口不能在显示之后关闭,因为可能用户会不停让窗口显示,所以只能 Hide 。但是这样会在 切换窗口看到这个窗口,所以我找到了一个方法来让 WPF 窗口不在切换窗口显示。
林德熙
2018/09/18
3.2K1
.NET/C# 使窗口永不激活(No Activate 永不获得焦点)
发布于 2018-07-24 06:19 更新于 2018-08-31 23:58
walterlv
2018/09/18
2.8K0
.NET/C# 使窗口永不激活(No Activate 永不获得焦点)
Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态
在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。
walterlv
2023/10/22
2K0
Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态
WPF 使用快捷键方式制作简易的 Word 上的 Latex 输入法
本文将告诉大家如何在 WPF 里面编写一个简易输入法软件,让这个输入法软件支持插入 Latex 格式的公式到 Word 内。核心原理是使用 Word 的快捷键插入公式编辑器,再通过剪贴板输入 Latex 格式的公式内容,再输入回车作为 Word 公式
林德熙
2024/10/25
1170
WPF 使用快捷键方式制作简易的 Word 上的 Latex 输入法
VBA 窗体增加最小化按钮
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long '获取窗口样式
办公魔盒
2019/07/22
1.7K0
VB实现屏蔽文本框右键菜单的复制、粘贴等功能的方法
'==========================================================
大师级码师
2022/11/06
1.1K0
借助API实现黑盒自动化测试工具的编写
  在日常编码过程中,我们常常会进行自动化测试。这里的自动化测试不是指单元测试,而是模拟人工输入来进行快速的、高并发的测试。可以使用的自动化工具有LOADRUNNER,以及目前在VS2010中的功能很强大的测试工作平台(录制操作步骤,自动生成代码)。但是,这些工具的熟练掌握也有一定的时间成本,并且,最主要的,对于一个程序员来说,那不够灵活。所以,比较高效的一个做法是,调用WINDOWS API,自己动手写编码来实现。
顾翔
2021/07/22
6480
VB的TextBox文本框实现垂直居中显示的方法
Form_Load()窗体代码中的多行属性设置必须为真,即Text1.MultiLine = True,该属性为只读属性,请在设计时修改,换行会被之后的代码屏蔽,不想屏蔽可自行修改,调用此函数就好了。
大师级码师
2022/11/06
3K0
WPF 隐藏系统窗口菜单
本文告诉大家如何隐藏系统窗口菜单 系统的窗口菜单请看下图 通过在消息里面钩调一些消息的方式,此方法由 黄滨滨 大佬提供 private IntPtr Hook(IntPtr hwnd,
林德熙
2019/06/15
1.7K0
vb.net_一个半成品
Imports System.Text Imports System.Runtime.InteropServices Public Class Form1 '引用win32api进行枚举窗体句柄操作 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr Pri
landv
2018/05/24
8430
通过子类化窗口(SubClass)来为现有的某个窗口添加新的窗口处理程序(或者叫钩子,Hook)
创建窗口的时候,可以传一个消息处理函数。然而如果窗口不是自己创建的,还能增加消息处理函数吗?答案是可以的,除了 SetWindowsHookEx 来添加钩子之外,更推荐用子类化的方式来添加。
walterlv
2023/10/22
4460
如何利用 Win32 API 设置两个窗口的所有者(Owner)关系
设置两个窗口的父子关系非常简单,只需要调用 SetParent 函数即可。然而设置两个窗口的所有者(Owner)关系却没有一个简单直观的 API。那么本文介绍一下如何设置两个窗口的 Owner 关系。
walterlv
2023/10/23
6770
使用 EnumWindows 找到满足你要求的窗口
在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWindows 这个 API 来枚举这些窗口。
walterlv
2023/10/22
8450
ImGUI 1.87 绘制D3D外部菜单
ImGUI 它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,该框架通常会配合特定的D3Dx9等图形开发工具包一起使用,ImGUI常用来实现进程内的菜单功能,而有些辅助开发作者也会使用该框架开发菜单页面,总体来说这是一个很不错的绘图库,如下将公开新版ImGUI如何实现绘制外部菜单的功能。
王瑞MVP
2022/12/28
1.4K0
ImGUI 1.87 绘制D3D外部菜单
创建可调大小的用户窗体——使用Windows API
在使用VBA创建用户窗体时,通常会将其设置为特定的大小。然而,通过一些编码技巧,可以为其实现类似的调整大小效果。
fanjy
2023/08/29
5550
创建可调大小的用户窗体——使用Windows API
VB6对滚轮的支持
        我需要对Mapx控件支持鼠标滚轮,找了一个可以使用的代码,来自         http://blog.csdn.net/areful/archive/2007/10/19/1832010.aspx         需要注意的是,在FormLoad中增加Hook Map1.hWnd,在Form_Unload中增加UnHook Map1.hWnd         另外,在鼠标移动经过Map时,可以激发Map的mousemove事件,但滚轮无效,因为焦点不在Map上,可以用Map1.SetF
用户1075292
2018/01/23
1K0
【专业技术】Win32创建异形窗口
大家都见过在windows下各种气泡窗口、输入法窗口已经其他一些窗口,这些窗口看起来不像传统的windows窗那样,上面是标题栏,下面是窗口的客户区。这些窗口形状各异,可以是一个多边形,一幅图,甚至是一个人物画像等。这些异形窗口是怎么实现的呢?下面我们就来实现这个奇异形状的窗口。 其实在windows下实现特殊的窗口并不困难,有两种办法可以实现: 通过创建路径和区域、合并区域的办法。创建区域的API有很多,比如CreateRectRgn,CreateRoundRectRgn,CreateElli
程序员互动联盟
2018/03/12
3.5K0
【专业技术】Win32创建异形窗口
设置控件Enable=false,控件颜色不变
[System.Runtime.InteropServices.DllImport("user32.dll ")] public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int wndproc); [System.Runtime.InteropServices.DllImport("user32.dll ")] public static extern int GetWi
冰封一夏
2019/09/11
1.1K0
Excel实战技巧58: 使用VBA创建进度条
2.设置其ShowModal属性为False,这样在该用户窗体处于打开状态时仍能继续运行程序。
fanjy
2019/11/07
6.6K0
Excel实战技巧58: 使用VBA创建进度条
推荐阅读
相关推荐
VB实现半透明或者部分透明窗体
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验