百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

vb.net做一个无焦点的窗口 vb窗体失去焦点

yuyutoo 2024-10-12 01:33 2 浏览 0 评论

一般情况下,代码生成的窗体都是有标题栏的,当鼠标点击这个窗体的任何地方,这个窗体就会拥有焦点;当窗体失去焦点时,标题栏是灰色的。

我们有时希望这个窗体是一个无焦点的窗口,就算你用鼠标点击它,它也不会得到焦点,比如,我们常见的输入法窗口就是一个无焦点的窗口。

如果我们通过代码做一个无焦点的窗体,那么,再加上相应的代码,就可以通过键盘或鼠标点击向别的程序窗口发送字符,就像一个外挂的输入法一样。

下面,我就通过vb.net来做一个无焦点的窗体。

首先,在窗体里建立2个控件,一个是TextBox控件,一个是Button控件。

接着,写入相关代码,代码很简单,先导入相关的API,然后在窗体的Load事件写入相应代码就可以了。全部代码如下:

Public Class Form1
    '无焦点的窗体:
    Private Const GWL_STYLE = (-16)
    Private Const HWND_TOPMOST = -1
    Private Const HWND_NOTOPMOST = -2
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOACTIVATE = &H10
    Private Const SWP_SHOWWINDOW = &H40
    Private Const WS_EX_NOACTIVATE = &H8000000
    Private Const GWL_EXSTYLE = (-20)
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        '无焦点的窗体:
        Dim style As Integer
        style = GetWindowLong(Me.Handle.ToInt32, GWL_EXSTYLE)
        style = style Or WS_EX_NOACTIVATE
        Call SetWindowLong(Me.Handle.ToInt32, GWL_EXSTYLE, style) '这一句代表有焦点
        SetWindowPos(Me.Handle.ToInt32, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)

    End Sub

End Class

写好代码,按F5调试运行,运行结果界面如下:

噫?怎么会还有焦点?这是在visual studio 2022测试的结果,难道代码有误?

不用急,当你去点击别的程序,让这个测试窗体Form1失去焦点,然后,你再想让这个失去焦点的窗体再得到焦点,就不可能了,无论是像点击窗体上的2个控件,还是点击窗体的标题栏,就不会让这个无焦点的窗体再得到焦点。

你这时一定在想,能不能让窗体一启动就失去焦点呢?答案是:当然可以。

具体做法是:点击VS2022的“项目”菜单的最后一个“属性”菜单项,或者如下图所示,鼠标右键点击应用程序,点击最后一个菜单,进入属性对话框。

在属性对话框中,在“应用程序框架”项里,要取消勾选第一个选项:“为此项目启用Visusal Basic" 应用程序 框架。

取消勾选第一个选项后,再F5运行,好了,一启动程序就是无焦点的窗体,成功!如下图所示:

但是,你会发现实现窗体启动即无焦点,也付出了代价,即窗体样式只能是经典的样式了,你看看,TextBox控件,一个是Button控件都是经典样式了,不再是XP样式了。

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: