VB虾们,我给100分!!帮忙!怎样将字符空移到指定的地方(当然,指定的地方一定要可以输入字符,比如文本狂)

WangTiger 2000-08-11 11:23:00
是这样的,比如说,现在您的屏幕上有一个普通的含有文本框的exe程序(或者网页)之类的东西,怎样利用一个VB应用程序把一串字符写上(空移)到那个文本框里呢?(当然,前提是,我们已经知道了文本框的位置,或者说是可以输入字符的位置)

请教!!




不要告诉我没有办法!
...全文
653 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
dirotac 2001-01-17
  • 打赏
  • 举报
回复
一定是骇客工具的零部件
WangTiger 2001-01-17
  • 打赏
  • 举报
回复
找空间!
WangTiger 2000-08-25
  • 打赏
  • 举报
回复
主你健康!
shines77 2000-08-25
  • 打赏
  • 举报
回复
我在,最近两天生病,我们最好不要把这当聊天室,我的OICQ是: 413603 郭子。

你的问题都可以解决的,不过你也不能太依靠别人啊,你可以搜索以下CSDN的,模拟Mouse Click的都有,还有,就是其实我的那个程序可以解决你做聊天室辅助软件的需要,只是你自己不知道好好利用罢了。
WangTiger 2000-08-24
  • 打赏
  • 举报
回复
能不能模拟mouse的click 动作????
WangTiger 2000-08-24
  • 打赏
  • 举报
回复
shines!!
你 还在吗?????????????????
WangTiger 2000-08-22
  • 打赏
  • 举报
回复
想做一个通用的聊天辅助程序,对于软件聊天,当然很好弄,比如mIRC,但是对于网爷聊天事就不D了~
对了,麻烦您看看能不能对java聊天室发!
WangTiger 2000-08-22
  • 打赏
  • 举报
回复
这两天重装系统,编程工具还没有装。正在研究smtp服务器。。。
shines77 2000-08-21
  • 打赏
  • 举报
回复
Maxwell: 你的方法我试过了,不行,因为IE的窗口下的文本框不是他的子控件(不是常规的,常规方法检测不出其句柄,就是说无效),好像很多软件对IE的处理都是很难的,不知哪位高手知道,我也知道肯定可以,但是要用到底层的技术Dll处理16位和32位的什么的截取什么的,还要用到汇编的,我也不会,有兴趣的朋友参考一下:http://doghousepages.lycos.com/computers/gtth/images/opencode.zip (VC++源码),unzip密码是: gtth 。
mango_boy:实在是对不起,不是我不想帮你:),我也很菜,能力有限,实在没法子你就暂时用着先确定焦点才向IE文本框发字符了,哦,搞了这么久,还不知道你想做什么呢,是不是真的要向IE发字符啊,如果不是就免了,懒得在这讨论了,留给后人吧:)。。。,真的好难哎, 嗨,学不精,业不。。。
如果谁要新的遍历的代码的请mail我,wokss@yeah.net,不过好像用处不大,学习学习倒还可以:))
shines77 2000-08-21
  • 打赏
  • 举报
回复
mango_boy: 不是我卖关子,我试过了,好像不行,遍历的代码是:

Private Sub GetHwnd(ByVal Dad As Long)

Dim SonHwnd As Long

SonHwnd = GetWindow(Dad, GW_CHILD)

While SonHwnd <> 0
'Treat Hwnd
SubHwndText.Text = SubHwndText.Text + Trim(Str(SonHwnd)) + " "
GetHwnd (SonHwnd)
SonHwnd = GetWindow(SonHwnd, GW_HWNDNEXT)
Wend

End Sub
Maxwell 2000-08-21
  • 打赏
  • 举报
回复
用钩子,鼠标动时用WindowFromPoint得到窗口句柄,然后用ChildWindowFromPoint得到控件句柄,判断是否文本框。可能是上面两个名字,至少差不多。
WangTiger 2000-08-21
  • 打赏
  • 举报
回复
你就别卖关子啦!要大家来求你你才肯说啊!
说吧!洗耳恭听!
shines77 2000-08-20
  • 打赏
  • 举报
回复
sorry啊,man_go,昨晚帖子发不上来。

方位,?不行的,Windows没有对方位发送字符这么一说:)只有句柄,句柄是表示控件对象的唯一标志,你只有知道了句柄,才能对其操作或控制,你的方法肯定不行,我试试我的方法!
我的方法这不是高见而是低见,其实也许还有其他办法,也许只有这么一种办法,或许还可以用其他不同的操作手法,不过一般控制外部程序的东西一般是比较难的,比如屏幕取词。。。我来试试吧。
WangTiger 2000-08-19
  • 打赏
  • 举报
回复
shines,请介绍您的高见!

请您看看我的想法是否可行,我不知道怎样做,但我相信是可以实现的。
首先还是一样的,用拖拽的方法找到目标框的方位,然后通过方位,把字符传送过去。
shines77 2000-08-19
  • 打赏
  • 举报
