如何写简单的无窗体,监控u盘插入的delphi程序

如何写简单的无窗体,监控u盘插入的delphi程序,第1张

我的基本框架是这样的的

利用的消息循环,

begin

while(GetMessage(msg,0,0,0))do

begin

TranslateMessage(msg)

DispatchMessage(msg)

end

end.

如何加入消息队列,判断优盘的插入和拔出??

网上有篇帖子是这样的,用的是有窗体的label,

《Delphi捕获U盘插入或者拔出》

Delphi捕获U盘插入或者拔出

在USB端口被热插后,系统会向所有程序发布WM_DEVICECHANGE消息,所以只要捕获此消息即可实现对U盘的监视。

1、新建工程

2、在form1上放一个Label

3、定义一个私有过程procedureWMDeviceChange(varMsg:TMessage)messageWM_DEVICECHANGE

unitUnit1

interface

uses

Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,

Dialogs,AppEvnts,ExtCtrls,StdCtrls

type

TForm1=class(TForm)

Label1:TLabel

private

{Privatedeclarations}

procedureWMDeviceChange(varMsg:TMessage)messageWM_DEVICECHANGE

public

{Publicdeclarations}

end

var

Form1:TForm1

implementation

{$R*.dfm}

procedureTForm1.WMDeviceChange(varMsg:TMessage)

var

myMsg:String

begin

CaseMsg.WParamof

32768:

begin

myMsg:='U盘插入'

Label1.Caption:=myMsg

end

32772:

begin

myMsg:='U盘拔出'

Label1.Caption:=myMsg

end

end

end

end.

我想讲两者结合起来,如何实现呢??

请会的大侠给我点启示。

---------------------解决方案------------------------------

---------------------解决方案------------------------------

为啥要无窗体,无窗体不就是控制台程序了。

程序带窗体,你隐藏窗体不就得了,如果无窗体,何来什么消息和消息循环。

如果你想判断多个U盘的插入和移除的顺序,可以通过WM_DEVICECHANGE消息的lparam,lparam是个结构体指搭者针,这个结构体包含了你想要的数据,包括当前插入或移除的设备类型、设备的盘符等。

---------------------解决方案------------------------------

写个示例,你下载瞅瞅

http://download.csdn.net/detail/sololie/6672327

---------------------解决方案------------------------------

示例中你可以插入多个U盘,都会顺序列在listbox里,然后随便顺序拔出都能知道当前拔出的是哪个盘符的U盘。

至于窗体是否显示,你不想像是就隐藏窗体,如果还想从新显示窗体就做个全局热键来回恢复窗体的显示。

---------------------解决方案------------------------------

用WIN32API创建一个隐藏窗口,去掉ShowWindow updatewindow即可,然后在窗口回调过程知顷薯中处理该消息

---------------------解决方案------------------------------

如果那人是插入一个移动硬盘呢。

---------------------解决方案------------------------------

上传资源后发现能删除,好奇点了下删除,果然给删了。。。,

再传一次http://download.csdn.net/detail/sololie/6672339

例子是用vcl方式,你要api sdk方式,就按4楼说的,在窗口回调函数乎乎中处理WM_DEVICECHANGE消息,

不过同样要额外声明不少结构体和常量。

---------------------解决方案------------------------------

窗体直接Hide掉就可以了。

---------------------解决方案------------------------------

怎么判断 插入的usb设备 是手机???

怎么判断 插入的usb设备 是手机???

选取View菜单 点击第一项,打开 Project Manage 项目管理器.

在Project Manage 中选取某个窗体,右键,选择Remove from Project.

OK了,现在窗体已经从项目中去除了.

如果这衫改个或老判窗体以后再不想用含枣了. 可以去把它的.pas文件.dfm文件都删掉,这样最彻底.

窗体关闭,其实就是将窗体隐藏起来,没有显示而已,他并没有从内存中清除,可以随时通过show方法再次显示,而动态帆运创建的窗口,可以通过FREE 方法将其销毁.即从内存中清除.不信你可以打开会务管理器查看.当关闭一个程序启动时就加载态缺梁的窗体时,内存资源占用是不会减少的,但关闭一个动态创建的窗体时,程序占用的内存扮含资源就会减少.因此你在窗体关闭事件中写隐藏窗体的代码,就会发生冲突,而出错.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12364595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存