社区
PowerBuilder
帖子详情
如何获取打开的窗口的数量
mengqifeng
2006-01-20 04:38:57
请问一下,怎样才能得到在一个application中打开的窗口的数量,搜索了很久都没有发现有类似的问题,希望高手能够解答一下。
...全文
685
11
打赏
收藏
如何获取打开的窗口的数量
请问一下,怎样才能得到在一个application中打开的窗口的数量,搜索了很久都没有发现有类似的问题,希望高手能够解答一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
msgtogcra
2006-02-14
打赏
举报
回复
如何遍历用 OpenSheet() 打开的窗口可以参考:
http://community.csdn.net/Expert/topic/4544/4544724.xml?temp=.6323358
msgtogcra
2006-02-10
打赏
举报
回复
索性好人做到底,of_get_OpenedWnd() 的代码如下:
不过注意了,我这里滤掉的系统进程仅适用于 win95,其它版本大家自己搞定吧!
/*
功能:
得到当前进程打开的窗口
参数:
aia_openedhwnd[]: 存储打开的窗口句柄数组(输出)
返回值:
成功返回窗口句柄数组的大小;错误返回 -1
*/
ulong ll_processid,ll_buf
uint lia_hwnd[]
int nloop,count,count2=0
string ls_buf
ll_processid = GetCurrentProcessId()
count = of_get_AllWnd(lia_hwnd)
for nloop = 1 to count
GetWindowThreadProcessId(lia_hwnd[nloop], ll_buf)
if ll_buf = ll_processid then
ls_buf = Space(32)
GetWindowText(lia_hwnd[nloop], ls_buf, 32)
choose case ls_buf
case "Default IME", "DDE Server Window", "OleMainThreadWndName"
//
case else
count2 ++
aia_openedhwnd[count2] = lia_hwnd[nloop]
end choose
end if
next
return count2
msgtogcra
2006-02-09
打赏
举报
回复
其实这些 API 都不复杂,稍微麻烦一点就是如何获得所有桌面窗口;
下面就给出 of_get_AllWnd() 的代码
/*
功能:
得到所有正在运行的窗口(除桌面窗口本身)
参数:
aia_hwnd[]: 存储正在运行的窗口句柄(输出)
返回值:
成功返回窗口句柄数组的大小;错误返回 -1
*/
uint hwnd
int count=0
do
count ++
if count = 1 then
hwnd = GetWindow(GetDesktopWindow(), 5) // 得到桌面的第一个子窗口
else
hwnd = GetWindow(hwnd, 2) // 得到子窗口的所有兄弟窗口
end if
if hwnd <> 0 then
aia_hwnd[count] = hwnd
else
count --
end if
loop while hwnd <> 0
return count
mengqifeng
2006-02-09
打赏
举报
回复
我对这些API的用法不熟,不知道有没有那位兄弟姐妹给个例子。
wwq103
2006-02-08
打赏
举报
回复
用API吧,这样通用并且方便些,楼主如果解决了记得来说一声有什么心得和需要注意的地方,造福后人啊^^
mengqifeng
2006-02-05
打赏
举报
回复
to qlyscf()
考虑过用计数器,但是窗口多而且杂,很不好判断,所以后来决定不用。
to msgtogcra()
我先试试看
to li_d_s(我是小鬼-日货?送我都不要,哪怕是丰田和日产的轿车)
大部分都不是mdi窗口
distancehalf
2006-01-23
打赏
举报
回复
建議你最好是用API
bbdx2523
2006-01-23
打赏
举报
回复
楼上的方法可以考虑
qlyscf
2006-01-23
打赏
举报
回复
非常简单的办法可以一试,设一全局变量计数器,初值为0,不管什么打开窗口,计数器加1,关闭窗口,计数器减一,如此可否???
msgtogcra
2006-01-23
打赏
举报
回复
其实方法还是有,利用以下 API 可以得到当前进程相关的窗口句柄,自然也就知道数量:
FUNCTION ulong GetWindowThreadProcessId(ulong hwnd,ref ulong lpdwProcessId) LIBRARY "user32.dll"
FUNCTION ulong GetDesktopWindow() LIBRARY "user32.dll"
FUNCTION ulong GetWindow(ulong hwnd,ulong wCmd) LIBRARY "user32.dll"
FUNCTION ulong GetCurrentProcessId() LIBRARY "kernel32.dll"
FUNCTION ulong GetWindowText(ulong hwnd,ref string lpString,ulong cch) LIBRARY "user32.dll" ALIAS FOR "GetWindowTextA"
原理是:
取得所有在桌面上运行的窗口,获得该窗口的相关进程标识,与当前应用的进程标识进行比较,可以得到哪些窗口是与当前进程相关的(调试状态下当前进程是 pb 编译器);找到的这些窗口当中有一些是系统进程,通过判断窗口标题,如 Default IME, DDE Server Window, OleMainThreadWndName;过滤掉它们,剩下的就是应用中打开的窗口了。
li_d_s
2006-01-21
打赏
举报
回复
如果是mdi还好作,否则恐怕只能自己登记窗口了
linux查看正在运行的
窗口
,
获取
linux中
打开
的应用程序
窗口
的
数量
我想检测由
窗口
管理器管理的特定应用程序的实例
数量
.目前,我有这个:#!/bin/bash# wmctrl requiredpids=$(pidof $1)IFS=' ' read -a pid_arr <<< "$pids"matches=0for pid in "${pid_arr[@]}"domatching_lines=$(wmctrl -l -p | egrep -c "...
linux
获取
子进程个数,
获取
linux中
打开
的应用程序
窗口
的
数量
我想检测由
窗口
管理器管理的特定应用程序的实例
数量
.目前,我有这个:#!/bin/bash# wmctrl requiredpids=$(pidof $1)IFS=' ' read -a pid_arr <<< "$pids"matches=0for pid in "${pid_arr[@]}"domatching_lines=$(wmctrl -l -p | egrep -c "...
DELPHI中MDI子
窗口
的关闭 和
打开
Delphi中MDI子
窗口
的关闭方式默认为缩小而不是关闭,所以当你单击子
窗口
右上角的关闭按钮时会发觉该子
窗口
只是最小化,而不是你预期的那样被关闭。解决办法是在子
窗口
的OnClose事件处理过程中加入如下代码,示例: procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction); begin Acti
获取
系统中当前所有的
窗口
window
获取
系统中当前所有的
窗口
window
python通过只读、不显示
窗口
的方式
打开
ppt文件的代码
下面的资料是关于python通过只读、不显示
窗口
的方式
打开
ppt文件的内容。import win32com from win32com.client import Dispatch, constants ppt = win32com.client.Dispatch('PowerPoint.Application') pptSel = ppt.Presentations.Open('c:/1.pp...
PowerBuilder
1,111
社区成员
66,454
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章