回复
supercow: 你的想法是不对的,因为IE文本框的句柄是用 WindowFromPointXY()检测不到的,所以不能 SetFocus设置的,况且是外部程序的控件,你以为是Command1.SetFocus啊,呵呵,有那么简单,我们也不必在这。。。嘿嘿:) 不过肯定有办法解决的,如果大家实在想不出就只好用我的方法了:))
supercow 2000-08-19
  • 打赏
  • 举报
回复
用SetFocus方法吧。
WangTiger 2000-08-19
  • 打赏
  • 举报
回复
shines!源程序我试过了,很好,基本解决了。但是还有很大的弊端,不能检测网页的句柄!只能检测框价,文本框就不可以。这个问题可以解决吗?????谢谢。。。
我侃侃你的ZIP
shines77 2000-08-19
  • 打赏
  • 举报
回复
mango_boy: 芒果boy?? 你还在吧。的确,对于IE来说只能检测到IE的浏览器主窗口的句柄,子控件是检测不到的,但是用 SendKeys()有个好处,就是当你把焦点设置在IE文本框的时候,再按“发送”是可以把字符串传递过去的,这是 SendMessage()根本做不到的,因为 SendMessage()是对句柄操作的,句柄又只能检测到IE窗口。

另外,对于一般的文本框,不用设置焦点就可以输入文字了,但对于IE文本框一定要先设定焦点才能发送(faint),没办法,可以解决的办法是对于IE窗口进行遍历,遍历所有的子控件,然后找出其中的文本框,并且球出它的RECT屏幕区域,然后在通过检测鼠标的坐标位置,如二者符合,则表明是要输入的文本框控件,找出其hwnd句柄,发送传递文本,一切OK。

按常理来说,遍历子控件是可行的,就是不知道IE是否也行,不过我想应该OK吧,因为这是所有窗口的共同特性,除非它不是Windows窗口,否则不可能不行,以上所提到的技术,技术上我没有问题(遍历与检测句柄),只是不知道这样做行不行,哪位高手还有没有更好的办法,小弟不才,请大家一同商讨研究。

郭子 2000.8.19
shines77 2000-08-18
  • 打赏
  • 举报
回复
最后,如果那位需要源代码的,我已经给mango_boy寄了一份,其他有兴趣的朋友
请到 http://sunshine.bodachina.net/mydown/WndPickText.zip 下载。
程序内附详细说明及Demo。
shines77 2000-08-18
  • 打赏
  • 举报
回复
给Larky这么一说,我还真不知道真正的意图,你要用他来做什么,得到什么结果。不过我段程序确实能实现你的想法,包括IE文本框也能行得通,
源程序如下:

Option Explicit
'
' Win32 API Declarations
'
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
'
' Win32 API Structures
'
Private Type POINTAPI
x As Long
y As Long
End Type
'
' Form-level member variables
'
Private m_hWnd As Long
Private m_Picking As Boolean

Private Sub Command1_Click()
'
' Attempt to paste something into
' selected window.
'
If m_hWnd Then
Clipboard.Clear
Clipboard.SetText Text1.Text, vbCFText
Call SetForegroundWindow(m_hWnd)
SendKeys "^v", True
End If
End Sub

Private Sub Form_Load()
'
' Assign dragging pointer
'
Picture1.Picture = Picture1.DragIcon
Me.MouseIcon = Picture1.DragIcon
End Sub

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
'
' Clear picture and turn on dragging mousepointer.
'
Me.MousePointer = vbCustom
Set Picture1.Picture = Nothing
'
' Remember that we're currently picking a window.
'
m_Picking = True
'
' Capture all mousemovements from this point until
' the user releases the mouse button.
'
Call SetCapture(Picture1.hwnd)
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Static pt As POINTAPI
Static hwnd As Long
'
' If user is picking a window, check window is
' under the cursor whenever it moves. If it's
' a different window than previously, update the
' display to that effect.
'
If m_Picking Then
Call GetCursorPos(pt)
hwnd = WindowFromPointXY(pt.x, pt.y)
If hwnd <> m_hWnd Then
m_hWnd = hwnd
Me.Caption = "窗口或控件的句柄:" + Hex(m_hWnd)
End If
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
'
' We're done picking now
'
m_Picking = False
'
' Restore dragging icon to picture box,
' and return mousepointer to normal.
'
Picture1.Picture = Picture1.DragIcon
Me.MousePointer = vbDefault
'
' Don't need to be notified anymore.
'
Call ReleaseCapture
'
' The chosen window is already stored in m_hWnd!
'
MsgBox "你选择的窗口或控件句柄是: " & vbCrLf & " " & Hex(m_hWnd) _
& vbCrLf & vbCrLf & "请按“发送文本”按钮发送!", vbInformation
End Sub
加载更多回复(24)

7,762

社区成员

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

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