找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6125|回复: 6

版主,寨主培训班(从0教你打造一键式扣分精灵)

[复制链接]
发表于 2017-10-23 11:54:10 | 显示全部楼层 |阅读模式
本帖最后由 tt911 于 2017-10-23 12:00 编辑

第一步,我们找个流氓贴子,作为扣分对象
譬如这个
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=402851
好了,坏蛋有了,我们就可以使用工具来快速的写代码了

第二步,点击字库制作工具
点击抓取文字 按钮
Snap4.jpg
之后目标对象上 移动鼠标几像素!


我们点击, 左删 右删 上删 下删,总之不大不小就可以啦~~
Snap1.jpg
点击配图上面的那几个地方,最后点插入

替换掉代码中的★
高人做的字库系统.rar (11.75 KB, 下载次数: 0)
Snap2.jpg
这种方法只要一个AHK脚本文件就可以了,而不必使用外部的图片文件。

F11::                         ;这里是自己设置的热键,发现论坛上的狗皮膏药时,按热键就可以自动化的扣分了。

文字=
文字.="|<>14.20lUMMCA723UVk0/zszy0008"
if 查找文字(1100,806,150000,150000,文字,"*138",X,Y,OCR,0,0)
{
  CoordMode, Mouse
  MouseMove, X, Y
  Click X, Y
  sleep , 500
  send , -5{Del}                ;这里是实际我们测试通过要加入的代码 -5 之后,删除后边的那个0
  send , {Enter}
}
return

  1. ★
  2. ;---- 将后面的函数附加到自己的脚本中 ----
  3. ;-----------------------------------------
  4. ; 查找屏幕文字/图像字库及OCR识别
  5. ; 注意:参数中的x、y为中心点坐标,w、h为左右上下偏移
  6. ; cha1、cha0分别为0、_字符的容许减少百分比
  7. ;-----------------------------------------
  8. 查找文字(x,y,w,h,wz,c,ByRef rx="",ByRef ry="",ByRef ocr=""
  9.   , cha1=0, cha0=0)
  10. {
  11.   xywh2xywh(x-w,y-h,2*w+1,2*h+1,x,y,w,h)
  12.   if (w<1 or h<1)
  13.     Return, 0
  14.   bch:=A_BatchLines
  15.   SetBatchLines, -1
  16.   ;--------------------------------------
  17.   GetBitsFromScreen(x,y,w,h,Scan0,Stride,bits)
  18.   ;--------------------------------------
  19.   ; 设定图内查找范围,注意不要越界
  20.   sx:=0, sy:=0, sw:=w, sh:=h
  21.   if PicOCR(Scan0,Stride,sx,sy,sw,sh,wz,c
  22.     ,rx,ry,ocr,cha1,cha0)
  23.   {
  24.     rx+=x, ry+=y
  25.     SetBatchLines, %bch%
  26.     Return, 1
  27.   }
  28.   ; 容差为0的若失败则使用 5% 的容差再找一次
  29.   if (cha1=0 and cha0=0)
  30.     and PicOCR(Scan0,Stride,sx,sy,sw,sh,wz,c
  31.       ,rx,ry,ocr,0.05,0.05)
  32.   {
  33.     rx+=x, ry+=y
  34.     SetBatchLines, %bch%
  35.     Return, 1
  36.   }
  37.   SetBatchLines, %bch%
  38.   Return, 0
  39. }

  40. ;-- 规范输入范围在屏幕范围内
  41. xywh2xywh(x1,y1,w1,h1,ByRef x,ByRef y,ByRef w,ByRef h)
  42. {
  43.   ; 获取包含所有显示器的虚拟屏幕范围
  44.   SysGet, zx, 76
  45.   SysGet, zy, 77
  46.   SysGet, zw, 78
  47.   SysGet, zh, 79
  48.   left:=x1, right:=x1+w1-1, up:=y1, down:=y1+h1-1
  49.   left:=left<zx ? zx:left, right:=right>zx+zw-1 ? zx+zw-1:right
  50.   up:=up<zy ? zy:up, down:=down>zy+zh-1 ? zy+zh-1:down
  51.   x:=left, y:=up, w:=right-left+1, h:=down-up+1
  52. }

  53. ;-- 获取屏幕图像的内存数据,图像包括透明窗口
  54. GetBitsFromScreen(x,y,w,h,ByRef Scan0,ByRef Stride,ByRef bits)
  55. {
  56.   VarSetCapacity(bits, w*h*4, 0)
  57.   Ptr:=A_PtrSize ? "Ptr" : "UInt"
  58.   ; 桌面窗口对应包含所有显示器的虚拟屏幕
  59.   win:=DllCall("GetDesktopWindow", Ptr)
  60.   hDC:=DllCall("GetWindowDC", Ptr,win, Ptr)
  61.   mDC:=DllCall("CreateCompatibleDC", Ptr,hDC, Ptr)
  62.   hBM:=DllCall("CreateCompatibleBitmap", Ptr,hDC
  63.     , "int",w, "int",h, Ptr)
  64.   oBM:=DllCall("SelectObject", Ptr,mDC, Ptr,hBM, Ptr)
  65.   DllCall("BitBlt", Ptr,mDC, "int",0, "int",0, "int",w, "int",h
  66.     , Ptr,hDC, "int",x, "int",y, "uint",0x00CC0020|0x40000000)
  67.   ;--------------------------
  68.   VarSetCapacity(bi, 40, 0)
  69.   NumPut(40, bi, 0, "int"), NumPut(w, bi, 4, "int")
  70.   NumPut(-h, bi, 8, "int"), NumPut(1, bi, 12, "short")
  71.   NumPut(bpp:=32, bi, 14, "short"), NumPut(0, bi, 16, "int")
  72.   ;--------------------------
  73.   DllCall("GetDIBits", Ptr,mDC, Ptr,hBM
  74.     , "int",0, "int",h, Ptr,&bits, Ptr,&bi, "int",0)
  75.   DllCall("SelectObject", Ptr,mDC, Ptr,oBM)
  76.   DllCall("DeleteObject", Ptr,hBM)
  77.   DllCall("DeleteDC", Ptr,mDC)
  78.   DllCall("ReleaseDC", Ptr,win, Ptr,hDC)
  79.   Scan0:=&bits, Stride:=((w*bpp+31)//32)*4
  80. }

  81. ;-----------------------------------------
  82. ; 图像内查找文字/图像字符串及OCR函数
  83. ;-----------------------------------------
  84. PicOCR(Scan0, Stride, sx, sy, sw, sh, wenzi, c
  85.   , ByRef rx, ByRef ry, ByRef ocr, cha1, cha0)
  86. {
  87.   static MyFunc
  88.   if !MyFunc
  89.   {
  90.     x32:="5589E55383EC608B45200FAF45188B551CC1E20201D0894"
  91.     . "5F08B5524B80000000029D0C1E00289C28B451801D08945ECC"
  92.     . "745E800000000C745D400000000C745D0000000008B4524894"
  93.     . "5CC8B45288945C8C745C400000000837D08000F85B20000008"
  94.     . "B450CC1E81025FF0000008945C08B450CC1E80825FF0000008"
  95.     . "945BC8B450C25FF0000008945B8C745F400000000EB75C745F"
  96.     . "800000000EB5A8B45F083C00289C28B451401D00FB6000FB6C"
  97.     . "03B45C075368B45F083C00189C28B451401D00FB6000FB6C03"
  98.     . "B45BC751E8B55F08B451401D00FB6000FB6C03B45B8750B8B5"
  99.     . "5E88B453001D0C600318345F8018345F0048345E8018B45F83"
  100.     . "B45247C9E8345F4018B45EC0145F08B45F43B45287C83E9170"
  101.     . "20000837D08010F85A30000008B450C83C001C1E00789450CC"
  102.     . "745F400000000EB7DC745F800000000EB628B45F083C00289C"
  103.     . "28B451401D00FB6000FB6C06BD0268B45F083C00189C18B451"
  104.     . "401C80FB6000FB6C06BC04B8D0C028B55F08B451401D00FB60"
  105.     . "00FB6D089D0C1E00429D001C83B450C730B8B55E88B453001D"
  106.     . "0C600318345F8018345F0048345E8018B45F83B45247C96834"
  107.     . "5F4018B45EC0145F08B45F43B45280F8C77FFFFFFE96A01000"
  108.     . "0C745F400000000EB7BC745F800000000EB608B55E88B452C8"
  109.     . "D0C028B45F083C00289C28B451401D00FB6000FB6C06BD0268"
  110.     . "B45F083C00189C38B451401D80FB6000FB6C06BC04B8D1C028"
  111.     . "B55F08B451401D00FB6000FB6D089D0C1E00429D001D8C1F80"
  112.     . "788018345F8018345F0048345E8018B45F83B45247C988345F"
  113.     . "4018B45EC0145F08B45F43B45280F8C79FFFFFF8B452483E80"
  114.     . "18945B48B452883E8018945B0C745F401000000E9B0000000C"
  115.     . "745F801000000E9940000008B45F40FAF452489C28B45F801D"
  116.     . "08945E88B55E88B452C01D00FB6000FB6D08B450C01D08945E"
  117.     . "C8B45E88D50FF8B452C01D00FB6000FB6C03B45EC7F488B45E"
  118.     . "88D50018B452C01D00FB6000FB6C03B45EC7F328B45E82B452"
  119.     . "489C28B452C01D00FB6000FB6C03B45EC7F1A8B55E88B45240"
  120.     . "1D089C28B452C01D00FB6000FB6C03B45EC7E0B8B55E88B453"
  121.     . "001D0C600318345F8018B45F83B45B40F8C60FFFFFF8345F40"
  122.     . "18B45F43B45B00F8C44FFFFFFC745E800000000E9E30000008"
  123.     . "B45E88D1485000000008B454001D08B008945E08B45E08945E"
  124.     . "48B45E48945F08B45E883C0018D1485000000008B454001D08"
  125.     . "B008945B48B45E883C0028D1485000000008B454001D08B008"
  126.     . "945B0C745F400000000EB7CC745F800000000EB678B45F08D5"
  127.     . "0018955F089C28B453401D00FB6003C3175278B45E48D50018"
  128.     . "955E48D1485000000008B453801C28B45F40FAF452489C18B4"
  129.     . "5F801C88902EB258B45E08D50018955E08D1485000000008B4"
  130.     . "53C01C28B45F40FAF452489C18B45F801C889028345F8018B4"
  131.     . "5F83B45B47C918345F4018B45F43B45B00F8C78FFFFFF8345E"
  132.     . "8078B45E83B45440F8C11FFFFFF8B45D00FAF452489C28B45D"
  133.     . "401D08945F08B45240FAF45C8BA0100000029C289D08945E4C"
  134.     . "745F800000000E9B5020000C745F400000000E993020000C74"
  135.     . "5E800000000E9710200008B45E883C0018D1485000000008B4"
  136.     . "54001D08B008945B48B45E883C0028D1485000000008B45400"
  137.     . "1D08B008945B08B55F88B45B401D03B45CC0F8F2D0200008B5"
  138.     . "5F48B45B001D03B45C80F8F1C0200008B45E88D14850000000"
  139.     . "08B454001D08B008945E08B45E883C0038D1485000000008B4"
  140.     . "54001D08B008945AC8B45E883C0048D1485000000008B45400"
  141.     . "1D08B008945A88B45E883C0058D1485000000008B454001D08"
  142.     . "B008945DC8B45E883C0068D1485000000008B454001D08B008"
  143.     . "945D88B45AC3945A80F4D45A88945A4C745EC00000000E9820"
  144.     . "000008B45EC3B45AC7D378B55E08B45EC01D08D14850000000"
  145.     . "08B453801D08B108B45F001D089C28B453001D00FB6003C317"
  146.     . "40E836DDC01837DDC000F884E0100008B45EC3B45A87D378B5"
  147.     . "5E08B45EC01D08D1485000000008B453C01D08B108B45F001D"
  148.     . "089C28B453001D00FB6003C30740E836DD801837DD8000F881"
  149.     . "20100008345EC018B45EC3B45A40F8C72FFFFFF837DC4000F8"
  150.     . "5840000008B551C8B45F801C28B454889108B454883C0048B4"
  151.     . "D208B55F401CA89108B45488D50088B45B489028B45488D500"
  152.     . "C8B45B08902C745C4040000008B45F42B45B08945D08B55B08"
  153.     . "9D001C001D08945C88B55B089D0C1E00201D001C083C064894"
  154.     . "5CC837DD0007907C745D0000000008B45282B45D03B45C87D2"
  155.     . "E8B45282B45D08945C8EB238B45F83B45107E1B8B45C48D500"
  156.     . "18955C48D1485000000008B454801D0C700FFFFFFFF8B45C48"
  157.     . "D50018955C48D1485000000008B454801D08B55E883C207891"
  158.     . "0817DC4FD0300007F788B55F88B45B401D00145D48B45242B4"
  159.     . "5D43B45CC0F8D60FDFFFF8B45242B45D48945CCE952FDFFFF9"
  160.     . "0EB0490EB01908345E8078B45E83B45440F8C83FDFFFF8345F"
  161.     . "4018B45240145F08B45F43B45C80F8C61FDFFFF8345F8018B4"
  162.     . "5E40145F08B45F83B45CC0F8C3FFDFFFF837DC4007508B8000"
  163.     . "00000EB1B908B45C48D1485000000008B454801D0C70000000"
  164.     . "000B80100000083C4605B5DC2440090"
  165.     x64:="554889E54883EC60894D10895518448945204C894D288B4"
  166.     . "5400FAF45308B5538C1E20201D08945F48B5548B8000000002"
  167.     . "9D0C1E00289C28B453001D08945F0C745EC00000000C745D80"
  168.     . "0000000C745D4000000008B45488945D08B45508945CCC745C"
  169.     . "800000000837D10000F85C90000008B4518C1E81025FF00000"
  170.     . "08945C48B4518C1E80825FF0000008945C08B451825FF00000"
  171.     . "08945BCC745F800000000E985000000C745FC00000000EB6A8"
  172.     . "B45F483C0024863D0488B45284801D00FB6000FB6C03B45C47"
  173.     . "5438B45F483C0014863D0488B45284801D00FB6000FB6C03B4"
  174.     . "5C075288B45F44863D0488B45284801D00FB6000FB6C03B45B"
  175.     . "C75108B45EC4863D0488B45604801D0C600318345FC018345F"
  176.     . "4048345EC018B45FC3B45487C8E8345F8018B45F00145F48B4"
  177.     . "5F83B45500F8C6FFFFFFFE959020000837D10010F85B600000"
  178.     . "08B451883C001C1E007894518C745F800000000E98D000000C"
  179.     . "745FC00000000EB728B45F483C0024863D0488B45284801D00"
  180.     . "FB6000FB6C06BD0268B45F483C0014863C8488B45284801C80"
  181.     . "FB6000FB6C06BC04B8D0C028B45F44863D0488B45284801D00"
  182.     . "FB6000FB6D089D0C1E00429D001C83B451873108B45EC4863D"
  183.     . "0488B45604801D0C600318345FC018345F4048345EC018B45F"
  184.     . "C3B45487C868345F8018B45F00145F48B45F83B45500F8C67F"
  185.     . "FFFFFE999010000C745F800000000E98D000000C745FC00000"
  186.     . "000EB728B45EC4863D0488B4558488D0C028B45F483C002486"
  187.     . "3D0488B45284801D00FB6000FB6C06BD0268B45F483C0014C6"
  188.     . "3C0488B45284C01C00FB6000FB6C06BC04B448D04028B45F44"
  189.     . "863D0488B45284801D00FB6000FB6D089D0C1E00429D04401C"
  190.     . "0C1F80788018345FC018345F4048345EC018B45FC3B45487C8"
  191.     . "68345F8018B45F00145F48B45F83B45500F8C67FFFFFF8B454"
  192.     . "883E8018945B88B455083E8018945B4C745F801000000E9CA0"
  193.     . "00000C745FC01000000E9AE0000008B45F80FAF454889C28B4"
  194.     . "5FC01D08945EC8B45EC4863D0488B45584801D00FB6000FB6D"
  195.     . "08B451801D08945F08B45EC4898488D50FF488B45584801D00"
  196.     . "FB6000FB6C03B45F07F538B45EC4898488D5001488B4558480"
  197.     . "1D00FB6000FB6C03B45F07F388B45EC2B45484863D0488B455"
  198.     . "84801D00FB6000FB6C03B45F07F1D8B55EC8B454801D04863D"
  199.     . "0488B45584801D00FB6000FB6C03B45F07E108B45EC4863D04"
  200.     . "88B45604801D0C600318345FC018B45FC3B45B80F8C46FFFFF"
  201.     . "F8345F8018B45F83B45B40F8C2AFFFFFFC745EC00000000E90"
  202.     . "D0100008B45EC4898488D148500000000488B8580000000480"
  203.     . "1D08B008945E48B45E48945E88B45E88945F48B45EC4898488"
  204.     . "3C001488D148500000000488B85800000004801D08B008945B"
  205.     . "88B45EC48984883C002488D148500000000488B85800000004"
  206.     . "801D08B008945B4C745F800000000E989000000C745FC00000"
  207.     . "000EB748B45F48D50018955F44863D0488B45684801D00FB60"
  208.     . "03C31752C8B45E88D50018955E84898488D148500000000488"
  209.     . "B45704801C28B45F80FAF454889C18B45FC01C88902EB2A8B4"
  210.     . "5E48D50018955E44898488D148500000000488B45784801C28"
  211.     . "B45F80FAF454889C18B45FC01C889028345FC018B45FC3B45B"
  212.     . "87C848345F8018B45F83B45B40F8C6BFFFFFF8345EC078B45E"
  213.     . "C3B85880000000F8CE4FEFFFF8B45D40FAF454889C28B45D80"
  214.     . "1D08945F48B45480FAF45CCBA0100000029C289D08945E8C74"
  215.     . "5FC00000000E929030000C745F800000000E907030000C745E"
  216.     . "C00000000E9E20200008B45EC48984883C001488D148500000"
  217.     . "000488B85800000004801D08B008945B88B45EC48984883C00"
  218.     . "2488D148500000000488B85800000004801D08B008945B48B5"
  219.     . "5FC8B45B801D03B45D00F8F8C0200008B55F88B45B401D03B4"
  220.     . "5CC0F8F7B0200008B45EC4898488D148500000000488B85800"
  221.     . "000004801D08B008945E48B45EC48984883C003488D1485000"
  222.     . "00000488B85800000004801D08B008945B08B45EC48984883C"
  223.     . "004488D148500000000488B85800000004801D08B008945AC8"
  224.     . "B45EC48984883C005488D148500000000488B8580000000480"
  225.     . "1D08B008945E08B45EC48984883C006488D148500000000488"
  226.     . "B85800000004801D08B008945DC8B45B03945AC0F4D45AC894"
  227.     . "5A8C745F000000000E9920000008B45F03B45B07D3F8B55E48"
  228.     . "B45F001D04898488D148500000000488B45704801D08B108B4"
  229.     . "5F401D04863D0488B45604801D00FB6003C31740E836DE0018"
  230.     . "37DE0000F88790100008B45F03B45AC7D3F8B55E48B45F001D"
  231.     . "04898488D148500000000488B45784801D08B108B45F401D04"
  232.     . "863D0488B45604801D00FB6003C30740E836DDC01837DDC000"
  233.     . "F88350100008345F0018B45F03B45A80F8C62FFFFFF837DC80"
  234.     . "00F85970000008B55388B45FC01C2488B85900000008910488"
  235.     . "B85900000004883C0048B4D408B55F801CA8910488B8590000"
  236.     . "000488D50088B45B88902488B8590000000488D500C8B45B48"
  237.     . "902C745C8040000008B45F82B45B48945D48B55B489D001C00"
  238.     . "1D08945CC8B55B489D0C1E00201D001C083C0648945D0837DD"
  239.     . "4007907C745D4000000008B45502B45D43B45CC7D368B45502"
  240.     . "B45D48945CCEB2B8B45FC3B45207E238B45C88D50018955C84"
  241.     . "898488D148500000000488B85900000004801D0C700FFFFFFF"
  242.     . "F8B45C88D50018955C84898488D148500000000488B8590000"
  243.     . "0004801D08B55EC83C2078910817DC8FD0300007F7B8B55FC8"
  244.     . "B45B801D00145D88B45482B45D83B45D00F8DEFFCFFFF8B454"
  245.     . "82B45D88945D0E9E1FCFFFF90EB0490EB01908345EC078B45E"
  246.     . "C3B85880000000F8C0FFDFFFF8345F8018B45480145F48B45F"
  247.     . "83B45CC0F8CEDFCFFFF8345FC018B45E80145F48B45FC3B45D"
  248.     . "00F8CCBFCFFFF837DC8007508B800000000EB23908B45C8489"
  249.     . "8488D148500000000488B85900000004801D0C70000000000B"
  250.     . "8010000004883C4605DC390909090909090909090"
  251.     MCode(MyFunc, A_PtrSize=8 ? x64:x32)
  252.   }
  253.   ;--------------------------------------
  254.   ; 统计字库文字的个数和宽高,将解释文字存入数组并删除<>
  255.   ;--------------------------------------
  256.   wenzitab:=[], num:=0, wz:="", j:=""
  257.   Loop, Parse, wenzi, |
  258.   {
  259.     v:=A_LoopField, txt:="", e1:=cha1, e0:=cha0
  260.     ; 用角括号输入每个字库字符串的识别结果文字
  261.     if RegExMatch(v,"<([^>]*)>",r)
  262.       v:=StrReplace(v,r), txt:=r1
  263.     ; 可以用中括号输入每个文字的两个容差,以逗号分隔
  264.     if RegExMatch(v,"\[([^\]]*)]",r)
  265.     {
  266.       v:=StrReplace(v,r), r2:=""
  267.       StringSplit, r, r1, `,
  268.       e1:=r1, e0:=r2
  269.     }
  270.     ; 记录每个文字的起始位置、宽、高、10字符的数量和容差
  271.     StringSplit, r, v, .
  272.     w:=r1, v:=base64tobit(r2), h:=StrLen(v)//w
  273.     if (r0<2 or w>sw or h>sh or StrLen(v)!=w*h)
  274.       Continue
  275.     if InStr(c,"-")
  276.     {
  277.       r:=e1, e1:=e0, e0:=r, v:=StrReplace(v,"1","_")
  278.       v:=StrReplace(StrReplace(v,"0","1"),"_","0")
  279.     }
  280.     len1:=StrLen(StrReplace(v,"0"))
  281.     len0:=StrLen(StrReplace(v,"1"))
  282.     e1:=Round(len1*e1), e0:=Round(len0*e0)
  283.     j.=StrLen(wz) "|" w "|" h
  284.       . "|" len1 "|" len0 "|" e1 "|" e0 "|"
  285.     wz.=v, wenzitab[++num]:=Trim(txt)
  286.   }
  287.   IfEqual, wz,, Return, 0
  288.   ;--------------------------------------
  289.   ; wz 使用Astr参数类型可以自动转为ANSI版字符串
  290.   ; in 输入各文字的起始位置等信息,out 返回结果
  291.   ; ss 等为临时内存,jiange 超过间隔就会加入*号
  292.   ;--------------------------------------
  293.   mode:=InStr(c,"**") ? 2 : InStr(c,"*") ? 1 : 0
  294.   c:=RegExReplace(c,"[*\-]"), jiange:=5, num*=7
  295.   VarSetCapacity(in,num*4,0), i:=-4
  296.   Loop, Parse, j, |
  297.     if (A_Index<=num)
  298.       NumPut(A_LoopField, in, i+=4, "int")
  299.   VarSetCapacity(gs, sw*sh)
  300.   VarSetCapacity(ss, sw*sh, Asc("0"))
  301.   k:=StrLen(wz)*4
  302.   VarSetCapacity(s1, k, 0), VarSetCapacity(s0, k, 0)
  303.   VarSetCapacity(out, 1024*4, 0)
  304.   if DllCall(&MyFunc, "int",mode, "uint",c
  305.     , "int",jiange, "ptr",Scan0, "int",Stride
  306.     , "int",sx, "int",sy, "int",sw, "int",sh
  307.     , "ptr",&gs, "ptr",&ss
  308.     , "Astr",wz, "ptr",&s1, "ptr",&s0
  309.     , "ptr",&in, "int",num, "ptr",&out)
  310.   {
  311.     ocr:="", i:=-4  ; 返回第一个文字的中心位置
  312.     x:=NumGet(out,i+=4,"int"), y:=NumGet(out,i+=4,"int")
  313.     w:=NumGet(out,i+=4,"int"), h:=NumGet(out,i+=4,"int")
  314.     rx:=x+w//2, ry:=y+h//2
  315.     While (k:=NumGet(out,i+=4,"int"))
  316.       v:=wenzitab[k//7], ocr.=v="" ? "*" : v
  317.     Return, 1
  318.   }
  319.   Return, 0
  320. }

  321. MCode(ByRef code, hex)
  322. {
  323.   ListLines, Off
  324.   bch:=A_BatchLines
  325.   SetBatchLines, -1
  326.   VarSetCapacity(code, StrLen(hex)//2)
  327.   Loop, % StrLen(hex)//2
  328.     NumPut("0x" . SubStr(hex,2*A_Index-1,2)
  329.       , code, A_Index-1, "char")
  330.   Ptr:=A_PtrSize ? "Ptr" : "UInt"
  331.   DllCall("VirtualProtect", Ptr,&code, Ptr
  332.     ,VarSetCapacity(code), "uint",0x40, Ptr . "*",0)
  333.   SetBatchLines, %bch%
  334.   ListLines, On
  335. }

  336. base64tobit(s) {
  337.   ListLines, Off
  338.   s:=RegExReplace(s,"\s+")
  339.   Chars:="0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  340.     . "abcdefghijklmnopqrstuvwxyz"
  341.   SetFormat, IntegerFast, d
  342.   StringCaseSense, On
  343.   Loop, Parse, Chars
  344.   {
  345.     i:=A_Index-1, v:=(i>>5&1) . (i>>4&1)
  346.       . (i>>3&1) . (i>>2&1) . (i>>1&1) . (i&1)
  347.     s:=StrReplace(s,A_LoopField,v)
  348.   }
  349.   StringCaseSense, Off
  350.   s:=SubStr(s,1,InStr(s,"1",0,0)-1)
  351.   ListLines, On
  352.   Return, s
  353. }

  354. bit2base64(s) {
  355.   ListLines, Off
  356.   s:=RegExReplace(s,"\s+")
  357.   s.=SubStr("100000",1,6-Mod(StrLen(s),6))
  358.   s:=RegExReplace(s,".{6}","|$0")
  359.   Chars:="0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  360.     . "abcdefghijklmnopqrstuvwxyz"
  361.   SetFormat, IntegerFast, d
  362.   Loop, Parse, Chars
  363.   {
  364.     i:=A_Index-1, v:="|" . (i>>5&1) . (i>>4&1)
  365.       . (i>>3&1) . (i>>2&1) . (i>>1&1) . (i&1)
  366.     s:=StrReplace(s,v,A_LoopField)
  367.   }
  368.   ListLines, On
  369.   Return, s
  370. }


  371. /************  机器码的C源码 ************

  372. int __attribute__((__stdcall__)) OCR( int mode
  373.   , unsigned int c, int jiange, unsigned char * Bmp
  374.   , int Stride, int sx, int sy, int sw, int sh
  375.   , unsigned char * gs, char * ss
  376.   , char * wz, int * s1, int * s0
  377.   , int * in, int num, int * out )
  378. {
  379.   int x, y, o=sy*Stride+sx*4, j=Stride-4*sw, i=0;
  380.   int o1, o2, w, h, max, len1, len0, e1, e0;
  381.   int sx1=0, sy1=0, sw1=sw, sh1=sh, Ptr=0;

  382.   //准备工作一:先将图像各点在ss中转化为01字符
  383.   if (mode==0)    //颜色模式
  384.   {
  385.     int R=(c>>16)&0xFF, G=(c>>8)&0xFF, B=c&0xFF;
  386.     for (y=0; y<sh; y++, o+=j)
  387.       for (x=0; x<sw; x++, o+=4, i++)
  388.         if (Bmp[2+o]==R && Bmp[1+o]==G && Bmp[o]==B)
  389.           ss[i]='1';
  390.   }
  391.   else if (mode==1)    //灰度阀值模式
  392.   {
  393.     c=(c+1)*128;
  394.     for (y=0; y<sh; y++, o+=j)
  395.       for (x=0; x<sw; x++, o+=4, i++)
  396.         if (Bmp[2+o]*38+Bmp[1+o]*75+Bmp[o]*15<c)
  397.           ss[i]='1';
  398.   }
  399.   else    //mode==2,边缘灰差模式
  400.   {
  401.     for (y=0; y<sh; y++, o+=j)
  402.     {
  403.       for (x=0; x<sw; x++, o+=4, i++)
  404.         gs[i]=(Bmp[2+o]*38+Bmp[1+o]*75+Bmp[o]*15)>>7;
  405.     }
  406.     w=sw-1; h=sh-1;
  407.     for (y=1; y<h; y++)
  408.     {
  409.       for (x=1; x<w; x++)
  410.       {
  411.         i=y*sw+x; j=gs[i]+c;
  412.         if (gs[i-1]>j || gs[i+1]>j
  413.           || gs[i-sw]>j || gs[i+sw]>j)
  414.             ss[i]='1';
  415.       }
  416.     }
  417.   }

  418.   //准备工作二:生成s1、s0查表数组
  419.   for (i=0; i<num; i+=7)
  420.   {
  421.     o=o1=o2=in[i]; w=in[i+1]; h=in[i+2];
  422.     for (y=0; y<h; y++)
  423.     {
  424.       for (x=0; x<w; x++)
  425.       {
  426.         if (wz[o++]=='1')
  427.           s1[o1++]=y*sw+x;
  428.         else
  429.           s0[o2++]=y*sw+x;
  430.       }
  431.     }
  432.   }

  433.   //正式工作:ss中每一点都进行一次全字库匹配
  434.   NextWenzi:
  435.   o=sy1*sw+sx1; o1=1-sw*sh1;
  436.   for (x=0; x<sw1; x++, o+=o1)
  437.   {
  438.     for (y=0; y<sh1; y++, o+=sw)
  439.     {
  440.       for (i=0; i<num; i+=7)
  441.       {
  442.         w=in[i+1]; h=in[i+2];
  443.         if (x+w>sw1 || y+h>sh1)
  444.           continue;
  445.         o2=in[i]; len1=in[i+3]; len0=in[i+4];
  446.         e1=in[i+5]; e0=in[i+6];
  447.         max=len1>len0 ? len1 : len0;
  448.         for (j=0; j<max; j++)
  449.         {
  450.           if (j<len1 && ss[o+s1[o2+j]]!='1' && (--e1)<0)
  451.             goto NoMatch;
  452.           if (j<len0 && ss[o+s0[o2+j]]!='0' && (--e0)<0)
  453.             goto NoMatch;
  454.         }
  455.         //成功找到文字或图像
  456.         if (Ptr==0)
  457.         {
  458.           out[0]=sx+x; out[1]=sy+y;
  459.           out[2]=w; out[3]=h; Ptr=4;
  460.           //找到第一个字就确定后续查找的上下范围和右边范围
  461.           sy1=y-h; sh1=h*3; sw1=h*10+100;
  462.           if (sy1<0)
  463.             sy1=0;
  464.           if (sh1>sh-sy1)
  465.             sh1=sh-sy1;
  466.         }
  467.         else if (x>jiange)  //与前一字间隔较远就添加*号
  468.           out[Ptr++]=-1;
  469.         out[Ptr++]=i+7;
  470.         if (Ptr>1021)    //返回的int数组中元素个数不超过1024
  471.           goto ReturnOK;
  472.         //继续从当前文字右边再次查找
  473.         sx1+=x+w;
  474.         if (sw1>sw-sx1)
  475.           sw1=sw-sx1;
  476.         goto NextWenzi;
  477.         //------------
  478.         NoMatch:
  479.         continue;
  480.       }
  481.     }
  482.   }
  483.   if (Ptr==0)
  484.     return 0;
  485.   ReturnOK:
  486.   out[Ptr]=0;
  487.   return 1;
  488. }

  489. */
  490. ;============ 脚本结束 =================;
复制代码
 楼主| 发表于 2017-10-23 17:41:36 | 显示全部楼层
大家拿起手中的武器给坏蛋,尽情的扣分吧。
回复

使用道具 举报

发表于 2017-10-23 18:52:28 | 显示全部楼层
看不懂,但支持酒大发干货
回复

使用道具 举报

发表于 2017-10-24 11:55:48 | 显示全部楼层
如果用userscript的话可以直接在页面内查找内容,免去ocr过程
回复

使用道具 举报

发表于 2018-1-4 09:32:57 | 显示全部楼层
tt911大佬,麻烦重新分享下《单文件,袖珍实用记事本的替代品,显行行号,列选择,总在最前面,无限撤销操作 》这个附件,CT网盘下载不了。感谢大佬!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1|闽公网安备35020302032614号 )

GMT+8, 2026-9-30 21:52

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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