ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 10297|回复: 45

[求助] 求教一个可能与VBA无关的语言或者程序方面的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-3-21 12:02 | 显示全部楼层 |阅读模式
我想实现的目的是,能够写一个程序(不知道用VBA能否实现,如果VBA不行,需要哪种其它的语言?),实现自动反复用鼠标在屏幕上点击一个(或者交替点击两个)指定的按钮的功能。我这个问题来自于证券帐户的提前委托下单的需要。比如我想在第二天买入一个股票,这个股票非常不好买,我必须保证委托号排在第一个,如果手工操作,我就要在前一天交割结束前反复下单(交割结束前是不能成功的),直到正好赶上交割结束时的时刻,我的下单操作正好成功。这样就能保证我在最早的时间上成功下单。但是手工反复操作太费力,可能要连续用鼠标按上千次。我想能否用一个程序来实现这个自动操作?
未命名111.rar (8.24 KB, 下载次数: 28)

未命名222.rar (2.69 KB, 下载次数: 17)

比如上面两个图中,我要实现的目的就是通过程序反复交替地分别点击两个图中的“确定”按钮。
这个求助或许超出了VBA的范畴,但我确实需要这个,希望精通程序的老师能指点一下。如果过于复杂,无法具体说清楚,告诉我需要用什么语言?我到哪里去学?
谢谢!

TA的精华主题

TA的得分主题

发表于 2010-3-21 12:16 | 显示全部楼层
这个不是VB所擅长 的。
楼主的功能很简单的,autoit这个脚本语言就行了

TA的精华主题

TA的得分主题

发表于 2010-3-21 12:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
autoit上手还是很容易 的

建议学习一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-21 12:27 | 显示全部楼层
原帖由 wudixin96 于 2010-3-21 12:16 发表
这个不是VB所擅长 的。
楼主的功能很简单的,autoit这个脚本语言就行了


谢谢这位朋友的解答。能告诉我“autoit”是什么语言吗?我应该怎样学?如果我只想实现我的这一个功能,能在较短的时间内学会吗?
另外,我刚才百度了一下,网上说有一种“键盘精灵”能实现这个功能,但我不太敢贸然下载,因为我不知道那些程序是否对我的信息安全有危险?

TA的精华主题

TA的得分主题

发表于 2010-3-21 12:31 | 显示全部楼层
autoit本来就是为了自动化而产生的一种脚本语言

百度一下就知道了。楼主的要求对autoit来说,很容易实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-21 12:42 | 显示全部楼层
原帖由 wudixin96 于 2010-3-21 12:31 发表
autoit本来就是为了自动化而产生的一种脚本语言

百度一下就知道了。楼主的要求对autoit来说,很容易实现

谢谢!刚才百度了一下,准备学一下。不过对于我来讲,好像不是太容易,我的基础太差了,基本上是一个电脑盲。要是能有一个像EXCEL论坛这样好的有如此多技精德高的老师的"autoit论坛"就好了。

TA的精华主题

TA的得分主题

发表于 2010-3-21 12:46 | 显示全部楼层
有的,这样的论坛,一样高手如云,名字似乎叫autoit中文论坛,好久没去

语法与VB很相近 的。

TA的精华主题

TA的得分主题

发表于 2010-3-21 15:43 | 显示全部楼层
原来写过一个开心网的作弊软件,不过是用vb写的,现修改了一下可用。
如果坐标位置不变,你可以直接把这些值写到textbox中,用不了获取这个功能。
F12为退出自动点击按钮,可以按住不放,看看源代码就可以。
由于vba没有timer控件,我直接用do loop代替,可能效率差点,但我想不会影响使用。
Option Explicit

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If CommandButton1.Caption = "获取按钮坐标" Then
        CommandButton1.Caption = "停止获取"
        CommandButton2.Enabled = False
        GetCommandButtonXY
    Else
        CommandButton1.Caption = "获取按钮坐标"
        CommandButton2.Enabled = True
    End If
End Sub
Function GetCommandButtonXY()
    Dim Point   As POINTAPI
    Do
        GetCursorPos Point
        Label1 = "x:" & Point.X
        Label2 = "y:" & Point.Y
        DoEvents
        If CommandButton1.Caption = "获取按钮坐标" Then Exit Do
    Loop
End Function
Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
        CommandButton1.Enabled = False
        CommandButton2.Enabled = False
        AutoButtonClick
End Sub
Function AutoButtonClick()
    Dim t As Date
        Do
            t = Timer
            Do
                If Timer - t >= Val(ComboBox1.Text) / 2 Then Exit Do
                DoEvents
                If F12Click = True Then Exit Function
            Loop
            If CheckBox1.Value = True Then
                Call SetCursorPos(Val(TextBox1), Val(TextBox2))
                Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
            End If
            
            t = Timer
            Do
                If Timer - t >= Val(ComboBox1.Text) / 2 Then Exit Do
                DoEvents
                If F12Click = True Then Exit Function
            Loop
            If CheckBox2.Value = True Then
                Call SetCursorPos(Val(TextBox3), Val(TextBox4))
                Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
            End If

        Loop
End Function
Function F12Click() As Boolean
    If GetAsyncKeyState(vbKeyF12) = -32768 Then 'F2退出
        CommandButton1.Enabled = True
        CommandButton2.Enabled = True
        F12Click = True
    End If
End Function

Private Sub UserForm_Activate()
    ComboBox1.List = Split("0.2,0.4,0.6,0.8,1,1.2,1.4,1.6,1.8,2,10", ",")
    ComboBox1.ListIndex = 4
    CheckBox1.Value = True
End Sub

[ 本帖最后由 pt98 于 2010-3-21 15:56 编辑 ]

自动点击按钮.rar

10.32 KB, 下载次数: 89

TA的精华主题

TA的得分主题

发表于 2010-3-21 16:00 | 显示全部楼层
要是想用AU3来做的话,到这里试一下
http://www.autoitx.com/

或者试一下下面这段

hotkeyset("^{down}","Terminate")
msgbox(0,"工作提示","切换后5秒钟后开始自动点击,确定后将鼠标移到要点的按钮上" & @crlf & "中途要退出请按<Ctrl+Down>,请注意时间")
sleep(5000)
while 1
mouseclick("left")
sleep(50)
wend

func Terminate()
        msgbox(0,"提示","退出程序",5)
        hotkeyset("^{down}")
        exit 0
endfunc

需要的话可以将上面的代码生成可执行文件给你

[ 本帖最后由 kevinchengcw 于 2010-3-21 16:07 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-21 16:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 pt98 于 2010-3-21 15:43 发表
原来写过一个开心网的作弊软件,不过是用vb写的,现修改了一下可用。
如果坐标位置不变,你可以直接把这些值写到textbox中,用不了获取这个功能。
F12为退出自动点击按钮,可以按住不放,看看源代码就可以。
由于 ...

非常感谢这位朋友的热心帮助。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 17:10 , Processed in 0.040989 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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