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

65
1 Star2 Stars3 Stars4 Stars5 Stars(快来投票)
Loading...

近来找不到 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
}

已有 65 条评论, 我要留言

  1. scavin说道:

    你终于回来了

  2. Paveo说道:

    沙发…..

  3. v2003说道:

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

  4. tireless说道:

    多谢解答!

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

    • sfufoet说道:

      你是不是少 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说道:

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

    • sfufoet说道:

      CoordMode Mouse, Relative

      这样就是相对坐标了。

    • tireless说道:

      谢谢,都解决了

  5. […] AHK 快餐店 – 读者互动[2] | 小众软件 – Appinn 第二个很好 (tags: 软件) […]

  6. 李二嫂的猪说道:

    支持煋灿~

  7. Juny说道:

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

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

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

  8. sfufoet说道:

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

  9. sora说道:

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

  10. bunny说道:

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

    • sfufoet说道:

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

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

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

    • soapy说道:

      比如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

  11. soapy说道:

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

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

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

    • sfufoet说道:

      怎么个加密法?

    • soapy说道:

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

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

    • soapy说道:

      哦回复错地方了
      比如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说道:

      不好意思,现在才回复你在小众的留言:
      不懂请自行翻阅 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%

  12. tireless说道:

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

  13. D调说道:

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

  14. njxn说道:

    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说道:

      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说道:

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

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

      而且代码的~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
      }

  15. mctuandui说道:

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

    • sfufoet说道:

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

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

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

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

  16. mctuandui说道:

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

    • sfufoet说道:

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

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

    • sfufoet说道:

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

  17. mctuandui说道:

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

  18. mctuandui说道:

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

    • sfufoet说道:

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

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

  19. mctuandui说道:

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

    • sfufoet说道:

      我看明白 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
      }

  20. mctuandui说道:

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

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

  21. mctuandui说道:

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

  22. mctuandui说道:

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

  23. mctuandui说道:

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

  24. wildtoy说道:

    首先小谢一下今天下午的小众的回答
    然后我做了一个文本快抓,就叫复制宝宝吧
    我现在抓网文用网博士,不过有时遇到好的名言名句或少量的文本,或者比较乱内容较少的文本时就不想抓到网博士里整理
    所以做了这么一个东东只抓文本到一个记事本文件里,以后有空再整理,测试的时候发现不止网页,任何可以复制文本的地方都可以,赚了
    源码:
    #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的资源好少啊,很想系统学习一下

  25. wildtoy说道:

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

  26. wildtoy说道:

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

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

  27. soskitty说道:

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

有不同想法?说说看