+ -
当前位置:首页 → 问答吧 → VB,API函数中EM_REPLACESEL的纠结

VB,API函数中EM_REPLACESEL的纠结

时间:2011-07-26

来源:互联网

类似像小外挂的形式。我想清除某程序的某个文本框的值,再发送值

SendMessage a2, EM_REPLACESEL, 0, ByVal 发送内容
上面这句的意思是发送 内容,但我想发送前 先清除,什么语句?

-----------------------------------------------------------------

程序的句柄和预写入文本框的句柄我都获取到了,

文本框的内容也可以写入了,但是就是要累加上去啊,郁闷~

SendMessage a2, EM_REPLACESEL, 0, ByVal ttt '向该句柄(文本框)发送 ttt的值

假如:ttt="http://forum.csdn.net"

一直是http://forum.csdn.nethttp://forum.csdn.nethttp://forum.csdn.nethttp://forum.csdn.net......郁闷
我只要一个http://forum.csdn.net就够了,

楼下的,怎么办?改怎么办?

附上我的源码,方便大家查看
http://www.zjbtq.com/测试.rar

作者: cixihpf   发布时间: 2011-07-26

在那个帖子里已经给你回过了,两种办法,一种是用EM_REPLACESEL, 另一种是MW_SETTEXT
Replace方法如下
VB code

Option Explicit

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 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetActiveWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Const EM_REPLACESEL = &HC2
Private Const WM_SETTEXT = &HC

Dim ChildHwnd As Long       '记事本文本框的句柄
Dim NotepadHwnd As Long        '记事本的句柄
Dim i As Long

'改变记事本的标题

Private Sub Command1_Click()
' SendMessage(句柄, 消息, 0, ByVal 标题)
'Call SendMessage(NotepadHwnd, WM_SETTEXT, 0, ByVal "你好,标题!")
End Sub

'可把字符加到文件未尾
Private Sub Command2_Click()

'SetActiveWindow (NotepadHwnd)
SendMessage ChildHwnd, 7, 0, 0 '获取焦点
SendMessage ChildHwnd, 177, 0, -1 '选中

i = i + 1
SendMessage ChildHwnd, EM_REPLACESEL, 0, ByVal "你好,内容!" & i
End Sub

'用EM_REPLACESEL可以追加字符

Private Sub Form_Load()
Shell "notepad.exe", vbNormalFocus

NotepadHwnd = FindWindow("notepad", vbNullString)
'得到窗口类名为Edit的窗口句柄
ChildHwnd = FindWindowEx(NotepadHwnd, 0, "Edit", vbNullString)
End Sub

作者: BestBadGod   发布时间: 2011-07-26

今天的这个程序代码如下:
VB code

Private Sub Command1_Click()

  a1 = FindWindow("ThunderRT6FormDC", "Form1")   '检测是否有程序运行界面
  a2 = FindWindowEx(a1, 0, "ThunderRT6TextBox", vbNullString)  '获取该程序界面的Edit的句柄值
  
  SendMessage a2, 7, 0, 0 '获取焦点
  SendMessage a2, 177, 0, -1 '选中
  SendMessage a2, EM_REPLACESEL, 0, ByVal "http://www.163.com"
  Command1.Caption = "成功!"

'Timer1.Enabled = True
'Timer1.Interval = 3000
'Command1.Enabled = False
End Sub

Private Sub Form_Load()

hWnd1 = FindWindow("ThunderRT6FormDC", "Form1")

If hWnd1 = 0 Then
MsgBox "未运行!"
Unload Me
Exit Sub
End If
If hWnd1 <> 0 Then
'MsgBox "该游戏已经行!句柄:" & hWnd1
End If

End Sub

Private Sub Timer1_Timer()

  a1 = FindWindow("ThunderRT6FormDC", "Form1")   '检测是否有程序运行界面
  a2 = FindWindowEx(a1, 0, "ThunderRT6TextBox", vbNullString)  '获取该程序界面的Edit的句柄值
  
SendMessage a2, EM_REPLACESEL, 0, ByVal "http://www.163.com"
    Command1.Caption = "成功!"
End Sub

作者: BestBadGod   发布时间: 2011-07-26

不用timer 直接在Click里就可以了

作者: BestBadGod   发布时间: 2011-07-26

timer1还是要的,因为我随着时间我插入的网址是要改变的,你用获取焦点的方法不行,还是会追加。

作者: cixihpf   发布时间: 2011-07-26

引用 4 楼 cixihpf 的回复:
timer1还是要的,因为我随着时间我插入的网址是要改变的,你用获取焦点的方法不行,还是会追加。

我试了怎么没追加

作者: BestBadGod   发布时间: 2011-07-26