我把窗体关闭后,可以用FindWindow方法,仍然可以获得到此窗体的句柄,是什么原因呢?
另外也尝试了IsWindow()的方法,也不一样不管用。
请求怎么判断窗体是否关闭掉呢?代码如下:
procedure FindCurrForm(strCaption: string; isShow: Boolean);
var
bln: boolean;
begin
while true do
begin
Sleep(1000);
Application.ProcessMessages;
hwTemp := 0;
hwTemp := FindWindow(nil, PAnsiChar(strCaption));//虽然窗体关闭了,但是仍然可以找得到句柄
bln := IsWindow(hwTemp);
if not isShow then
begin
if (hwTemp = 0) or (not bln) then
Break;
end
else
begin
if (hwTemp <> 0) and (bln) then
Break;
end;
end;
end;
另外也尝试了IsWindow()的方法,也不一样不管用。
请求怎么判断窗体是否关闭掉呢?代码如下:
procedure FindCurrForm(strCaption: string; isShow: Boolean);
var
bln: boolean;
begin
while true do
begin
Sleep(1000);
Application.ProcessMessages;
hwTemp := 0;
hwTemp := FindWindow(nil, PAnsiChar(strCaption));//虽然窗体关闭了,但是仍然可以找得到句柄
bln := IsWindow(hwTemp);
if not isShow then
begin
if (hwTemp = 0) or (not bln) then
Break;
end
else
begin
if (hwTemp <> 0) and (bln) then
Break;
end;
end;
end;
解决方案 »
- 如何将静态的html代码转换成图片?
- 关于DELPHI写的DLL的在PB中调用的问题请教
- 晕!数据库登录失败!怎么回事啊?
- 帮忙解决一个有关流操作的地址冲突,总共十几行代码
- 要让用户编辑数据表中的内容,是让用户在表格中编辑还是我制作一个界面好让他编辑好
- 怎样把sql2000备份的数据库恢复到sql7中?
- 三层结构,中间层query,dataprovider客户端用clientdataset,datasource,在客户端用dbgrideh显示数据,怎样添加数据!
- 点对点传文件的问题,我笨所以我送分!
- 有关数据库索引方面的问题
- 改变WindowsMe的壁纸(通过注册表),但是...
- 使用DLL注入钩子,如何能马上激活?在线等
- delphi 关于计算问题
问题基本上找到了,是由于窗体没有Free掉,导致一直可以找得到句柄。
begin
hwTemp := FindWindow(nil, PAnsiChar(strCaption));
if hwTemp = 0 then
ShowMessage('窗口销毁')
else
if not IsWindowVisible(hwTemp) then
ShowMessage('窗口关闭,但未销毁!')
else
ShowMessage('窗口在显示!')
end;
而调用free则是销毁实例
因此用FindWindow来判断是否销毁实例,用IsWindowVisible来判断是否关闭。
同时应注意delphi打开工程时总是要产生一个关闭的实例,即使你已经free了项目中的实例,也能找到一个关闭的窗口,因此试验时必须关闭工程,不能在delphi环境中运行判断程序