利用的消息循环,
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 方法将其销毁.即从内存中清除.不信你可以打开会务管理器查看.当关闭一个程序启动时就加载态缺梁的窗体时,内存资源占用是不会减少的,但关闭一个动态创建的窗体时,程序占用的内存扮含资源就会减少.因此你在窗体关闭事件中写隐藏窗体的代码,就会发生冲突,而出错.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)