VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1397|回复: 12

FindWindow,SendMessage问题(急)

[复制链接]

1

主题

7

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-9-28 21:30:02 | 显示全部楼层 |阅读模式
问题是这样的:
我在vc中想传一个值给vb写的应用程序中的一个文本框(TextBox)
在vc中,我先获得这个vb写的应用程序(测试)的句柄
HWND hWnd = FindWindow(NULL, "测试");
再用SendMessage给这个句柄发送消息
现在问题是,SendMessage如何设置参数,以及vb中如何获取传过来的值。
谢谢了!
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-9-28 21:45:01 | 显示全部楼层
sendmessage hwnd,WM_SETTEXT,0,"string"

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

使用道具 举报

1

主题

7

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-9-28 23:15:01 | 显示全部楼层
minlichao你好,你参数中的hwnd是TextBox的吧,但是那个FindWindow只能获取窗口的啊
回复

使用道具 举报

0

主题

14

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-9-29 10:45:01 | 显示全部楼层
直接在VB中用findwindow好了
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-9-29 14:45:02 | 显示全部楼层
sendmessage hwnd,WM_SETTEXT,0,byval "string"
回复

使用道具 举报

1

主题

11

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-9-29 23:45:01 | 显示全部楼层
如果需要获得textbox的hwnd
需要使用findwindowEx
回复

使用道具 举报

1

主题

7

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-9-30 10:45:01 | 显示全部楼层
谢谢各位,findwindowEx可以获取textbox的句柄,可是如何获取指定textbox的句柄,就是说假如有两个textbox,我如何获取第二个的句柄?
回复

使用道具 举报

1

主题

7

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-9-30 11:00:01 | 显示全部楼层
另外,我是在vc中来获取vb中的句柄的
回复

使用道具 举报

1

主题

7

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-9-30 12:15:01 | 显示全部楼层
我现在换成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);
                }
可是不会弹出对话框啊?
不知道问题出在哪?
回复

使用道具 举报

0

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-9-30 12:30:01 | 显示全部楼层
用文件或注册表比较简单
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表