我用DLL方式实现的,所以只要按了指定的启动键,就会自动运行一系列的模拟键盘的操作.
可是有时候,我们希望这样的操作一系列操作一直不停地执行,直到我们按了定义的"终止键"
后才停止.
这样就有一个问题,我怎么让我的按键精灵实现这个功能呢?
我想的是设一个全局的变量,然后在一个死循环里检查这个变量,如果这个变量改变了就跳出
这个死循环.然后再在另一个地方让我们按了"终止键"后即把这个全局变量改变.这样就实现
了我事先想好的功能.
可是,我在实现中发现,如果只是一个DLL的话,因为开始已经进入死循环了,所以后来我的按键
它也没有处理了,但是我如果写两个DLL的话,怎么做到共享变量呢?而且我看按键精灵程序只
有一个DLL存在,所以应该可以用一个DLL实现这个功能的.
哪个高手能给一点指导?最好有一些专对性的代码最好.
谢谢!
可是有时候,我们希望这样的操作一系列操作一直不停地执行,直到我们按了定义的"终止键"
后才停止.
这样就有一个问题,我怎么让我的按键精灵实现这个功能呢?
我想的是设一个全局的变量,然后在一个死循环里检查这个变量,如果这个变量改变了就跳出
这个死循环.然后再在另一个地方让我们按了"终止键"后即把这个全局变量改变.这样就实现
了我事先想好的功能.
可是,我在实现中发现,如果只是一个DLL的话,因为开始已经进入死循环了,所以后来我的按键
它也没有处理了,但是我如果写两个DLL的话,怎么做到共享变量呢?而且我看按键精灵程序只
有一个DLL存在,所以应该可以用一个DLL实现这个功能的.
哪个高手能给一点指导?最好有一些专对性的代码最好.
谢谢!
这是DLL部分代码,ctrl+c启动,只是模拟鼠标点击而已。设想的是按ctrl+x退出。
gameover为我说的那个全局变量。
unit HKkeyProc;
interface
uses
Windows, Messages;
var
hNextHookProc: HHook;
procSaveExit: Pointer;
gameover: boolean; function KeyboardHookHandler(iCode: integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall; export;
function EnableHotKeyHook:BOOL;Export;
function DisableHotKeyHook:BOOL;export;
procedure HotKeyHookExit; far; implementation function keyboardHookHandler(iCode: integer; wParam: WPARAM; lParam: LPARAM):LRESULT;stdcall; export;
const
_keypressMaSK = $80000000;
begin
result:=0;
if icode<0 then
begin
result:=CallNextHookEx(hNextHookProc,icode,wParam,lparam);
exit;
end; if ((lparam and _KeyPressMask)=0)
and(getkeystate(vk_control)<0)
and(wParam=Ord('C'))
then
begin
result:=1;
gameover:=true;
while gameover do
begin
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
sleep(2000);
end;
end
else
begin
gameover:=false;
end;
end; function Enablehotkeyhook: bool; export;
begin
result:=false;
if hnexthookproc<>0 then exit; hnexthookproc:=setwindowshookex(WH_KEYBOARD, KeyboardHookHandler, Hinstance, 0);
result:= hnextHookProc<>0;
end;
function Disablehotkeyhook:BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc);
hNexthookProc:=0;
Messagebeep(0);
end;
result:=HnextHookproc=0;
end;
procedure hotkeyhookexit;
begin
if hNexthookProc<>0 then DisableHotkeyHook;
exitproc:=procSaveExit;
end;
end.
多个dll或exe中全局变量要用到内存文件映射,
操作的不是文件
建议看看《Windows核心编程》
有没有让我这个新手能一下子写出按键精灵的方法呢?我其他部分都写出来了.
你的循环放在子线程当中,此时整个进程都会挂起,但是放在了线程中就能中调用DLL来中断整个进程了.