0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

API技巧集(三)

OBEason 来源:jf_88563726 作者:jf_88563726 2023-05-23 11:10 次阅读

(一)闪烁程序的标题栏

在某些专业的应用程序中,当程序需要提醒用户或要引起用户的注意时,就不停地闪烁程序的标题栏。要实现这个功能,只需要一个Timer组件和使用一个API函数--FlashWindow。

使用API函数FlashWindow可以闪烁显示指定窗口,让窗口在活动与非活动的状态之间切换,它有两个参数:hwnd和bInvert,头文件为“winuser.h”。其中,参数hwnd为要闪烁的窗口句柄,参数bInvert是一个bool变量,设为true时,程序窗口标题栏从活动切换到非活动状态、或反向切换,当设为false时,窗口标题栏还原为最初的状态。如果配合一个时间组件(Timer组件),以一定的时间间隔执行语句:

FlashWindow( Form1-$#@62;Handle,true);

程序窗口的标题栏就在活动、非活动的状态之间不停地切换。若把hwnd指定成为应用程序的句柄( Application-$#@62;Handel),将会闪烁程序在任务栏上的标题栏。

下面就让我们来做一个闪烁窗口标题栏和任务栏上标题栏的程序。

首先,在Form1中添加三个按钮Button1、Button2和Button3,把它们的属性分别为“闪烁窗口标题栏”、“闪烁任务标题栏”和“停止闪烁”,再加入两个时间组件Timer1和Timer2,将两个Timer组件的Enabled属性都设为false,将Interval属性都设为为500(即半秒),改变这个属性的值可以修改闪烁的频率。

然后,双击Timer1,在OnTimer事件中加入:

FlashWindow( Form1-$#@62;Handle,true);

双击Timer2,在OnTimer事件中加入:

FlashWindow( Application-$#@62;Handel,true);

双击Button1,在Button1的OnClick事件中加入:

Timer1-$#@62;Enabled=true;

双击Button2,在Button2的OnClick事件中加入:

Timer2-$#@62;Enabled=true;

最后,双击Button3,在Button3的OnClick事件中加入:

Timer1-$#@62;Enabled=false;

Timer2-$#@62;Enabled=false;

FlashWindow( Form1-$#@62;Handle,false);

FlashWindow( Application-$#@62;Handel,false);

这样,一个简单的例子就完成了。按F9编译运行程序,你就可闪烁窗口标题栏或是闪烁任务栏上? 题栏了。

(二)拖动无标题窗体

现在的Windows应用程序,大都使用了图形化的界面、不规则窗口技术,使得程序界面更加漂亮了。但是,使用界面一般要先把窗体的标题栏去掉(在BCB中,将窗体的BorderStyle属性设为bsNone,就可以把窗体的标题栏去掉),这样就不能使用原来的标题栏了,出现了窗口不能移动的问题。没有标题栏怎样用鼠标拖动窗体呢?我们可以使用Windows的API函数SendMessage来解决这个问题。

首先,新建一个工程,把窗体的BorderStyle属性设为bsNone去掉窗体的标题栏,按F12键切换到代码编辑窗口,在头部加入包含头文件"winuser.h"的代码:

#include $#@60;winuser.h$#@62;

然后,在窗体的 OnMouseDown 事件中加入下面的代码:

if(Button == mbLeft)//判断是否按了鼠标左键

{

ReleaseCapture();//释放鼠标操作

SendMessage( Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

}

这样,用鼠标左键点住窗口拖动,就可以实现拖动没有标题的窗口了。也可以在窗体上添加组件,然后在该组件的 OnMouseDown 事件中加入上面的代码,这样也可以点住这个组件拖动窗口。你还可以把SendMessage函数的第一个参数修改为这个组件的句柄,如:往窗体添加一个Button组件,在它的 OnMouseDown 事件中加入上面的代码,其中把SendMessage那行语句改为:

SendMessage( Button1-$#@62;Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);

这样就可以在程序运行时,用鼠标在窗口的范围内移动Button1了。

(三)隐藏程序在任务栏的图标

使用API函数ShowWindow可以隐藏一个程序在任务栏的图标,它被包含在头文件“winuser.h”里面。

1、隐藏任务栏图标的代码就是:

ShowWindow( Application-$#@62;Handle, SW_HIDE);

2、要重新显示的时候就使用:

ShowWindow( Application-$#@62;Handle, SW_SHOW);

但是,如果将程序最小化后,在任务栏的图标就会重新出现。若要在程序还原最小化后,程序在任务栏的图标重新被隐藏起来,可以在窗体的OnPaint事件中加入隐藏程序在任务栏的图标的代码,这样,程序只有在最小化时任务栏才会出现图标,当程序还原最小化时图标又会重新被隐藏起来。

(四)重启、关闭Windows

当用户修改了Windows里面的一些设置,Windows经常会提问是否要重新启动计算机,当用户点Yes的时候,计算机将会自动重启。这个就是API函数ExitWindowsEx的一个典型的应用。

ExitWindowsEx,顾名思义就是退出Windows的函数,它有两个参数,第一个是退出Windows的选项,常用的有:EWX_REBOOT(重新启动计算机),EWX_SHUTDOWN(关闭计算机),EWX_LOGOFF(注销当前用户),第二个参数系统保留没有使用,可设为0。

在自编的程序中(如:注册表修改程序),当用户修改了某项设置需要重新启动计算机的时候,就要使用EWX_REBOOT选项重启计算机。如:

ExitWindowsEx(EWX_REBOOT,0);

使用WX_SHUTDOWN选项,可以实现关机。如:

ExitWindowsEx(EWX_SHUTDOWN,0);

当需要注销的时候,就使用EWX_LOGOFF选项。如:

ExitWindowsEx(EWX_LOGOFF,0);


审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1384

    浏览量

    60994
收藏 人收藏

    评论

    相关推荐

    API安全风险显现,F5助API实现可信访问

    API在现代软件开发中占据着重要地位,是应用和数据的网关,实时API更是构建数字业务的基础。Salt Labs报告显示,过去6个月中,API攻击活动数量快速增长了400%,可见API
    的头像 发表于 04-17 16:09 141次阅读
    <b class='flag-5'>API</b>安全风险显现,F5助<b class='flag-5'>API</b>实现可信访问

    Kubernetes Gateway API攻略教程

    Kubernetes Gateway API 刚刚 GA,旨在改进将集群服务暴露给外部的过程。这其中包括一套更标准、更强大的 API资源,用于管理已暴露的服务。在这篇文章中,我将介绍 Gateway
    的头像 发表于 01-12 11:32 250次阅读
    Kubernetes Gateway <b class='flag-5'>API</b>攻略教程

    api网关 kong 教程入门

    为什么使用API-Gateway 方便客户端维护– 每个请求方不用管理多个api url,统一访问api-gateway即可 接口重构时调用方不须了解接口本身等拆分和聚合 客户端无须关心接口协议
    的头像 发表于 11-10 11:39 280次阅读
    <b class='flag-5'>api</b>网关 kong 教程入门

    API测试框架Grillon概述

    API测试框架Grillon概述
    的头像 发表于 09-08 10:22 1753次阅读

    开创以API为核心的数字化变革,华为云实现API全生命周期一体化协作

    日前,在华为开发者大会 2023(Cloud)的“开创以 API 为核心的数字化变革,实现 API 全生命周期一体化协作”专题论坛中,华为云产品专家、技术专家、伙伴、客户分享了在 API 领域
    的头像 发表于 08-25 13:44 282次阅读
    开创以<b class='flag-5'>API</b>为核心的数字化变革,华为云实现<b class='flag-5'>API</b>全生命周期一体化协作

    Akamai 宣布推出用于保护 API 免受业务滥用和数据盗窃的 API Security 产品

     API Security,该产品可以阻止应用程序编程接口 (API) 攻击并检测出 API 中的业务逻辑滥用。此外,Akamai API Security 还会使用行为分析来发现、审
    的头像 发表于 08-08 22:28 357次阅读

    常见的api接口漏洞有哪些

    错误消息可帮助 API 使用者排查其与 API 的交互问题,并允许 API 提供者了解其应用程序的问题。但是,它也可以揭示有关资源、用户和 API 底层体系结构(例如 Web 服务器或
    发表于 07-17 16:29 178次阅读

    API安全“芯”方案丨芯盾时代APISEC安全平台 助力企业构建API安全管理体系

    2021年4月,Linkedln曝出惊天数据泄露事件,7亿用户资料被黑客通过API漏洞窃取;2022年2月,国内某招聘平台的API漏洞遭人利用,被秘密爬取2.1亿余条个人信息;2023
    的头像 发表于 07-06 10:05 700次阅读
    <b class='flag-5'>API</b>安全“芯”方案丨芯盾时代APISEC安全平台 助力企业构建<b class='flag-5'>API</b>安全管理体系

    api接口怎么使用

    本文就从API接口的维度,浅析API的概念以及为什么要了解它 一、API的概念 API,官方定义为应用程序编程接口。就是把是一些预先定义的接口,用来提供应用程序与开发人员基于某软件或硬
    的头像 发表于 05-24 14:44 989次阅读

    企业怎么选择API网关

      一、API网关的用处 API网关我的分析中会用到以下三种场景。 1、Open API 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供。最好的例子就是淘宝开放平台
    的头像 发表于 05-23 11:05 395次阅读
    企业怎么选择<b class='flag-5'>API</b>网关

    API技巧集(二)

    (一)不规则窗口 Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数
    的头像 发表于 05-22 16:49 694次阅读

    如何设计API返回码(错误码)?

    客户端请求API,通常需要通过返回码来判断API返回的结果是否符合预期,以及该如何处理返回的内容等
    的头像 发表于 05-15 09:05 559次阅读
    如何设计<b class='flag-5'>API</b>返回码(错误码)?

    为什么需要 API 网关?

    API 网关是 API 全生命周期管理的关键基础组件,负责生产环境中 API 的配置、发布、版本回滚、安全、负载均衡等。API 网关是所有终端流量的入口,负责把终端的
    的头像 发表于 05-04 17:47 543次阅读
    为什么需要 <b class='flag-5'>API</b> 网关?

    API 网关详细介绍(下)

    业界有很多流行的 API 网关,开源的有 Nginx、Netflix Zuul、Kong 等。当然 Kong 还有商业版,类似的商业版网关还有 GoKu API Gateway 和 Tyk
    的头像 发表于 05-04 17:28 584次阅读
    <b class='flag-5'>API</b> 网关详细介绍(下)

    API 网关详细介绍(上)

    业界有很多流行的 API 网关,开源的有 Nginx、Netflix Zuul、Kong 等。当然 Kong 还有商业版,类似的商业版网关还有 GoKu API Gateway 和 Tyk
    的头像 发表于 05-04 17:28 1221次阅读
    <b class='flag-5'>API</b> 网关详细介绍(上)