VB程序员博客
04 10th, 2009
SendMessage的问题,热心人帮帮忙
易语言中是这样写的,现在要翻译成VB,希望高手帮我一下
SendMessage (框框句柄, 177, 0, “-1”)
SendMessage(框框句柄, 194, 1, “123”) '发送123到指定编辑框内
SendMessage (按钮句柄, 245, 0, “0”)'发送消息点击确定按钮
按照易语言就是这么写的 测试OK
用WM_SETTEXT=&HC 的话 在VB里测试没用
还有高招么 我只要实现
发送123到指定编辑框内
然后发送消息点击确定按钮
用postMessage或者sendMessage
sendMessage hwnd,194,1,"123"
hwnd是目标句柄.
O(∩_∩)O哈哈~解决了 冒昧再请教一下 194是什么意思 后面的1又是什么意思呢?
教你方法:
194是十六进制的C2.
VB里面的常量值一般是16进制来表示的,为&HC2.
按"=&HC2"这样的关键字搜索,得到了"
Private Const EM_REPLACESEL = &HC2
根据功能,EM_REPLACESEL消息是替换选中的文本.
至于wParam是啥意思,我找到了MSDN的说明,但真看不明白- -!
你E文好的话自己看看吧:
http://msdn.microsoft.com/en-us/library/bb761633(VS.85).aspx
04 8th, 2009
咋就不成功呢,发送了个DATACOPY消息(74#),不仅仅是lpdata.data没过来啊,消息根本就没过来。。咋个事?
顶顶
顶顶
handle是正确的……
首先给对方申请一段内存,然后在首地址写上代码
68 &hXXXXXXXX
68 0
68 7A
68 HANDLE
E8 SENDMESSAGE ADDRESS
C3
CC
00
……
其中&hXXXXXXXX是LPDATA数据的内存地址,LPDATA实际数据存放在申请的内存的后半部分。
我咋觉得我写的没问题啊,查看申请的内存的内容反汇编确实也是上面的内容啊
反顺序提供参数,非INTEGER类型使用指针,E8后面的相对地址计算……在测试其他API函数时,均没有问题,包括GETWINDOWTEXTA(W)等等啊
是不是这个……和消息循环有关啊
对了,偶用VISTA,U是俩心的,有啥关系吗?WRITEPROCESSMEMORY自动刷新缓存的,不用FLASH……啥的啥的,应该不是这个问题吧。。。因为其他的API用起来都么问题呀,等高手指教……
贴一个图,调用GETWINDOWTEXTW的调用
这段的代码是这样的:(.NET的代码)
Public Structure COPYDATASTRUCT
Public WindowHwnd As Integer
Public size As Integer
<MarshalAs(UnmanagedType.LPStr)> _
Public lpData As String
Shared Function ToByres(ByVal c As COPYDATASTRUCT) As Byte()
Dim ret(c.size + 7) As Byte
Array.Copy(System.BitConverter.GetBytes(c.WindowHwnd), 0, ret, 0, 4)
Array.Copy(System.BitConverter.GetBytes(c.size), 0, ret, 4, 4)
Dim sb() As Byte = System.Text.Encoding.ASCII.GetBytes(c.lpData)
Array.Copy(sb, 0, ret, 8, sb.Length)
Return ret
End Function
End Structure
Const WM_COPYDATA As Integer = &H4A
Dim send As RunRemoteAPI
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
send = New RunRemoteAPI(CInt(TextBox1.Text))
' Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Dim s(1023) As Byte
Dim a As Integer = send.CallRemoteAPIByName("user32", "getwindowtextw", True, New mFuncParam(Me.Handle.ToInt32), New mFuncParam(s), New mFuncParam(1024))
MsgBox(System.Text.Encoding.Unicode.GetString(send.RemoteBytesFromIndex(1)))
Dim c As New COPYDATASTRUCT
c.WindowHwnd = Me.Handle.ToInt32
c.lpData = "1234567890"
c.size = c.lpData.Length
Dim cb As Byte() = COPYDATASTRUCT.ToByres(c)
'Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
TextBox3.Text = Hex(send.CallRemoteAPIByName("User32", "SendMessageA", True, New mFuncParam(Me.Handle.ToInt32), New mFuncParam(WM_COPYDATA), New mFuncParam(0), New mFuncParam(cb)))
TextBox2.Text = Hex(send.BaseAddress)
Debug.Print("ok")
End Sub
接收消息的是这样的:
Protected Overrides Sub DefWndProc(ByRef m As System.Windows.Forms.Message)
Select Case m.Msg
Case WM_COPYDATA
Dim mystr As New COPYDATASTRUCT()
Dim mytype As Type = mystr.[GetType]()
mystr = DirectCast(m.GetLParam(mytype), COPYDATASTRUCT)
MsgBox(mystr.lpData)
Case Else
MyBase.DefWndProc(m)
End Select
End Sub
根本就没反应…………消息没过来。。。
学习
喂死它没玩过……- -!
不会(>_ <)帮顶
发送WM_COPYDATA消息不要在目标进程内分配内存,直接用本进程中的内存,系统会自动实现进程间的数据传递。
WM_COPYDATA是自动的吧,我是远线程让其他进程调用SENDMESSAGE,所以参数都在对方进程内存里是正确的啊。当我的进程收到WM_COPYDATA时,自动根据最后一个参数用READPROCESSMEMORY复制对方进程内存内容到我的进程吧。。。。。。
WM_COPYDATA是自动的吧,我是远线程让其他进程调用SENDMESSAGE,所以参数都在对方进程内存里是正确的啊。当我的进程收到WM_COPYDATA时,自动根据最后一个参数用READPROCESSMEMORY复制对方进程内存内容到我的进程吧。。。。。。
。。。。。。服了,一顿修改之后,发现,
1、使用&H40A等自定义消息,且不等待远线程退出,我的程序就能接受到消息……
2、使用&H40A等自定义消息,且等待远线程退出,那么我的程序就卡死在等待那里。
3、使用&h4A(WM_COPYDATA),等待远线程退出和不等待远线程退出,都不会接收到消息,而且等待函数立即返回……
关注一下
估计是因为用了SendMessage的问题,我找到篇文章说应该用PostMessage,文章里面说的虽然是钩子不是远程线程,但也是DLL向主程序发送数据,我想应该对楼主有点参考价值:http://hi.baidu.com/zhuzhenping/blog/item/3bf832fa7c981f9559ee90d8.html
发WM_COPYDATA消息不需要考虑跨进程的问题,当作是本进程内来处理。
我在写一个dll的时候,把时钟栏的消息全部截了发给远程进程,就用sendmessage,没有任何问题,而且很实在的实现了远程同步,虽然没有测试 WM_copydata,但我觉得不应该有问题吧?包括自定义消息都传递的很流畅
。。。。问题找到了,可还是没解决好,是WM_COPYDATA的结构COPYDATASTRUCT的定义问题,封装的时候也不知道.NET干TMD啥子了。。。。。。算了,改用DLL注入。。。。就写了这么几行汇编就快疯掉了,要全汇编,直接死了
我有个现成的代码,也是asm写的,要吗,需要的话给你
就是给dll注入然后给远程进程的控件子类话,把消息发到本地过程处理的代码
谢谢楼上好意。
昨天决定还是写DLL来完成这些任务了,无奈,只好拿VC++.NET2008来搞了10几个小时,终于搞定了,不熟练的语言用起来还就是别扭,不过还没有用汇编别扭就是了。
不过用DLL搞的时候也发生了同样问题,在请教达人之后发现VC++.NET的代码没问题,最后还是定位在lpData参数声明上,在GOOGLE上千搜万索找到一个鸟语网站,受到点化……问题解决。。。。
就是说LPSTR不是正道。。。。。
感谢各位支持,散分。
如题.
本人写了个QQ批量登录器(执行命令行方式登录的),结果用了不久就给人盗了Q币
显然命令行登录方式是不安全的,虽然命令行的密码是加密的不能破解,但木马可获取命令行参数在别处登录并盗取你的Q币
就想改为模拟键盘方式登录,但不着这样安不安全
用模拟键盘应该是安全的,用屏幕小键盘,很多是这样的,如银行软件,股票软件
现在用修改执行顺序的方式都能盗模拟键盘方式的QQ的,最号的办法就是让机器没有木马
现在用修改执行顺序的方式都能盗模拟键盘方式的QQ的,最号的办法就是让机器没有木马
模拟键盘和模拟键盘消息不一样哎 老兄..
lihonggen0你好:
我做一个程序是用于自动复制阿里旺旺聊天窗体的内容(是指实时显示聊天文字的那个窗体,不是文字输入框),我已经获得该聊天显示控件RichEdit20A的句柄,可是接下去写sendmessage()函数发消息EM_GETTEXTEX消息到那个RichEdit20A时,不明白sendmessage()函数在发送EM_GETTEXTEX消息时,wParam和lParam两个参数是代表什么意思?虽然看了很多资料还有愚钝不是很明白,查了google,baidu都查不到详细的说明和实例,那是相当郁闷,所以想求教下您,谢谢了!
还有网上找了很多资料,不过都是c或者c++的资料,里面有GETTEXTEX对象。在vb中怎么样才能用这个对象,要重新用一个结构体定义这个对象,还是引用哪个dll就OK,就可以正常使用GETTEXTEX这个对象呢?还有GETTEXTEX里面成员(cb、flags、codepage、lpDefaultChar、lpUsedDefChar)的值在sendmessage()函数发送EM_GETTEXTEX消息时各是什么意思?以下是网上找到的C++的代码:
TCHAR buf[200];
GETTEXTEX gt;
gt.cb=200;
gt.flags=GT_DEFAULT;
gt.codepage=CP_ACP;
gt.lpDefaultChar=NULL;
gt.lpUsedDefChar=NULL;
SendMessage(hEdit,EM_GETTEXTEX,(WPARAM)>,(LPARAM)buf);
红色标记的地方我就是看不懂什么意思?假设已知RichEdit20A句柄,程序复制RichEdit20A中的内容在vb中语句应该是怎么样的写法,最好能有实例,写出语句给我看下,谢谢了,希望你知道话能帮下忙!
Call SendMessage(ByVal RichTextBox1.hwnd, ByVal 1118&, ByVal VarPtr(gt), ByVal StrPtr(buf))
很感谢你帮助,能说明下上面一句中红色标记的地方是什么意思吗,1118&,我运行了上面代码,剪切板没有复制的内容,感觉这样的效果和buf=RichTextBox1.Text,然后msgbox buf是一样的。因为我复制内容后,还要粘贴到另一个程序的RichEdit20A的输入框中,所以剪切板要有复制的内容,或者不采用这种方法,也可以直接将buf中的内容直接通过sengmessage()发送到另一个程序的RichEdit20A的输入框中,也OK的,这点我自己先试试。主要还是不明白上面标记红色地方是什么意思“1118&”
常量EM_GETTEXTEX
你也可以先定义
const EM_GETTEXTEX = 1118&
然后使用EM_GETTEXTEX.
使用API,建议去查MSDN。
OK 谢谢啦,你的这个代码很好,简洁明了,问题已经解决了!
12 16th, 2008
是这样的 我要去点WebBrowser1 里的一个FLASH 现在是用mouse_event去点 这样影响了我电脑鼠标的使用
在网络上搜索到用SendMessage 或 PostMessage 发送点击测试下来都不能成功
首先得到窗体的 句柄 然后在查找到 WebBrowser1的句柄(WebBrowser1这个没有句柄 里面是Shell Embedding)
所以找到了 Shell Embedding 句柄后发送 SendMessage 或 PostMessage 去点击WebBrowser1 的坐标
下面已经得到了WebBrowser1 的句柄了 但是不知道怎么发送点击 希望有高手帮助
g_WindowHwnd = FindWindow(vbNullString, "Form3")
g_WindowHwnd = GetBrowserWindow(g_WindowHwnd)
Private Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
Dim RetVal As Long
Dim hwndPeer As Long
Dim ClassString As String * 256
hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Do While hwndPeer <> 0
hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Loop
GetBrowserWindow = hwndPeer
End Function
据说FLASH这样不行的~
是否没有消息处理机制?
是这样的 我要去点WebBrowser1 里的一个FLASH 现在是用mouse_event去点 这样影响了我电脑鼠标的使用
在网络上搜索到用SendMessage 或 PostMessage 发送点击测试下来都不能成功
首先得到窗体的 句柄 然后在查找到 WebBrowser1的句柄(WebBrowser1这个没有句柄 里面是Shell Embedding)
所以找到了 Shell Embedding 句柄后发送 SendMessage 或 PostMessage 去点击WebBrowser1 的坐标
下面已经得到了WebBrowser1 的句柄了 但是不知道怎么发送点击 希望有高手帮助
g_WindowHwnd = FindWindow(vbNullString, "Form3")
g_WindowHwnd = GetBrowserWindow(g_WindowHwnd)
Private Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
Dim RetVal As Long
Dim hwndPeer As Long
Dim ClassString As String * 256
hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Do While hwndPeer <> 0
hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Loop
GetBrowserWindow = hwndPeer
End Function
在WebBrowser1上用SendMessage触发网页程序或脚本过程不是很好。
最好你还是研究一下WebBrowser1对象本身的属性或方法来触发比较好。
如WebBrowser1.Document对象,就像在网页中使用VBScript控制Document对象一样
mouse_event很好用 但是一直影响我的鼠标 也就是我 控制鼠标点那个FLASH的时候 我的电脑就不能使用 鼠标都被霸占了…
不知道能不能用 SendMessage 或 PostMessage 去点 WebBrowser1的坐标
IE里大多数控件是无窗口的,用SendMessage有点困难。
你的问题重点不是WebBrowser,而是FLASH。
已经得到了句柄了 刚刚试了下PostMessage 不知道要怎么写 才可以点到
不过已经可以点到窗体了 因为我把鼠标放在 WebBrowser里选中个东西 然后执行 PostMessage 点击选中的没了
这说明已经能向 WebBrowser发送点击了 但是一直没点到 不知道为什么
得到句柄了
g_WindowHwnd = FindWindow(vbNullString, "Form3")
lngHwnd = FindWindowEx(g_WindowHwnd, 0, "Shell Embedding", vbNullString)
lngHwnd = FindWindowEx(lngHwnd, 0, "Shell DocObject View", vbNullString)
lngHwnd = FindWindowEx(lngHwnd, 0, "Internet Explorer_Server", vbNullString)
执行的 'PostMessage
PostMessage lngHwnd, WM_LBUTTONDOWN, 0, ByVal ™
Sleep 200
PostMessage lngHwnd, WM_LBUTTONUP, 0, ByVal ™
已经确定对 WebBrowser有作用 但是 就是点不到 谁能帮忙解决下
现在搞不清楚 PostMessage 如何发送点击才有效
谢谢大家我已经解决了 原来是我坐标 定位没做好
FLASH能点了 但是PIC不能点正在研究 因为我点PostMessage 不熟悉 估计是发送的点击不对
Call SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, ByVal mPoint)
Call SendMessage(hWnd, WM_LBUTTONUP, 0, ByVal mPoint)
能点到 flash了 能让flash上的游戏 动起来了
也能点text文本了 就是 图片点不了 不知道哪错了
12 16th, 2008
是这样的 我要去点WebBrowser1 里的一个FLASH 现在是用mouse_event去点 这样影响了我电脑鼠标的使用
在网络上搜索到用SendMessage 或 PostMessage 发送点击测试下来都不能成功
首先得到窗体的 句柄 然后在查找到 WebBrowser1的句柄(WebBrowser1这个没有句柄 里面是Shell Embedding)
所以找到了 Shell Embedding 句柄后发送 SendMessage 或 PostMessage 去点击WebBrowser1 的坐标
下面已经得到了WebBrowser1 的句柄了 但是不知道怎么发送点击 希望有高手帮助
g_WindowHwnd = FindWindow(vbNullString, "Form3")
g_WindowHwnd = GetBrowserWindow(g_WindowHwnd)
Private Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
Dim RetVal As Long
Dim hwndPeer As Long
Dim ClassString As String * 256
hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Do While hwndPeer <> 0
hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Loop
GetBrowserWindow = hwndPeer
End Function
据说FLASH这样不行的~
是否没有消息处理机制?
是这样的 我要去点WebBrowser1 里的一个FLASH 现在是用mouse_event去点 这样影响了我电脑鼠标的使用
在网络上搜索到用SendMessage 或 PostMessage 发送点击测试下来都不能成功
首先得到窗体的 句柄 然后在查找到 WebBrowser1的句柄(WebBrowser1这个没有句柄 里面是Shell Embedding)
所以找到了 Shell Embedding 句柄后发送 SendMessage 或 PostMessage 去点击WebBrowser1 的坐标
下面已经得到了WebBrowser1 的句柄了 但是不知道怎么发送点击 希望有高手帮助
g_WindowHwnd = FindWindow(vbNullString, "Form3")
g_WindowHwnd = GetBrowserWindow(g_WindowHwnd)
Private Function GetBrowserWindow(hwndBrowserContainer As Long) As Long
Dim RetVal As Long
Dim hwndPeer As Long
Dim ClassString As String * 256
hwndPeer = GetWindow(hwndBrowserContainer, GW_CHILD)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Do While hwndPeer <> 0
hwndPeer = GetWindow(hwndPeer, GW_HWNDNEXT)
RetVal = GetClassName(hwndPeer, ClassString, 256)
If InStr(ClassString, "Shell Embedding") <> 0 Then
List1.AddItem Str(hwndPeer) & "|" & ClassString
End If
Loop
GetBrowserWindow = hwndPeer
End Function
在WebBrowser1上用SendMessage触发网页程序或脚本过程不是很好。
最好你还是研究一下WebBrowser1对象本身的属性或方法来触发比较好。
如WebBrowser1.Document对象,就像在网页中使用VBScript控制Document对象一样
mouse_event很好用 但是一直影响我的鼠标 也就是我 控制鼠标点那个FLASH的时候 我的电脑就不能使用 鼠标都被霸占了…
不知道能不能用 SendMessage 或 PostMessage 去点 WebBrowser1的坐标
IE里大多数控件是无窗口的,用SendMessage有点困难。
你的问题重点不是WebBrowser,而是FLASH。
已经得到了句柄了 刚刚试了下PostMessage 不知道要怎么写 才可以点到
不过已经可以点到窗体了 因为我把鼠标放在 WebBrowser里选中个东西 然后执行 PostMessage 点击选中的没了
这说明已经能向 WebBrowser发送点击了 但是一直没点到 不知道为什么
得到句柄了
g_WindowHwnd = FindWindow(vbNullString, "Form3")
lngHwnd = FindWindowEx(g_WindowHwnd, 0, "Shell Embedding", vbNullString)
lngHwnd = FindWindowEx(lngHwnd, 0, "Shell DocObject View", vbNullString)
lngHwnd = FindWindowEx(lngHwnd, 0, "Internet Explorer_Server", vbNullString)
执行的 'PostMessage
PostMessage lngHwnd, WM_LBUTTONDOWN, 0, ByVal ™
Sleep 200
PostMessage lngHwnd, WM_LBUTTONUP, 0, ByVal ™
已经确定对 WebBrowser有作用 但是 就是点不到 谁能帮忙解决下
现在搞不清楚 PostMessage 如何发送点击才有效
谢谢大家我已经解决了 原来是我坐标 定位没做好
FLASH能点了 但是PIC不能点正在研究 因为我点PostMessage 不熟悉 估计是发送的点击不对
Call SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, ByVal mPoint)
Call SendMessage(hWnd, WM_LBUTTONUP, 0, ByVal mPoint)
能点到 flash了 能让flash上的游戏 动起来了
也能点text文本了 就是 图片点不了 不知道哪错了
11 4th, 2008
请教大家VB中sendmessage 如何发送坐标消息
我相单击写字板中工具栏中 "保存" 如下代码,问题在哪?
模块代码:
Option Explicit
Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const WM_LBUTTONDOWN = &H201
Public Const MK_LBUTTON = &H1
Public Const WM_LBUTTONUP = &H202
Public Const WM_SETTEXT = &HC
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Public Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Public Const BM_CLICK = &HF5
'从两个 Integers 创建一个 Long 值
Function MakeDWord(LoWord As Integer, HiWord As Integer) As Long
MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function
窗口代码:(只有一个command1)
Dim sss As RECT
Dim b As Long, a As Long, c As Long, d As Long
Dim nMousePosition As Long
b = FindWindow(vbNullString, "文档 - 写字板")
If b = 0 Then
MsgBox "没打开写字板"
End If
c = GetDlgItem(b, 59419)
d = GetDlgItem(c, 59392)
If d = 0 Then
b = FindWindow(vbNullString, "标准型")
c = GetDlgItem(b, 59423)
d = GetDlgItem(c, 59392)
End If
GetWindowRect d, sss '这么一步都是成功的,都能得到工具栏的位址信息
Let nMousePosition = MakeDWord(sss.Top + 35, sss.Left + 65)
Call SendMessage(d, WM_LBUTTONDOWN, MK_LBUTTON, ByVal nMousePosition)
End Sub
程序运行后,坐标位置好像不对,按键下去后也没上来,工具栏成移动状态
请大家帮忙啊,谢谢了
终于想明白了,原来是坐标搞错了
自己给自己奖励50元吧
呵呵,是坐标搞错了
mark
SendMessage QuHwnd, CB_SELECTSTRING, -1, ByVal Idx
SendMessage QuHwnd, CB_SETCURSEL, 3, 0
句柄我获取对的
用这两种方法 对那个程序都有问题 我截图给大家看 说不太清楚
选中了 但是没有显示出来 在下拉菜单中是选中状态 但是外面现实的还是原来的
我的MSN:bobo.dandan@gmail.com 希望懂这方面的人加我共同讨论 共同学习
发送SHOWDROPDOWN消息
SendMessage Me.cbData.hwnd, CB_SHOWDROPDOWN, 1, 0&
国人写的 Unicode ucComboBoxEx ,很好的解决了Unicode问题。
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=66273&lngWId=1
里面有你所要的关于sendmessage几乎所有的信息。
chenhui530 你发的是展开下拉菜单 我是要选中啊 这样不行吧 就发送着一个消息么?
VBAdvisor 这个问题不是Unicode的问题 你看看图片
这个 好像是原来那个程序设计的问题 有什么办法啊~?
国人写的 Unicode ucComboBoxEx ,里面有你所要的关于sendmessage几乎所有的信息.
你看看人家是怎样运用sendmessage。
你那个是标准的ComboBox吗,
我用VB做了个exe,然后在VB开发环境中控制这个exe上的ComboBox的选择是可以做到的啊
SendMessage QuHwnd, CB_SELECTSTRING, -1, ByVal Idx
SendMessage QuHwnd, CB_SETCURSEL, 3, 0
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CB_SETCURSEL = &H14E
Private Sub Command1_Click()
SendMessage QuHwnd, CB_SETCURSEL, NewIndex, 3& 'NewIndex从0开始,3就是说想选中第2项,
End Sub
'常数 CB_SETCURSEL 就是 combo的 listindex属性
……………………………
你那个是标准的ComboBox吗,
我用VB做了个exe,然后在VB开发环境中控制这个exe上的ComboBox的选择是可以做到的啊
———————
那个我用SPY++看了 CLASS是 COMBOBOX但是就是有问题 我也用VB的COMBOBOX测试过了 是可以的 但是那个程序 我没有源代码 就是有问题 但是页有反应的 你看看我163相册里面的图片 我选中一个 然后 下拉以后 应该是选中那个被选中 但是我用那个程序发送消息给他以后 变成我发送消息那个在下拉菜单中被选中 但是选项默认显示项目还是原来选中的那个 我都解释不太清楚 谁有解决方案 加我MSN哦 还有就是 工具条 里面有个“按钮” 但是没有句柄 怎么向他发送点击事件呢?
reply off line
VBAdvisor
什么意思啊? 问题还是没有解决 不是标准的COMBOBOX是不是就没有办法咯啊 有没有软件来获取WINDOWS的消息啊 找到那个消息然后发送行不行啊?