正确的贴子如下:
我在学习Windows的窗口类时看到下面这样一段话:/**************************************************************/
GetClassInfoEx 仅能在呼叫此函式的那个行程中取得一个已注册的窗口类别的
相关信息。举个例,如果你想利用GetClassInfoEx 取得 “NOTEPAD” 类别的
相关信息,会导致失败,因为呼叫GetClassInfoEx 函式的人行程)并不是
NOTEPAD 。
/*************************************************************/从GetClassInfoEx的原型 声明可以知道:
BOOL GetClassInfoEx(HINSTANCE hinst, LPCSTR lpszClassName, PWNDCLASSEX pwc);
只要给定程序的运行实例主可以知道指定类的情况了。
如果在“记事本”程序运行时,通过获取这个“记事本”程序的窗口句柄,得到其实例句柄,赋给hinst,再将“NOTEPAD”给lpszClassName
,那么不就可以得到pwc这个窗口类结构的情况了吗?不知书上的这句话是什么意思? 

解决方案 »

  1.   

    就是不能跨进程的意思,hInst == 0x00400000 (win9x下)
    每个进程有自己的2G空间"notepad"类只在自己的进程空间中存在,不象"button"(是一个Global class),所以在你自己的进程空间中没有notepad类。
    可以用插入Dll方法得到,(具体见Advanced windows)
      

  2.   

    那意思是不是说,就不能得到其他窗口类的信息了???
    可是SPY++却可以做到这一点,为什么?
    继续讨论。
      

  3.   

    那意思是不是说,就不能得到其他窗口类的信息了???
    可是SPY++却可以做到这一点,为什么?
    继续讨论。
      

  4.   

    GetClassInfoEx(HINSTANCE hinst, LPCSTR lpszClassName, PWNDCLASSEX pwc)只能取得用 RegisterClassEx注册过的类的信息!而行程&#12695没有注册,所以取不到
      

  5.   

    我们可以使用来FindWindow找到窗口的句柄,之后可以使用WindowsX.h中的宏
    GetWindowInstance得到窗口的实例,那么只要指定你想要看到的类lpszClassName就可以得到窗口类的属性了吗?
    与跨进程根本没有关系。
    可是看上面的话的意思,却是不能实现。
    那么,是否进程之间全部独立,只有靠插入DLL才能实现。
    疑惑多多??????
      

  6.   

    照ju_feng这么说,记事本的窗口类就不是通过RegisterClassEx得来的,那我就不明白了,小小的记事本还要通过特殊的方法来注册窗口类吗?
      

  7.   

    不是没有注册,而是如果如果不是global atom,则只能取得小于0xC000的lpszclassname
      

  8.   

    那请问,是不是注册窗口类时的原子值是存放在Process atom中,而不是System Global atom 中呢?
    可是我知道的是,系统中有三个atom table.
    一个是process local atom table
    一个是system local atom table
    还有一个就是system global atom table。
    我们的窗口类其原子值究竟在哪个atom表中???
    请赐教!
      

  9.   

    没错呀!!!
    我看MSDN上也讲得很明白,hInst只要是注册类的实例句柄就行,
    我在调用GetClassInfoEx时使用的非本实例hinstance,而是通过
    FindWindows 和 GetWindowInstance得到的hinstance。
    难道有问题吗?
      

  10.   

    在系统中只有各个程序的资源(诸如icon dialog之类)存放在global table中(notepad程序存放在system local atom table
    中吧)但还要满足lpszclass的条件啊
      

  11.   

    下面是我写的代码,请大侠们分析一下:
    HWND hwndFind;
    HINSTANCE hinstFind;
    WNDCLASSEX wcex;
    hwndFind = WindowFromPoint(pt);
    hinstFind = GetWindowInstance(hwndFind);
    GetClassInfoEx(hinstFind,TEXT("NOTEPAD"),&wcex);
    请问wcex结构中是否能得到记事本窗口类的详细资讯。
      

  12.   

    GetClassInfoEx只能取得呼叫它的本进程已注册的视窗类别的信息
    你用GetClassWord/GetClassLong吧
      

  13.   

    其实我已明白大家的意思,只是既然从程序的健壮性考虑,应该禁止跨进程的操作,但为何GetClassInfoEx不行,而GetClassLong就可以呢?这不是自相矛盾吗?
    一点想法,不明白????