解决方案 »
- 求CreateProcess实例源代码!谢谢
- 关于VB和SQL数据库日期查询的方法 紧急求救
- 关于动态添加控件数组如何取添加的控件
- 将文本框内的数据读到文本文件中,并又能将文本文件中的数据读到文本框中?
- 关于MDI窗口的问题!?
- 如何打印WebBrowser中的内容???
- ☆☆☆☆☆请问各位高手:怎样在我的程序里调用*.chm文件?要得很急,请帮忙!
- 注册表的问题,请大家帮忙!
- 调用api函数getfreediskspace的返回值问题
- vb的inet控件,在什么地方可以判断ip是正确错误?
- 为何文本框的keypress事件中,有的键触发(如退格键),有的键就不触发呢(如删除键del)?
- 请大侠帮忙看看以下DLL 函数
看样子,你的目的是修改目标窗口的标题是吧。的确是发送 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