用AutoHotKey屏蔽QQ弹窗

已经好久没有更新博客了,沿袭博客上全部不务正业的传统,今天向大家介绍神器AHK(AutoHotKey)。

从AutoHotKey名字上来看,这个软件是一个管理hotkey(热键)的一个小工具,广泛用于:
1. 游戏辅助(打KOF的时候,一键放大招)
2. 键位替换(键盘某个按键挂了,用另外一个替换)
3. 自定义快捷键
4. 其他行为,例如像笔者这样瞎折腾

今天我们要学习如何通过AHK来屏蔽QQ弹窗。


#Persistent
Gui +LastFound
hWnd := WinExist()

DllCall( "RegisterShellHookWindow", UInt, hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )

return

ShellMessage(wParam, lParam) {
Local this_id, title, class, width, height

If ( wParam = 1 ) ; HSHELL_WINDOWCREATED := 1
{
this_id := lParam
WinGetTitle, title, ahk_id %this_id%
WinGetClass, class, ahk_id %this_id%
WinGetPos, , , width, height, ahk_id %this_id%
if (title ~= "腾讯.*新闻" && class == "TXGuiFoundation" && width=314 && height=212) {
; TrayTip, window blocked, Title:`t%title%`nClass:`t%class%
WinClose, ahk_id %this_id%
}
if (class == "#32770" && width=627 && height=471) {
TrayTip, window blocked, Title:`t%title%`nClass:`t%class%
WinClose, ahk_id %this_id%
}
}
}

然后呢,没有然后了。。。

(拜托,多讲一点嘛) 好啊~ 手册在这里

Posted in Uncategorized | Leave a comment

CubieTruck – 上手

记得上上个月,我理性的入手了一个高端玩具,据说双核ARM处理器,搭配2G的RAM,可以外接SATA硬盘。

价格算合适,功耗低于5w,非常适合做开发机,下载机啥的。

但是后来因为HDMI接口的问题,Linux配置不上,所以搁置了。
兰后,兰后奇迹发生了。为了用HDMI调试这个家伙,我再次理性发作.

终于看到的linux的操作符,这货是基于arm的debian家linux。
兴奋的用apt部署了开发环境。

兰后,兰后木有了。。。

Posted in Uncategorized | Leave a comment

rsync over SSH

rsync和scp是跨机器文件拷贝的两种常用手段。

scp使用方便,凡事SSH2支持的机器都可以直接使用;效率的底下,尤其是在小文件多的场景,不得不提前打个包传输。
rsync的优势正是拷贝效率,自动跳过已经存在的文件,对小文件的优化尤其明显;缺点是要加装额外的服务。

但是今天从朋友学习到,rsync over ssh,克服了需要rsync-service的弱点。

rsync -azv -essh [src] [dst]

这样remote可以完全不用任何服务,即可使用优质的rsync协议。

现已加入.bash_alias
alias rscp='rsync -azv -essh'

Posted in Uncategorized | Leave a comment

新玩具 – CubieTruck

前几周前预订了一个某知名开源硬件的新产品。
今天一早,顺丰驾到,新玩具收到了。

迅速开机测试一下,崭新的Android系统。。。
妈蛋!刷成Linux系统,黑屏了。。。

不会挂了吧,网上查了一下午资料,原来是Linux固件不支持VGA输出,只支持HDMI,肿么破。。。

妈蛋!丢一边去了。。。

Posted in Uncategorized | Leave a comment

面试题-汉诺塔增强版

汉诺塔本身是一个很简单的算法题。游戏规则,百度一下

规则总结一下:
1. 三个杆子 A B C
2. n个大小不一的圆盘
3. 无论何时小盘必须在大盘上面
4. 一次只能挪动一个盘
5. 初始状态n个盘从小到大放在A柱上
6. 目标状态n个盘从小到大放在C柱上
这次面试官同学为了增加难度和趣味性,给我的多设置了一个限制条件。
7. C柱很特别,只能从B柱挪往C柱,不能由A柱挪动到C柱

虽然自认为蛮熟悉汉诺塔的算法。但是考虑了5min也没有什么结果。

现在终于冷静了,其实很简单。。

===============答案分割线=================

在此之前,需要我们先撰写一个简单的汉诺塔小程序:

#include<stdio.h>
// move n pans from x to y, with z
void f(int n, char x, char y, char z) {
    if (n>1) f(n-1, x, z, y);
    printf("[%d] %c->%c\n", n, x, y);
    if (n>1) f(n-1, z, y, x);
}
int main () {
    int n;
    scanf("%d", &n);
    f(n, 'A', 'C', 'B');
    return 0;
}

程序不难,本身就挺简单的题目。

判断条件7,应该这样插入递归结构中。


#include<stdio.h>
// move n pans from x to y, with z
void f(int n, char x, char y, char z) {
    if (x=='A' && y=='C') {
        if (n>1) f(n-1, 'A', 'C', 'B');
        printf("[%d] A->B\n", n);
        if (n>1) f(n-1, 'C', 'A', 'B');
        printf("[%d] B->C\n", n);
        if (n>1) f(n-1, 'A', 'C', 'B');
    } else {
        if (n>1) f(n-1, x, z, y);
        printf("[%d] %c->%c\n", n, x, y);
        if (n>1) f(n-1, z, y, x);
    }
}
int main () {
    int n;
    scanf("%d", &n);
    f(n, 'A', 'C', 'B');
    return 0;
}

最后的结论是:脑袋迟缓了,需要修炼。

Posted in Uncategorized | Leave a comment