2008.03.19 by sfufoet

AHK 快餐店 – 读者互动[2]

65

AHK 快餐店   读者互动[2] [图] | 小众软件

近来找不到 blogging 的动力,火山我从火星回到地球(家里终于安了 ADSL)一个多星期。再拖下去就不知道什么时候才搞定读者的 AHK 问题了。

AHK 快餐店系列教程

Q1:求个代码,获取屏幕上某块区域的位置(上,下,左,右),就像截图软件的区域截图那样截取,然后激活一窗口,将这四个值粘贴到四个输入框内(按TAB跳到下一输入框)。来自小众读者 tireless 的提问

A1:代码在下面,顺便,tireless 问的第二个问题我没明白,请说详细一点。

CoordMode Mouse, Screen
;设置鼠标的坐标系统,以屏幕为绝对坐标。

^LButton::
MouseGetPos x0, y0, id0            ; 鼠标开始拖动的位置
   Loop
   {
     Sleep 20                    ; 暂停 20 毫秒
     GetKeyState, keystate, LButton, p ; 获得左键的按键状态
     IfEqual, keystate, U, {
       MouseGetPos, x1, y1         ; 鼠标左键松开时候的位置
       WinActivate Appinn.com ; 激活标题包含 Appinn.com 的程序
       ; 假设光标已经在第一个输入框里
       clipboard = %x0%, %y0%
       clipwait
       send ^v
       send {tab}
       ; 发送其他三个坐标的代码我就不列出了,请自行补完。
       break ; 最后不要忘记跳出循环哦。
     }
   }
return

Q2:请小众同志看一下这篇文章:【教程】教你怒看迅雷在偷偷上传你盘上什么文件?占多少带宽?如何毁你硬盘?能不能用AHK写个自动清除c:\windows\system32\cid_store.dat文件的程序呢?? – 来自锐风的提问

A2:

Loop
{
  IfExist C:\windows\system32\cid_store.dat
  FileDelete, C:\windows\system32\cid_store.dat
  sleep 10000
}

