钩子函数可以解决前两个问题,第三个太怪了不妨将system.ini中的Shell=???改为shell=yourexe.exe,然后不知你是否就可以Do everything you like.
钩子函数SetWindowsHookEx可以设定几种不同类型的钩子。
其原型为
HHOOK SetWindowsHookEx(
int idHook,//Hook的类型
HOOKPROC lpfn,//Hook函数的lp
HINSTANCE hModule,//Hook所在程序的HINSTANCE
DWORD dwThreadId//安装Hook的目标线程的ID
);
作用域为Thread or Process的钩子类型可以是:
WH_CALLWNDPROC,WH_CALLWNDPROCRET,WH_CBT,WH_DEBUG,WH_GETMESSAGE,
作用域仅为System的有:
WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_SYSMSGFILTER
作用域可为System or Thread 的有:
WH_KEYBOARD,WH_SHELL,WS_MSGFILTER,WH_MOUSE
关于相应的钩子的详细信息可看MSDN相关文档,但一般由名字也可略知一二。
*如果dwThreadId为NULL或指向另一个进程中的Thread,lpfn必须指向DLL中的fn.此时hModule为DLL的标志。
*如果dwThreadId指向当前进程中的Thread,hModule必须为NULL。
*如果dwThreadId为NULL,则Hook过程同存在的所有Thread关联。
*在Hook中可调用CallNextHookEx.
*程序结束前必须调用UnhookWindowsHookEx解除钩子。
OK?
You can try it yourself!!
*