本帖最后由 amoting 于 2009-08-21 09:16:45 编辑

解决方案 »

  1.   

    你的代码乱糟糟的,当然达不到意想的效果了。
    看样子,你的目的是修改目标窗口的标题是吧。的确是发送 WM_SETTEXT 消息没错,但是参数乱套了,你总得按照 MSDN 的要求来吧。
    lParam 是你想要发送的新标题字串的地址。
    在VB中,关于字串传递给API的问题比较复杂。
    WM_SETTEXT 的 lParam 是个 LPCTSTR 类型的,就是说,字串是 ANSI 还是 Unicode 的取决于你调用的 API。
    VB 调用 API 全是 ANSI 版的,但是VB里的字串是 BSTR,是 Unicode 版的,这就麻烦了,需要做一些必要的转换。
    用到的武器是 StrConv()、Varptr()、Strptr(),具体可以参考相关资料。
    下面给出两套实现代码(hWnd是要修改的窗口句柄),尤其要注意 SendMessage 的声明,原理自己慢慢去研究吧。方案1:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
    Private Const WM_SETTEXT = &HCPrivate Sub Command1_Click()
       Dim s As String
       s = "Hello"
       Call SendMessage(hwnd, WM_SETTEXT, 0, s)
    End Sub方案2:
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const WM_SETTEXT = &HCPrivate Sub Command1_Click()
       Dim s As String
       s = "Hello"
       s = StrConv(s, vbFromUnicode)
       Call SendMessage(hwnd, WM_SETTEXT, 0, StrPtr(s))
    End Sub