控制台程序,用showmessage函数弹出的对话框,如何在用户不按键的请况下自动延时关闭?(100分)

  • 主题发起人 主题发起人 coldwind8112
  • 开始时间 开始时间
C

coldwind8112

Unregistered / Unconfirmed
GUEST, unregistred user!
控制台程序,用showmessage函数弹出的对话框,如何在用户不按键的请况下自动延时关闭?
最好有示例的程序?谢谢各位
 
控制台下野可以用Timer啊!
 
Kingron:
我的主要问题不在延时,而在于如何关闭掉showmessage弹出的对话框,用程序而不需用户干预
 
自己创建一个对话框,再延时关闭.
 
你的目的是想提醒一下用户,在dos窗口输出文字就行了。

如果要用窗口,或者像smokingroom说的那样,

或者

勾子获得该窗口 handle,然后 sendmessage 用 wm_close 作参数

很明显最后这种方法难度更大,按 smokingroom 说的或者 api 创建窗口,或者 dll 实现窗口(因为控制台程序体内无法存在form)

如何实现,自己舍取吧
 
上一贴发完了又想了个“笨”办法 ^_^

在调用 showmessage 的程序体内使用 timer,
获得当前显示分辨率,高宽分别除2,得到屏幕中心点,再 sendkey 一个回车,

OK
 
to smokingroom:
我想过用这个方法,但是说易做难!正在用这个方法做,可怎么也做不好!需要一个例程最好,主要是因为控制台,极不方便。

to iseaweb:
我也使用过勾子 然后 sendmessage 用 wm_close 作参数,甚至还使用过对按钮发按下消息,但是对于正常窗体有效,对于showmessage出来的对话框无效
 
那就用我上边的办法

得到显示分辨率,取得屏幕中心点,然后移动鼠标到该点,再模拟click ^_^
 
heihei,这个窗口被人移掉了怎么办?
 
首先,如果有人移动它,就不存在没人点击的问题

其次,在dll里包含一个form,然后在主程序里调用,这个不存在什么难度
在这个dll里的form里再用timer实现定时就行了。

或者,勾住对话框,获得标题文字确定是目标窗口。再取得按钮在窗口里的位置,再“按”

最后,如果你还觉得不满意,我就跳楼去了 ^_^
 
>>首先,如果有人移动它,就不存在没人点击的问题
我不是要点完了事,我要作为一个关机前的提醒,比如说10秒吧,来个倒计时

>>其次,在dll里包含一个form,然后在主程序里调用,这个不存在什么难度
在这个dll里的form里再用timer实现定时就行了。
这个方法我不会,不好意思

>>勾住对话框,获得标题文字确定是目标窗口。再取得按钮在窗口里的位置,再“按”
这个方法我试过,好像对showmessage弹出的对话框不起作用

我的构想还是建一个对话框,然后让它显示,延时,关掉,再关机
关键是不好做,试到现在刚有些眉目,肯定我会给你分的,但最好有个例程
 
勾子能操纵任意窗口,只不过模式窗口稍特殊一些,就不用它了吧
dll方法就是你想的“建一个对话框,然后让它显示,延时,关掉,再关机”

新建 dll 工程,加入 form,定义 dll 输出函数,比如名为 ExecDllForm
在 ExecDllForm 中creat form,
最后在主程序中调用 ExecDllForm 即可

在 form 上,放一个timer,一个OK_button,一个Cancle_button
一个Pro_lable......
像编写普通窗口程序那样完成 dll 里的 form

够清楚了吧?


这实际就是一个在 dll 里加入 form 并操纵的问题,网上这类例子多如牛毛
 
利用Dll实现通用密码验证框

      作者:夏青虫

---- 在我们编制Delphi应用程序,常常需要提供一个密码验证框,对应用程序的使用者进行身份核对。

如果能有一个通用的密码验证框,便能够为我们的工作节约不少的时间,更能使我们编制的程序小而快。

以下的程序为你提供了这样的一个DLL文件。

//文件名为CheckPasswordForm.dpr;
编译此文件生成CheckPasswordForm.dll
library CheckPasswordForm;

uses
XcqCheck in 'XcqCheck.pas' {XcqForm};

exports
CheckPassword name 'CheckPassword';//dll入口

begin
end.


//文件名为XcqCheck.pas
unit XcqCheck;

interface

uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, Mask, Menus;

type
TXcqForm = class(TForm)
XcqEdit: TMaskEdit;//密码输入框
OkBtn: TButton;
procedure OkBtnClick(Sender: TObject);
end;

var
XcqForm: TXcqForm;
Check: Boolean;//验证输入密码的正确性
function CheckPassword: Boolean;export;
//本dll文件的关键实现

implementation

{$R *.DFM}

procedure TXcqForm.OkBtnClick(Sender: TObject);
begin
if XcqEdit.Text = 'xcq' then
Check := True;
Close;
end;

function CheckPassword;export;
begin
Check := False;
XcqForm := TXcqForm.Create(Application);
//创建密码输入框
XcqForm.ShowModal;//显示密码输入框;
注意:不能用XcqForm.Show!
Result := Check;//返回给调用本dll的应用程序判断
XcqForm.Free;//释放本dll文件所占资源
end;
end.
---- 在调用以上dll中CheckPassword函数的应用程序中只需加入以下语句在implementation 后,

function CheckPassword: Boolean; external 'CheckPasswordForm.dll' name 'CheckPassword';在需

要进行密码验证的地方加入下面的条件语句就完全实现了密码验证的功能。
if CheckPassword then
begin
...//如XcqQuery.Open;
end;
---- 上面的程序只是一个简单的密码验证框,我们可以将密码以写入注册表或文件的方式保存,动态修

改,更可以利用算术算法对密码进行简单的加密等,使要保密的数据更安全。
---- 其实,上文中如何在dll中实现窗口让我走了不少弯路,我觉得此法对大家更有意义,这是避免程序

庞大的一种有效方法,不妨试试。

---- 以上程序在Windows98/Delphi3下编译通过。欢迎大家批评指正。
 
谢谢,我的工作也完成的差不多了
 
后退
顶部