当前位置:主页>仓库管理软件> 列表

关机时如何自动关闭程序? 找速达3000软件狗

库存管理软件版1楼: 我写的程序如下:
procedure TMainForm.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
Message.Result := 1;
application.Terminate;
end;
但是当我关机的时候,程序是关掉了,但是机器就停在那边了,没有反应了。一定要再关一下机器,才能关机。
请问问题在哪里啊?应该怎么写代码呢?

2楼: 你什么都不作关机的时候程序就会自己关闭的 如速达3000软件狗

3楼: 什么都不做不会自动关闭的。
我写的代码如下:
procedure TGMainForm.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
inherited;
Message.Result := 1;
halt;
end;
当PC不在运行其他任何程序就只运行我的程序的时候是可以关闭程序并正常关机的,但是当其他程序在运行的时候我的程序就不能关闭,而且也不能关机。
不知道是什么原因,会不会和其他什么程序有冲突啊?大家看看啊,已经被这个问题折腾很长时间了。先谢了!

4楼: 找到程序的句柄,并在进程中关闭进程。
关闭进程
procedure KillProcess(hWindowHandle: HWND);


var
hprocessID: INTEGER;
processHandle: THandle;
DWResult: DWORD;
begin
SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);
if isWindow(hWindowHandle) then
begin
GetWindowThreadProcessID(hWindowHandle, @hprocessID);
if hprocessID <> 0 then
begin
processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID);
if processHandle <> 0 then
begin
TerminateProcess(processHandle, 0);
CloseHandle(ProcessHandle);
end;
end;
end;
end;
找程序的句柄
hWndClose := FindWindow(nil, ''GetData'');
if hWndClose <> 0 then //如果查找成功,则发送消息,关闭指定的窗口
KillProcess(hWndClose);

5楼: 这样定义对象方法:
private
procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION;

6楼: 多人接受答案了。