关于FindWindow和GetClassName求解释

jklbnm1122 2011-03-30 02:02:18
用findwindow和getclassname写了一段代码
为什么句柄可以获得,窗口的类名却不能正确输出 程序运行结果输出窗口类名为空

HWND hwd;
char *name=“”;
hwd=::FindWindow("FxWnd",NULL);
::GetClassName(hwd,name,40);
MessageBox(NULL,name,NULL,NULL);
cout<<hwd;


...全文
499 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
gift925 2011-03-31
  • 打赏
  • 举报
回复
好好看看C++的内存管理部分
许文君 2011-03-30
  • 打赏
  • 举报
回复
char *name=“”; //new一段内存或者 char name[128];都是可以的.
Eleven 2011-03-30
  • 打赏
  • 举报
回复
任何类型的指针都一样
wltg2001 2011-03-30
  • 打赏
  • 举报
回复
写成char *name程序就崩溃了
但是写成char *name="";就没事 这算不算是申请 如果不是该怎么申请?new??
==============
当然崩溃了,指针name根本就是一个野指针,指向哪儿都不知道,不崩溃才怪呢。
写成char *name=“” 也有崩溃的可能性,你这个算是申请吧,但是""表示是一个空串,对于name所指的空间大小为0,而你后面调用::GetClassName(hwd,name,40);得到的类名不可能是空串的,所以溢出了。
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gift925 的回复:]
char *name=new char[MAX_PATH];

不要了记得delete
[/Quote]
平时用指针的时候怎么没这么写 只有字符指针是这样??
gift925 2011-03-30
  • 打赏
  • 举报
回复
char *name=new char[MAX_PATH];

不要了记得delete
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 visualeleven 的回复:]
引用 8 楼 jklbnm1122 的回复:
引用 5 楼 visualeleven 的回复:
C/C++ code
HWND hWnd = NULL;
TCHAR szClassName[MAX_PATH] = {0};
hWnd =::FindWindow(_T("FxWnd"),NULL);
if(hWnd)
{
::GetClassName(hWnd,szClassName……
[/Quote]
写成char *name程序就崩溃了
但是写成char *name="";就没事 这算不算是申请 如果不是该怎么申请?new??
Eleven 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jklbnm1122 的回复:]
引用 5 楼 visualeleven 的回复:
C/C++ code
HWND hWnd = NULL;
TCHAR szClassName[MAX_PATH] = {0};
hWnd =::FindWindow(_T("FxWnd"),NULL);
if(hWnd)
{
::GetClassName(hWnd,szClassName,MAX_PATH);
::MessageBo……
[/Quote]
指针在使用之前需要分配空间的,C、C++基础的东西~
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]
C/C++ code
HWND hWnd = NULL;
TCHAR szClassName[MAX_PATH] = {0};
hWnd =::FindWindow(_T("FxWnd"),NULL);
if(hWnd)
{
::GetClassName(hWnd,szClassName,MAX_PATH);
::MessageBox(NULL,szClassName,NULL,0)……
[/Quote]
谢谢你问题已经解决 你能给我解释一下为什么改成数组就可以了吗??
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
char *name=“”;
->
char name[]=“”;
你的程序没有崩溃就很不错了
[/Quote]
我在后面写了cout<<hwd就是进行判断的 这样看起来更直观
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
char *name=“”;
->
char name[]=“”;
你的程序没有崩溃就很不错了
[/Quote]
我只是随手写的实验程序 所以没做判断
把char *name=“”;改成char name[]=“”;就可以了吧
Eleven 2011-03-30
  • 打赏
  • 举报
回复
HWND hWnd = NULL;
TCHAR szClassName[MAX_PATH] = {0};
hWnd =::FindWindow(_T("FxWnd"),NULL);
if(hWnd)
{
::GetClassName(hWnd,szClassName,MAX_PATH);
::MessageBox(NULL,szClassName,NULL,0);
}
Eleven 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
char *name=“”;
->
char name[]=“”;
你的程序没有崩溃就很不错了
[/Quote]
Sorry
char *name=“”;
->
char name[40]=“”;
jklbnm1122 2011-03-30
  • 打赏
  • 举报
回复
自己顶一下
Eleven 2011-03-30
  • 打赏
  • 举报
回复
你起码也要判断一下函数返回值吧,FindWindow()是否成功?hwd是否不为NULL?
Eleven 2011-03-30
  • 打赏
  • 举报
回复
char *name=“”;
->
char name[]=“”;
你的程序没有崩溃就很不错了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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