2010-11-27 102 views
0

我有下面的代码: -代码块VS VS2010

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) 
{ 
    char ay[256]={0};//HWND hwnd= GetForegroundWindow(); 
    if(GetClassName(hwnd,ay,256)) 
    { 
     char x[70]={0}; 
     GetWindowText(hwnd,x,70); 
     if(IsWindowVisible(hwnd)) 
     { 
      // CaptureAnImage(hwNd,hwnd); 
      HINSTANCE hins= (HINSTANCE) GetWindowLong(hwnd,GWL_HINSTANCE); 
      WNDCLASSEX lpwcx; 
      GetClassInfoEx(hins,ay,&lpwcx); 

      if (MessageBox(0, 
          strcat(strcat(x, "\r\n"), lpwcx.lpszClassName), 
          "Info", 0x06L) == IDTRYAGAIN) 
      { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

void cstm() 
{ 
    EnumWindows(EnumWindowsProc,0); 
} 

这运行正常的代码块(用VS 2010编译器(CL)),但VS2010给人损坏lpwcx值,我曾尝试统一以及Ascii来解决这个问题,但在 没有好结果。第一个lpwcx是正确的,但是后来他们返回没有找到的类(1411),尽管灵敏度和类名是正确的。

请帮忙。

回答

0

在调用任何API函数之前,请始终填写数据块的cbSize成员。他们中许多人依靠这个值就知道他们应该填写其数据结构的版本。

+0

我不能在wndclass中找到cbsize它的唯一cbwndextra和cbclsextra那里 – user522453 2010-11-27 18:50:39

1
strcat(strcat(x, "\r\n"), lpwcx.lpszClassName), 

的可能性,这将溢出X缓冲和跺脚一些局部变量的值,比如* lpwcx”如果你不想使用strcat_s(),那么至少使它变大。是的,初始化lpwcx.cbSize