如何知道一个窗口是否已经打开?窗口是实例打开的

dancer 2006-02-08 10:20:00
如何知道一个窗口是否已经打开?窗口是实例打开的
这样用isvaild(w_index)的方法则无法判断,有没有好的方法,谢谢!
...全文
337 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Binary Wang 2006-03-10
  • 打赏
  • 举报
回复
这段代码和我正在做的项目所用的一样。
WorldMobile 2006-02-11
  • 打赏
  • 举报
回复
这么做,给你段代码

iw_frame 为你的MDI主窗口
as_win_nam 为你要查找的窗口名
函数返回为1时为找到


window lw_sheet

lw_sheet = iw_frame.getfirstsheet()
if isvalid(lw_sheet) then
//
else
return 0
end if

do while lw_sheet.classname() <> as_win_nam
lw_sheet = iw_frame.getnextsheet(lw_sheet)
if isvalid(lw_sheet) then
//
else
return 0
end if
loop

if lw_sheet.classname() = as_win_nam then
return 1
else
return 0
end if
dancer 2006-02-10
  • 打赏
  • 举报
回复
楼上的,findwindowa也不行也,还有没有其他方法的,谢谢
pbdesigner 2006-02-10
  • 打赏
  • 举报
回复
使用共享变量计数,open时计数器加1,close时计数器减1,根据计数器是否大于1判断
msgtogcra 2006-02-10
  • 打赏
  • 举报
回复
如果是以表单方式打开的窗口则可以判断:通过 GetFirstSheet() 和 GetNextSheet() 遍历所有表单,用 ClassName() 取得窗口类名进行判断。
而对于非表单类型的窗口,由于 pb 没有提供相应的遍历函数,则没有通用的方法可以解决;估计非要用全局变量进行登记了。
dancer 2006-02-10
  • 打赏
  • 举报
回复
window lw_win
string ls_processwin
ls_processwin就是要打开的mdi窗口名
OpenSheetWithParm(lw_win,s_id,ls_processwin,ParentWindow(),0,Original!)

我现在可以知道ls_processwin(打开的窗口名,多个),如何判断某个窗口有没有打开呢?
rishengw 2006-02-10
  • 打赏
  • 举报
回复
窗口是实例打开的 实例是什么意思?没看懂
coordinate 2006-02-08
  • 打赏
  • 举报
回复
Function boolean IsWindow( ulong hwnd ) Library "user32.dll"
if IsWindow(handle(w_1)) then
...
end if
dancer 2006-02-08
  • 打赏
  • 举报
回复
to jimmyxc(小谢)
我用isvaild不行也,有没有办法得到application的control列表,然后再去判断有没有相应的
window打开,这样行不行的?
dancer 2006-02-08
  • 打赏
  • 举报
回复
请问上面的
ulng_winhandle = FindWindowA( 0,"登录" )
后面的“登陆”是不是窗口的名称?

还有就是要监测多个窗口有没有好的办法?谢谢
jimmyxc 2006-02-08
  • 打赏
  • 举报
回复
用api
//检测窗口是否打开
Function ulong FindWindowA( ulong winhandle, string wintitle ) Library "user32"
Function uLong BringWindowToTop( ulong hwnd ) Library "user32"
Function uLong ShowWindow( ulong winhandle, int wincommand ) Library "user32"
//应用
ulong ulng_winhandle
ulng_winhandle = FindWindowA( 0,"登录" )
If ulng_winhandle > 0 Then
BringWindowToTop( ulng_winhandle )
ShowWindow( ulng_winhandle, 5 )
Return
End If

ulng_winhandle = FindWindowA( 0,"管理系统")
If ulng_winhandle > 0 Then
BringWindowToTop( ulng_winhandle )
ShowWindow( ulng_winhandle, 5 )
Return
End If
MINDNET 2006-02-08
  • 打赏
  • 举报
回复
楼上的应该可以的。
还不可以就设一个全局变量来做标记吧。
jimmyxc 2006-02-08
  • 打赏
  • 举报
回复
isvaild可以啊
wepwep 2006-02-08
  • 打赏
  • 举报
回复
那就用findwindowa,不知道mdi的子窗体能不能找到?有结果告诉我哦
dancer 2006-02-08
  • 打赏
  • 举报
回复
楼上的,如果用全局数组,则所有的窗口都要改了,有些是其他开发组的pbl,hehe,这样太麻烦了
wepwep 2006-02-08
  • 打赏
  • 举报
回复
findwindowa(0,"XX")中的XX表示窗体的TITLE,是字符串
如果自己写的程序应该可以建一个实例窗体的列表吧?在实例窗体的关闭事件里加点代码,用全局数组就ok了啊
dancer 2006-02-08
  • 打赏
  • 举报
回复
楼上的几种方法我都试过了,都不行也,实例打开都可以打开多个。。。
还有没有其他的方法?谢谢
jimmyxc 2006-02-08
  • 打赏
  • 举报
回复
application的control列表?没有试过,关注下吧
jimmyxc 2006-02-08
  • 打赏
  • 举报
回复
ulng_winhandle = FindWindowA( 0,"登录" )
后面的“登陆”是窗口的名称

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