做了一个托盘程序,里面使用了spcomm组件获取数据,在程序运行时操作系统无法关闭,必须先退出托盘程序系统才能关闭;
开始以为是托盘程序造成的,后来发现没有使用spcomm组件的托盘程序可以正常关闭操作系统.
然后我做了一个很简单的测试程序,就是一个一般的程序一个页面(非托盘程序),放了一个spcomm组件,无任何操作,没有对spcomm进行任何操作,在程序运行时操作系统也不能正常关闭;
另外程序截获不到关机消息WM_QUERYENDSESSION
spcomm版本是2.5的
这个问题好像很久以前也有人遇到过,但是没找到解决的办法 下面是我的测试程序代码unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm;type
TForm3 = class(TForm)
Comm: TComm;
procedure WMQueryEndSession(var Message:TMessage);message WM_QUERYENDSESSION;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form3: TForm3;implementation{$R *.dfm}Function WriteLog(LogStr:string):Boolean;
var
F:TextFile;
Filename: string;
begin try
Filename:=ExtractFilePath(LowerCase(ParamStr(0)))+'log.txt' ;
AssignFile(F,FileName); if not FileExists(Filename) then
begin
Rewrite(F);
end else
begin
Append(F);
end; Writeln(F, FormatdateTime('yymmdd hh:mm:ss',now)+':'+LogStr);
CloseFile(F); result:=true;
except
result:=false;
end;
end;procedure TForm3.WMQueryEndSession(var Message:TMessage);
begin
WriteLog('TForm3-WMQueryEndSession');
end;end.
开始以为是托盘程序造成的,后来发现没有使用spcomm组件的托盘程序可以正常关闭操作系统.
然后我做了一个很简单的测试程序,就是一个一般的程序一个页面(非托盘程序),放了一个spcomm组件,无任何操作,没有对spcomm进行任何操作,在程序运行时操作系统也不能正常关闭;
另外程序截获不到关机消息WM_QUERYENDSESSION
spcomm版本是2.5的
这个问题好像很久以前也有人遇到过,但是没找到解决的办法 下面是我的测试程序代码unit Unit3;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm;type
TForm3 = class(TForm)
Comm: TComm;
procedure WMQueryEndSession(var Message:TMessage);message WM_QUERYENDSESSION;
private
{ Private declarations }
public
{ Public declarations }
end;var
Form3: TForm3;implementation{$R *.dfm}Function WriteLog(LogStr:string):Boolean;
var
F:TextFile;
Filename: string;
begin try
Filename:=ExtractFilePath(LowerCase(ParamStr(0)))+'log.txt' ;
AssignFile(F,FileName); if not FileExists(Filename) then
begin
Rewrite(F);
end else
begin
Append(F);
end; Writeln(F, FormatdateTime('yymmdd hh:mm:ss',now)+':'+LogStr);
CloseFile(F); result:=true;
except
result:=false;
end;
end;procedure TForm3.WMQueryEndSession(var Message:TMessage);
begin
WriteLog('TForm3-WMQueryEndSession');
end;end.
解决方案 »
- Undeclared identifier: 'PAVIFile' 实在搞不懂了
- 怎样使messagedlg出现的标题和内容以及按钮上的文字都是自己定义的中文?
- SQLSERVER 中如何做 复制和日记传送?谢谢
- 如何安装 DELPHI 2005
- 一个关于ADOQUERY的问题。。谢谢
- 如何使任务管理器在CPU使用记录中绘制指定图像?
- 多条件的查询该如何解决呀??
- 无法绑定由多个部分组成的标识符bsskinedit.text
- 如何是程序具有文件管理器的功能(双击时自动启动相应的程序)?
- ACCESS与SQL SERVER中的日期类型的长度
- fastrepoet的两个问题!
- delphi控制execel问题
begin
case msg.msg of
PWM_GOTCOMMDATA:
begin
ReceiveData( PChar(msg.LParam), msg.WParam );
LocalFree( msg.LParam )
end;
PWM_RECEIVEERROR: ReceiveError( msg.LParam );
PWM_MODEMSTATECHANGE:ModemStateChange( msg.LParam );
PWM_REQUESTHANGUP: RequestHangup;
PWM_SENDDATAEMPTY: _SendDataEmpty
else
with msg do
Result := DefWindowProc(FHWnd, Msg, WParam, LParam);
end
end;
http://download.csdn.net/source/1338963
但是不是自己需要的消息时却没有将此消息还给系统,导致系统无法关机 else
with msg do
Result := DefWindowProc(FHWnd, Msg, WParam, LParam); 这段就起到了这个作用吧修正版应该已经处理过这个问题所以没有问题