FindWindow,SendMessage问题(急)

zhangqiushui 2007-01-05 11:18:00
问题是这样的:
我在vc中想传一个值给vb写的应用程序中的一个文本框(TextBox)
在vc中,我先获得这个vb写的应用程序(测试)的句柄
HWND hWnd = FindWindow(NULL, "测试");
再用SendMessage给这个句柄发送消息
现在问题是,SendMessage如何设置参数,以及vb中如何获取传过来的值。
谢谢了!
...全文
651 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
WuYunpeng 2007-03-11
  • 打赏
  • 举报
回复
那就用VC做一个DLL,里面做一个事件过程,然后用VB调用
zhangqiushui 2007-01-07
  • 打赏
  • 举报
回复
自己搞定了,不过还是要谢谢各位
  • 打赏
  • 举报
回复
直接在VB中用findwindow好了
一笑拔剑 2007-01-06
  • 打赏
  • 举报
回复
如果需要获得textbox的hwnd
需要使用findwindowEx
chenhui530 2007-01-06
  • 打赏
  • 举报
回复
sendmessage hwnd,WM_SETTEXT,0,byval "string"
zhangqiushui 2007-01-06
  • 打赏
  • 举报
回复
WuYunpeng(白日),
我是想vc得到一个消息后,立即通知vb,用文件的话,怎么通知vb的应用程序去取这个内容?
WuYunpeng 2007-01-06
  • 打赏
  • 举报
回复
用文件或注册表比较简单
zhangqiushui 2007-01-06
  • 打赏
  • 举报
回复
我现在换成WM_COPYDATA来做,可是又出现了问题,情况如下:
vb:
Private Sub Form_Load()
gHW = Me.hwnd
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
//模块中
Public Const WM_COPYDATA = &H4A
Public Const GWL_WNDPROC = -4

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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) As Long

Global lpPrevWndProc As Long
Global gHW As Long

Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_COPYDATA
MsgBox "ok"
MsgBox lParam
WindowProc = 0
Exit Function
End Select
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function

vc:
//先获取窗口句柄
HWND hWnd = ::FindWindow(NULL, "车牌识别测试");
//在获取TextBox句柄
HWND hWndTextBox = ::FindWindowEx(hWnd, NULL, "ThunderRT6TextBox", NULL);
//::SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)m_strPlateNum);
if (::IsWindow(hWndTextBox))
{
//::SendMessage(hWndTextBox, WM_SETTEXT, 0, (LPARAM)m_strPlateNum.GetBuffer());
::SendMessage(hWnd, WM_COPYDATA, 0, (LPARAM)m_strPlateNum.GetBuffer());
}
else
{
::MessageBox(NULL, "找不到窗口", "识别", 0);
}
可是不会弹出对话框啊?
不知道问题出在哪?
zhangqiushui 2007-01-06
  • 打赏
  • 举报
回复
另外,我是在vc中来获取vb中的句柄的
zhangqiushui 2007-01-06
  • 打赏
  • 举报
回复
谢谢各位,findwindowEx可以获取textbox的句柄,可是如何获取指定textbox的句柄,就是说假如有两个textbox,我如何获取第二个的句柄?
zhangqiushui 2007-01-05
  • 打赏
  • 举报
回复
kmlxk(xiaoKKKK)你好,你参数中的hwnd是TextBox的吧,但是那个FindWindow只能获取窗口的啊
kmlxk0 2007-01-05
  • 打赏
  • 举报
回复
sendmessage hwnd,WM_SETTEXT,0,"string"

好像VB可以在Text1_Change事件里面得到通知

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