| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:EnumWindows 函数怎么让用户自定义参数呢
只看楼主 加入收藏
a278401627
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-9-5
结帖率:55.56%
收藏
已结贴  问题点数:5 回复次数:4 
EnumWindows 函数怎么让用户自定义参数呢
BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam);


BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam)
{

    int nLen = ::GetWindowTextLength(hwnd) + 1;

   LPTSTR Caption = new TCHAR[nLen];
    ::GetWindowText(hwnd, Caption, nLen);


TCHAR szBuf[256]={0};
   if (!::lstrcmp(Caption,"无标题 - 记事本"))
    {
       // cout << (long)hwnd << endl;
char szTmp[20];
    wsprintf(szTmp,_T("%d|"),(HWND)hwnd);
wsprintf(szTmp,_T("%c|"),Caption);
    strcat(szBuf,szTmp);


}
szBuf[strlen(szBuf)]='\0';


 delete[] Caption;
    return TRUE;
}


int main ()

{

::EnumWindows(EnumWindowsProc,NULL);


return 0;
}



以上是我的代码   我通过EnumWindows 来得到 ,标题是 ,"无标题 - 记事本" 的所有的窗口句柄

现在的问题是 怎么让用户自己来定义窗口标题   也就是说要让 ,"无标题 - 记事本" 变成一个参数。


搜索更多相关主题的帖子: 记事本 long 用户 
2012-12-23 12:27
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:3 
通过LPARAM lParam 这个参数传进去就行了。
int main ()
{

char Text[128] = { "无标题 - 记事本" };

::EnumWindows(EnumWindowsProc,(LPARAM)Text);

return 0;
 }

BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam)
{
    char *pParam = (char *)lParam;

    // pParam 就是你传进来的那个参数了,也就是main中的那个Text[128] = { "无标题 - 记事本" };
   
}
 

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-23 16:14
a278401627
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-9-5
收藏
得分:0 
谢谢版主,我解决这个问题了

现在出现另一个问题是 EnumWindowsProc 执行完后,得到了我需要的句柄

那要怎么才能在int main () 中把句柄接收回来呢

2012-12-23 22:22
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:2 
一样的,你可以定义一个结构体,
比如
typedef struct _EWP_PARAM {
    char szText[128]; // 这个地方传入 枚举的窗口标题
    HWND hwnd;
} EWP_PARAM, *PEWP_PARAM ;

int main ()
 {
   EWP_PARAM ep = { 0 };
   //初始化你的ep结构体
 
   ::EnumWindows(EnumWindowsProc,(LPARAM)ep);

   // 如果找到你要查找的窗口 那么它就被填充在ep.hwnd 带回来了
 
return 0;
 }

BOOL CALLBACK EnumWindowsProc (HWND hwnd, LPARAM lParam)
 {
     EWP_PARAM *pParam = (EWP_PARAM *)lParam;
     // pParam->szText 是你要查找的窗口名
     if (找到你要查找的窗口) {
         pParam->hwnd = hwnd;
         return FALSE; // return false 是指不再继续枚举窗口了。如果你不知道 可以查询msdn
     }     
}


[ 本帖最后由 yuccn 于 2012-12-24 12:26 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-24 12:22
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:0 
学习一下

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-24 13:28
快速回复:EnumWindows 函数怎么让用户自定义参数呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016304 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved