请高手帮我看看这段代码为何出错,关于定义热键的。(30分)

  • 主题发起人 主题发起人 batconv
  • 开始时间 开始时间
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
请看这段代码;
if GlobalFindAtom('ShowHKey') = 0 then
begin {注册全局热键Ctrl + Alt + U}
IDshow:=GlobalAddAtom('ShowHKey')-$C000;
RegisterHotKey(handle,IDshow,MOD_CONTROL+MOD_Alt,VK_U);
end else halt; //IDshow:=GlobalFindAtom('ShowHKey');

编译会出现错误“Project temp.exe raised exception class EAccessViolation with message 'Access violation at address 00475DDA in module ' temp.exe'. Read of address 013620F8'.Process stopped.use step or run to continue”

如果改用注释的那个句子,热键会有时能用有时不能用,请高手指教。
 
IDshow:=GlobalAddAtom('ShowHKey');
 
用这个句子热键会有时能用有时不能用:(
 
是编译的时候出现错误还是运行的时候?
 
如果出现就是在编译的时候,编译不能成功。但是如果是第一次打开delphi编译就能顺利通过,重新编译后就会出现上述问题,现在我把IF语句注释了,问题反而没有了,郁闷,不知有没有更好的解决办法,等待中...
 
用完全局热键,程序关闭的时候你注销它没?看你的描述可能用完没注销引起的。


procedure TmainForm.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(handle,$79);
GlobalDeleteAtom($79); //注销全局热键
end;

把$79换成你的注册值,手头没有手册,懒得查了。
 
to 白乐天
已经在程序退出的过程中这样释放了
 
多人接受答案了。
 
后退
顶部