26 Comments:

  1. 1. scavin # 2008/03/19 21:52

    你终于回来了

    回复

  2. 2. Paveo # 2008/03/19 22:17

    沙发…..

    回复

  3. 3. v2003 # 2008/03/19 22:40

    我看到迅雷的介绍。。。把我吓着了。

    回复

  4. 4. tireless # 2008/03/19 23:15

    多谢解答!

    * 第1个问题,有点麻烦的是,如果窗口没占满屏幕,首先要点击一下桌面,这样获取的坐标才是相对于屏幕的。。。有没有什么解决办法?
    * 原来提出的第2个问题,我再努力地表达:执行这么一个动作…激活一窗口,在那窗口发送“点击”动作,然后把鼠标指针移到桌面的某个位置…就这样(我遇到的问题是,我无法让指针移动- -)
    * 双击的命令是什么?

    回复

    sfufoet # 2008/03/20 11:08

    你是不是少 Copy 这句:

    CoordMode Mouse, Screen
    ;设置鼠标的坐标系统,以屏幕为绝对坐标。

    回答第二个问题:
    上次你贴的代码是:

    ^`::
    WinActivate, Gif·gIf·giF ahk_class JMainWindow
    Mousemove 29,92,0
    Send {click}
    #IfWinActive
    Mousemove 582,385,0
    return

    我修改为

    ^`::
    WinActivate, Gif·gIf·giF ahk_class JMainWindow
    Mousemove 29,92,0
    Send {click}

    send #d
    ; 发送一个 Win + D 不就回到桌面?
    CoordMode Mouse, Screen
    ;设置鼠标的坐标系统,以屏幕为绝对坐标。

    Mousemove 582,385,0
    return

    回答第三个:没有双击的命令,可以用两个“MouseClick”命令代替。

    回复

    tireless # 2008/03/20 19:53

    对啊,为什么我会少copy这一句。。。但是加上这一句后,激活那个程序还要双击一下输入框,这样又点错位置了,也就是要取消“以屏幕为绝对坐标”了,怎么取消?

    回复

    sfufoet # 2008/03/20 20:27

    CoordMode Mouse, Relative

    这样就是相对坐标了。

    回复

    tireless # 2008/03/20 21:02

    谢谢,都解决了

    回复

  5. 5. 李二嫂的猪 # 2008/03/20 09:38

    支持煋灿~

    回复

  6. 6. Juny # 2008/03/20 10:58

    关于您说的那个迅雷的问题,我试了一下,如果真的就只是那个文件的问题的话,其实可以更简单的解决:

    找到C:\WINDOWS\system32\cid_store.dat这个文件,然后用记事本打开,删除全部内容,或者写上“迅雷是个无耻的大傻瓜”之类的话,保存,然后设置该文件属性,选择“只读”,就搞定了!

    我没有下载一些监测工具,但是,我试了一下打开迅雷,下载一些文件,然后关闭迅雷,重新启动迅雷,这个文件都没有再被改变,应该就算是搞定了吧?

    回复

  7. 7. sfufoet # 2008/03/20 11:01

    对哦,楼上说的办法不错。对付 QQ 的广告也同样的办法。

    回复

  8. 8. sora # 2008/03/20 11:09

    其实我是因为没找到留言板所以..想在这里问一下能不能写个截屏代码来截取像是新浪BLOG这样的页面呢?我用马桶的截屏按钮和FF的插件都不能截取整个页面,截取下来的只有首屏的图,下面的都没有,不知道是为什么,其他大部分网站都可以截取整个页面的。可能是因为他用FLASH架构的或者是怎么样么? 谢谢!

    回复

    sfufoet # 2008/03/25 07:26

    用截图软件吧,用 AHK 来写的话,我也不懂。抱歉。

    回复

  9. 9. bunny # 2008/03/20 13:17

    一直 看 AHK 的教程
    问一下 作者:
    有么有 写完?
    有没有 一个文件的合集? 离线看 更方便点.
    没有的话 我可不可以 整理的一个.

    回复

    sfufoet # 2008/03/20 15:01

    这个难说,灵感随时会蹦出来。

    你要整理的话,可以。遵循小众的 Creative Commons

    * 本站内容受著作权法保护。
    * 个人 blog 转载时请遵循“署名-非商业用途-保持一致”的创作共用协议;
    * 商业网站或未授权媒体不得复制本站内容

    回复

    soapy # 2008/03/25 11:18

    比如vb下的简单代码为:
    Private Sub Command1_Click()
    Dim str As String
    Dim n As Integer
    Dim arr(1000) As String * 1
    str = Text1.Text
    n = Len(str)
    For i = 0 To n – 1
    arr(i) = Mid(str, i + 1, 1)
    Next i

    For i = 0 To n – 1
    Select Case arr(i)
    Case “a”
    arr(i) = “z”
    Case “b”
    arr(i) = “y”
    Case “c”
    arr(i) = “x”
    Case Else
    End Select
    Next i
    str = “”
    For i = 0 To n – 1
    str = str & arr(i)
    Next i

    Text2.Text = str
    End Sub

    回复

  10. 10. soapy # 2008/03/25 01:38

    呵呵 刚接触AHK,弱弱的问个问题
    提问:
    我想把一些文字进行加密(简单的字母替换,如ab,cd),

    a::b
    c::d
    在输入时很容易实现

    但是我不知道怎样将已经“加密”好的字符串还原为明文?

    回复

    sfufoet # 2008/03/25 07:26

    怎么个加密法?

    回复

    soapy # 2008/03/25 09:46

    加密原理就是凯撒加密法,即简单的字母替换
    比如替换表:
    原文:A B C D E
    密文:Z Y X W V
    进行一一代换,当然替换表能够自定义,而不是简单的AZ,BY配对

    有个思路:将字符串分解为单字符的数组,再对每个数组元素进行判断替换,之后重新把数组组合成字符串输出
    这在其他语言应该是很容易实现的
    不知道AHK下要怎样做(就是想知道AHK有没有数组和CASE语句功能的函数

    回复

    soapy # 2008/03/25 11:19

    哦回复错地方了
    比如vb下的简单代码为:
    Private Sub Command1_Click()
    Dim str As String
    Dim n As Integer
    Dim arr(1000) As String * 1
    str = Text1.Text
    n = Len(str)
    For i = 0 To n – 1
    arr(i) = Mid(str, i + 1, 1)
    Next i

    For i = 0 To n – 1
    Select Case arr(i)
    Case “a”
    arr(i) = “z”
    Case “b”
    arr(i) = “y”
    Case “c”
    arr(i) = “x”
    Case Else
    End Select
    Next i
    str = “”
    For i = 0 To n – 1
    str = str & arr(i)
    Next i

    Text2.Text = str
    End Sub

    回复

    sfufoet # 2008/04/03 20:43

    不好意思,现在才回复你在小众的留言:
    不懂请自行翻阅 ahk 的帮助

    in=abc
    StringSplit,out,in,
    loop %out0% ; %out0% 是 out 分解后的个数
    {
    if out%A_index% = a
    {
    out%A_index% = b
    continue
    }
    if out%A_index% = b
    {
    out%A_index% = c
    continue
    }
    if out%A_index% = c
    {
    out%A_index% = a
    continue
    }
    }
    loop %out0%
    {
    temp=% out%A_index%
    ; 这里我就不解释了,请看:http://www.appinn.com/ahk-fast-food-restaurant-17-unplug-all-usb-device/
    final=%final%%temp%
    }
    clipboard=%final%

    回复

  11. 11. tireless # 2008/03/26 23:16

    请问如何只在桌面和资源管理器使用AHK?
    就是在桌面和资源管理器中热键有效

    回复

    sfufoet # 2008/03/27 13:16

    试试以下代码

    ~MButton::
    WinGetClass, class, A
    If class in CabinetWClass,WorkerW
    tooltip, %class%
    return

    回复

    tireless # 2008/03/27 14:26

    有时有用,有时没用

    回复

    sfufoet # 2008/03/28 23:01

    怎么个有时有用,有时没用法?

    回复

    tireless # 2008/03/31 10:35

    好像又总是有用了,桌面的类是不是有两个,有时是WorkerW有时是Progman?

    回复

    sfufoet # 2008/03/31 10:38

    不清楚哦,你自己测试一下好吗?

    回复

  12. 12. D调 # 2008/03/28 19:33

    请问如何在QQ登陆框中粘贴,代码是什么?谢谢

    回复

    sfufoet # 2008/03/28 23:01

    粘贴什么?密码?Q号?

    回复

    aofa # 2009/08/24 12:32

    粘贴是不可能的

    你可以写send,XXXXXX

    你是想要快捷登陆吗?

    D调 # 2008/04/06 09:01

    当然是粘贴密码了
    用普通的方法不行
    Ctrl+v不能用 右键也不能用

    回复

    sfufoet # 2008/04/06 09:25

    这个功能 AHK 也无能为力,只有破坏密码旁边那个锁。这样密码很容易被盗。

    回复

  13. 13. njxn # 2008/05/02 23:40

    sfuoet您好:
    我是一个游戏迷,主要玩,听说可以用AHK同时控制5个帐号,
    我就试了下,可发现不行,我也不知道是哪里出了问题了,能帮忙看下吗?谢谢拉!
    1,在AutoHotKey文件夹里新建一个记事本,保存为moshou.ini文件,双击打开后在记事本里写下(我有两个帐号):

    WinGet,wowid,List,魔兽世界
    ~1::
    KeyWait 1
    IfWinActive,魔兽世界
    {
    ControlSend,,1,ahk_id %wowid1%
    ControlSend,,1,ahk_id %wowid2%
    Return
    }
    可我试了半天也没用啊,到底是哪里出错了?,还有个问题,若该文件继续往下写,您看我写的对不对啊?

    ~2::
    KeyWait 2
    IfWinActive,魔兽世界
    {
    ControlSend,,2,ahk_id %wowid1%
    ControlSend,,2,ahk_id %wowid2%
    Return
    }
    ~3::
    KeyWait 3
    IfWinActive,魔兽世界
    {
    ControlSend,,3,ahk_id %wowid1%
    ControlSend,,3,ahk_id %wowid2%
    Return
    }
    能告诉我到底我写的对不对啊?谢谢拉!!

    回复

    sfufoet # 2008/05/03 10:32

    AHK 是一种脚本程序,所有的脚本的扩展名都是 ahk,我知道你把帐号写进去 moshou.ini 是想从里面读取帐号是吧?

    你的代码是保存在一个扩展名为 ahk 的文件里面吗?

    你是打开了两个魔兽的窗口对吧?
    试试下面的代码

    count=0
    WinGet, id, list,,, Program Manager
    Loop, %id%
    {
    this_id := id%A_Index%
    WinGetTitle, this_title, ahk_id %this_id%

    IfInString,this_title,魔兽世界
    {
    WinActivate, ahk_id %this_id%
    if count=0
    {
    send 用户名1{tab}密码1{enter}
    ; 这里是模拟的键盘的动作,请修改用户名和密码。
    count=1
    }
    else
    {
    send 用户名2{tab}密码2{enter}
    }
    }
    }

    回复

    sfufoet # 2008/05/22 13:43

    我看明白你提供的代码了。

    测试了那段代码,是可行的,只不过,激活的窗口会出现,按下一次按钮出现重复的数字,所以我修改了一下,请打开两个记事本测试。

    而且代码的~1不是指数字小键盘,而是主键盘的数字,因为大家输入密码都习惯用数字小键盘,所以以为代码有问题。

    如果要修改为数字小键盘,请吧 ~1:: 修改 ~Numpad1::
    其他代码(~2::)类似。
    还有把 KeyWait 1 修改为 KeyWait Numpad1
    其他代码(KeyWait 2)类似。

    WinGet,wowid,List,无标题 – 记事本

    ~1::
    KeyWait 1
    IfWinActive,无标题 – 记事本
    {
    winget,CurrentID,ID,A
    if CurrentID<>%wowid1%
    ControlSend,,1,ahk_id %wowid1%
    if CurrentID<>%wowid2%
    ControlSend,,1,ahk_id %wowid2%
    /* 这个是注释符号,要用的时候请删除这一行。还有后面对应的星号斜杠也要删除。如果有三个窗口,看代码:
    if CurrentID<>%wowid3%
    ControlSend,,1,ahk_id %wowid3%
    */
    Return
    }

    ~2::
    KeyWait 2
    IfWinActive,无标题 – 记事本
    {
    winget,CurrentID,ID,A
    if CurrentID<>%wowid1%
    ControlSend,,2,ahk_id %wowid1%
    if CurrentID<>%wowid2%
    ControlSend,,2,ahk_id %wowid2%
    Return
    }

    回复

  14. 14. mctuandui # 2008/05/19 12:48

    我也想用AHK同时映射一台机子里的多个魔兽世界帐号,可我用了sfuoet写的代码,可发现实际玩的时候还是没反应,有几个问题想请教下1,是不是把所有关于魔兽的代码写进INI文档后再改为扩展名为ahk的文件吗?这个AHK文件是保存在AHK的目录里还是保存在魔兽世界的游戏目录里?
    2,你写的代码里的用户名和密码是指电脑登陆XP系统的用户名和密码吗?
    我若是用一台电脑同时多开几个魔兽帐号的话,是不是就不用send 用户名了?
    难道是指的魔兽世界的帐号和密码吗?

    回复

    sfufoet # 2008/05/19 12:54

    首先你的电脑上要安装 AutoHotKey,ahk 是 AutoHotKey 的专用扩展名。

    这个代码我没有测试过,只是写出来给大家参照。这个代码可以用记事本编辑,保存为 ahk 文件就可以了。ahk 放在哪里都没所谓。

    这里的用户名和密码当然是魔兽的啦。send 是模拟键盘的命令,发送后面的按键到当前窗口。

    建议用自带的录制 ahk 脚本工具,录制登录过程,然后根据需要修改代码。

    回复

  15. 15. mctuandui # 2008/05/19 18:01

    哦,录制登录过程,是不是用的AutoScriptWriter(recorder)?怎么录制啊?登录魔兽世界可是有密保的.等周四再试试看吧!
    嘿嘿,问了这么多低级的问题,可别笑话我哦!

    回复

    sfufoet # 2008/05/19 18:08

    每个人都是从新手开始学起的,笑话你,不就是笑话我自己了?呵呵

    点击那个大大的“record”按钮,然后按照你平时登录两个魔兽世界的步骤做。登陆完毕点击左上角的“stop”就可以看到代码了。

    回复

    sfufoet # 2008/05/19 18:09

    把录制到的代码保存为 ahk 文件。录制的这些代码不一定就是完美的,需要测试。

    回复

  16. 16. mctuandui # 2008/05/20 16:35

    哦,谢谢拉!
    等我试过后有问题再问你吧!真是非常感谢.

    回复

  17. 17. mctuandui # 2008/05/22 09:57

    sfufoet,你好!
    我上午用你教我的方法把两个帐号的登录过程都录制下来了,可我希望用AHK

    回复

    sfufoet # 2008/05/22 10:01

    录制下来之后,窗口不就出现好多代码了?

    把代码复制下来,粘贴到记事本,保存为 ahk 文件。

    回复

  18. 18. mctuandui # 2008/05/22 10:09

    可我希望用AHK同时映射我已登录的帐号啊,实际的游戏登录过程我感觉并不需要AHK的,我想用AHK把电脑键盘上的1,2,3,4,5,6,7,8,9,0键同时映射到两个游戏帐号里.我只想在一个游戏界面(也就是一个帐号)按下1的同时,另一个最小化的游戏界面里的1键也能同时按下,我试了好久也没成功,你能教教我吗?谢谢拉

    回复

    sfufoet # 2008/05/22 13:43

    我看明白 njxn 提供的代码了。
    测试了那段代码,是可行的,只不过,激活的窗口会出现,按下一次按钮出现重复的数字,所以我修改了一下,请打开两个记事本测试。

    而且代码的~1不是指数字小键盘,而是主键盘的数字,因为大家输入密码都习惯用数字小键盘,所以以为代码有问题。

    如果要修改为数字小键盘,请吧 ~1:: 修改 ~Numpad1::
    其他代码(~2::)类似。
    还有把 KeyWait 1 修改为 KeyWait Numpad1
    其他代码(KeyWait 2)类似。

    WinGet,wowid,List,无标题 – 记事本

    ~1::
    KeyWait 1
    IfWinActive,无标题 – 记事本
    {
    winget,CurrentID,ID,A
    if CurrentID<>%wowid1%
    ControlSend,,1,ahk_id %wowid1%
    if CurrentID<>%wowid2%
    ControlSend,,1,ahk_id %wowid2%
    /* 这个是注释符号,要用的时候请删除这一行。还有后面对应的星号斜杠也要删除。如果有三个窗口,看代码:
    if CurrentID<>%wowid3%
    ControlSend,,1,ahk_id %wowid3%
    */
    Return
    }

    ~2::
    KeyWait 2
    IfWinActive,无标题 – 记事本
    {
    winget,CurrentID,ID,A
    if CurrentID<>%wowid1%
    ControlSend,,2,ahk_id %wowid1%
    if CurrentID<>%wowid2%
    ControlSend,,2,ahk_id %wowid2%
    Return
    }

    回复

  19. 19. mctuandui # 2008/05/22 10:11

    这是我上午刚录制的原始文件,你帮忙看下:

    —————-
    代码收到。-sfufoet

    回复

    sfufoet # 2008/05/22 10:15

    你呀~,间接把你的魔兽密码和帐号暴露出来了。幸亏你的留言我及时发现。

    你要的这个功能我无能为力。sorry。

    回复

    李二嫂的猪 # 2008/05/22 10:26

    @sfufoet 你呀~,他的魔兽密码和帐号都发到我邮箱里啦,修改留言也晚啦。幸亏我不玩网游。

    回复

    李二嫂的猪 # 2008/05/22 10:27

    兄弟快点改密码……估计很多人都订阅了……

    回复

    sfufoet # 2008/05/22 10:46

    楼上二猪说的对,快修改魔兽密码。

    回复

  20. 20. mctuandui # 2008/05/22 11:48

    密码我改过了,再说登陆游戏还要密保卡的,嘿嘿,谢谢拉!
    sfufoet,您好
    我也是在网上看到相关的文章介绍,才注意到可以用AHK同时映射两个游戏帐号的,上面所写的代码和NJXN在5月2日所写的帖子上的代码一样,我试了好久也没成功,最近有一朋友介绍我看了<>第16期上也有相同的介绍,我相信用AHK是能做到同时操控多个帐号的,可我就是不知道到底是哪一步没做好,njxn提供的那个代码到底对不对?若没错的话到底应该怎么用?能教教我吗?谢谢拉!实在不行给我指个方向也行啊!

    回复

  21. 21. mctuandui # 2008/05/22 11:49

    哦,是电脑报08年第16期E5版

    回复

    sfufoet # 2008/05/22 13:24

    你有电脑报那一期的扫描吗?网络上找不到。verycd 才更新到 4.21 的

    回复

  22. 22. mctuandui # 2008/05/22 13:33

    没有,只有一份报纸,我上电脑报网站也没发现,只更新到第15期的.

    回复

  23. 23. wildtoy # 2008/06/20 01:52

    首先小谢一下今天下午的小众的回答
    然后我做了一个文本快抓,就叫复制宝宝吧
    我现在抓网文用网博士,不过有时遇到好的名言名句或少量的文本,或者比较乱内容较少的文本时就不想抓到网博士里整理
    所以做了这么一个东东只抓文本到一个记事本文件里,以后有空再整理,测试的时候发现不止网页,任何可以复制文本的地方都可以,赚了
    源码:
    #c::
    send ^c
    clipwait
    FileAppend, %clipboard%, C:\copybaby.txt
    sleep 100
    FileAppend, `n==============================================`n`n, C:\copybaby.txt
    sleep 100
    tooltip, 干完活啦
    sleep 1000
    ; 时间暂停 1秒
    tooltip,
    ; 关闭鼠标提示
    return

    结束.用法选择文本后按WIN+C键会直接保存入指定文件.
    另外网上AHK的资源好少啊,很想系统学习一下

    回复

    sfufoet # 2008/06/20 10:14

    多谢你的代码。呵呵。

    国内目前有个小论坛:http://ahk.5d6d.com/

    回复

    wildtoy # 2008/06/20 12:42

    这个我知道,又卡又少,不能在深度上友情开个AHK专版么

    回复

    sfufoet # 2008/06/20 14:14

    我不喜欢泡论坛,如果你喜欢深度,可以给深度建议。

    回复

  24. 24. wildtoy # 2008/06/23 21:56

    文件夹想进就进 的汉化脚本能给我发一份么
    你提供的两个脚本都下不来
    我想研究一下做个闹钟什么的
    最好小众先做出来
    功能有
    1当前时间显示
    2定时或延时设置
    3提示方法音乐(默认选定)\文字(提示5秒)\启动程序或文件(默认关机)

    回复

  25. 25. wildtoy # 2008/07/16 02:25

    sfufoet 最近我在把以前用按键精灵做的几个脚本转译成AHK,在实现下面几个基本命令时比较麻烦,想学学你是怎么样写的

    脚本启动后
    1某键暂停/某键继续
    2可随时中止热键
    3可以设定运行时间

    回复

    sfufoet # 2008/07/16 22:09

    1、是按住某个按键和弹起某个按键吗?

    2、用hotkey命令,参考这里
    http://www.appinn.com/coy-paste-hotkey/

    3、在特定时间运行程序:
    用这些自带的变量来获得系统的时间,判断时间,然后运行(run)程序
    A_Hour
    A_Min
    A_Sec

    回复

  26. 26. soskitty # 2008/08/19 23:18

    想知道 ahk 里同时按下两个字母的热键怎么写~

    回复

    soskitty # 2008/08/19 23:18

    例如同时按下a、h、k三个字母打开ahk主程序

    回复

    sfufoet # 2008/08/20 09:10

    没有三字母的热键组合。只有两个字母的热键组合。

    a & h::run 目标

    如果要三个字母的话,只能用热字符串。
    ::ahk::run 目标

    回复

输入昵称与邮箱就可以评论

称呼*

邮箱*

网址