APIVIEWER可以用来帮助生成API的声明,直接拷贝到程序里,挺方便的。我用的是APIVIEWER 2004 VERSION 3.10使用中有两个问题(1)为什么有的类型声明找不到啊?比如我要找NMTREEVIEW就没有,却能找到NMLISTVIEW(2)有的常数有两个,一个以A结尾,一个以W结尾,这有什么区别?分别该在什么情况下用?比如TVN_SELCHANGED就有两个
Public Const TVN_SELCHANGEDA As Long = (TVN_FIRST-2)
Public Const TVN_SELCHANGEDW As Long = (TVN_FIRST-51)

解决方案 »

  1.   

    第二个问题,给你个链接,有点难
    看星星很方便 - - http://topic.csdn.net/u/20081223/18/9E5CEC7B-5025-460A-BA30-2BC85704BEB8.html
      

  2.   

    本来就有一些API不在APIVIEWER,这主要是版本问题,windows版本高了,就新加一些API,APIVIEWER又不会更新
      

  3.   

    第一个问题:同意楼上的。
    第二个问题:实际上,有很多Windows API常数就是一字之差,其用途不一样,含义不一样,没什么奇怪的。只不过用于不同的API罢了。比如:SendMessage ,实际上在user32.dll中真正的函数名是SendMessageA,那么相应的API常数就不能用后缀带有W的,而后缀带有W的API函数及API常数一般来说用于服务器版操作系统,只是一个比喻,不太恰当,想表达这个意思!欢迎批评指正!
      

  4.   

    那你们的API声明都是从哪里找的?哪里能找到最全的?
      

  5.   

    WINDOWS源码里你要找什么都能找到
      

  6.   

    操作字符串的API会碰到第二个问题。在声明这样的API时,会指定字符集,每个含有字符串的API同时有两个版本:即ANSI,Unicode。尾部带A的API是ANSI版本,带W的API是Unicode版本。
    例如:SetWindowTextA,是ANSI函数:WINUSERAPI BOOL WINAPI SetWindowTextA(HWND hWnd, LPCSTR lpString);
    在声明时必须用Alias子句:
    Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long而SetWindowTextW,是Unicode函数:WINUSERAPI BOOL WINAPI SetWindowTextW(HWND hWnd, LPCWSTR lpString); 
    必须这样声明:
    Private Declare Function SetWindowText Lib "user32.dll" Alias "SetWindowTextW" (ByVal hwnd As Long, ByVal lpString As Long) As Long