社区
Delphi
帖子详情
键盘控制如何做
zhanghy1314
2002-06-21 04:43:22
如何做呀
如果用,1。2,3等键当做回车或别的键用,
如何实现翻页等
...全文
42
7
打赏
收藏
键盘控制如何做
如何做呀 如果用,1。2,3等键当做回车或别的键用, 如何实现翻页等
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bomdy
2002-06-21
打赏
举报
回复
用窗口的按键事件只能取道给这个程序的按键,如果输入焦点不在这个窗口中就无法处理。
我的建议是按naughtyboy的方法用Hook截取系统的按键消息,然后用
keybd_event() 或 SendInput()(Win NT/2k适用)改变按键的动作。
surfguy
2002-06-21
打赏
举报
回复
onkeydown中加入:
case key of
VK_1:key:=VK_ENTER;
VK_2:key:=VK_ESCAPE;
end;
surfguy
2002-06-21
打赏
举报
回复
onkeydown中加入:
case key of
VK_1:key:=VK_ENTER;
VK_2:key:=VK_ESCAPE;
end;
surfguy
2002-06-21
打赏
举报
回复
不用那么麻烦吧!
在keydown中加入代码:
Case Key of :
1: Key := #13; //回车
2: Key := #27; //ESCAPE
end;
naughtyboy
2002-06-21
打赏
举报
回复
---- 在许多系统中,出于安全或其它原因,常常要求随时对键盘进行监控,一个专业的
监控程序必须具备两点,一是实时;二是作为指示图标运行。实际应用中把利用Hook(
即钩子)技术编写的应用程序添加到Windows的任务栏的指示区中就能够很好的达到这个
目的。我在参考了API帮助文档基础上,根据在Delphi开发环境中的具体实现分别对这两
部分进行详细论述。
一、Hook(钩子)的实现:
---- Hook是应用程序在Microsoft Windows 消息处理过程中设置的用来监控消息流并且
处理系统中尚未到达目的窗口的某一类型消息过程的机制。如果Hook过程在应用程序中
实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在
运行中动态调用它,它能实时对系统进行监控。根据需要,我们采用的是在DLL中实现H
ook的方式。
---- 1.新建一个导出两个函数的DLL文件,在hookproc.pas中定义了钩子具体实现过程
。代码如下:
library keyspy;
uses
windows, messages, hookproc in 'hookproc.pas';
exports
setkeyhook,
endkeyhook;
begin
nexthookproc:=0;
procsaveexit:=exitproc;
exitproc:=@keyhookexit;
end.
2.在Hookproc.pas中实现了钩子具体过程:
unit hookproc;
interface
uses
Windows, Messages, SysUtils, Controls, StdCtrls;
var
nexthookproc:hhook;
procsaveexit:pointer;
function keyboardhook(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
function setkeyhook:bool;export;//加载钩子
function endkeyhook:bool;export;// 对 钩子
procedure keyhookexit;far;
const
afilename='c:\debug.txt';//将键盘输入动作写入文件中
var
debugfile:textfile;
implementation
function keyboardhookhandler(icode:integer;wparam:wparam;
lparam:lparam):lresult;stdcall;export;
begin
if icode<0 then
begin
result:=callnexthookex(hnexthookproc,icode,wparam,lparam);
exit;
end;
assignfile(debugfile,afilename);
append(debugfile);
if getkeystate(vk_return)<0 then
begin
writeln(debugfile,'');
write(debugfile,char(wparam));
end
else
write(debugfile,char(wparam));
closefile(debugfile);
result:=0;
end;
function endkeyhook:bool;export;
begin
if nexthookproc<>0 then begin
unhookwindowshookex(nexthookproc);
nexthookproc:=0;
messagebeep(0); end;
result:=hnexthookproc=0;
end;
procedure keyhookexit;far;
begin
if nexthookproc<>0 then endkeyhook;
exitproc:=procsaveexit; end;
end.
---- 二、Win95/98使用任务栏右方指示区来显示应用程序或工具图标对指示区图标的操
作涉及了一个API函数Shell_NotifyIcon,它有两个参数,一个是指向TnotifyIconData
结构的指针,另一个是要添加、删除、改动图标的标志。通过该函函数将应用程序的图
标添加到指示区中,使其作为图标运行,增加专业特色。当程序起动后,用鼠标右键点击
图标,则弹出一个菜单,可选择sethook或endhook。
unit kb;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms,
Dialogs,
StdCtrls, Menus,shellapi;
const
icon_id=1;
MI_iconevent=wm_user+1;//定义一个用户消息
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
sethook1: TMenuItem;
endhook1: TMenuItem;
N1: TMenuItem;
About1: TMenuItem;
Close1: TMenuItem;
Gettext1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure sethook1Click(Sender: TObject);
procedure endhook1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Close1Click(Sender: TObject);
private
{ Private declarations }
nid:tnotifyicondata;
normalicon:ticon;
public
{ Public declarations }
procedure icontray(var msg:tmessage);
message mi_iconevent;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function setkeyhook:bool;external 'keyspy.dll';
function endkeyhook:bool;external 'keyspy.dll';
procedure tform1.icontray(var msg:tmessage);
var
pt:tpoint;
begin
if msg.lparam=wm_lbuttondown then
sethook1click(self);
if msg.LParam=wm_rbuttondown then
begin
getcursorpos(pt);
setforegroundwindow(handle);
popupmenu1.popup(pt.x,pt.y);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
normalicon:=ticon.create;
application.title:=caption;
nid.cbsize:=sizeof(nid);
nid.wnd:=handle;
nid.uid:=icon_id;
nid.uflags:=nif_icon or nif_message or nif_tip;
nid.ucallbackmessage:=mi_iconevent;
nid.hIcon :=normalicon.handle;
strcopy(nid.sztip,pchar(caption));
nid.uFlags:=nif_message or nif_icon or nif_tip;
shell_notifyicon(nim_add,@nid);
SetWindowLong(Application.Handle,
GWL_EXSTYLE,WS_EX_TOOLWINDOW);
end;
procedure TForm1.sethook1Click(Sender: TObject);
begin
setkeyhook;
end;
procedure TForm1.endhook1Click(Sender: TObject);
begin
endkeyhook;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
nid.uFlags :=0;
shell_notifyicon(nim_delete,@nid);
end;
procedure TForm1.Close1Click(Sender: TObject);
begin
application.terminate;
end;
yansea
2002-06-21
打赏
举报
回复
楼上,keypress中的key是char型的吧~~
key = #13 回车,
不过在keydown里没有问题。
票票飞扬
2002-06-21
打赏
举报
回复
KeyPress事件
Case Key of :
1: Key := 13; //回车
2: Key := 27; //ESCAPE
end;
控制
程序中加入
键盘
控制
又是哭瞎的调试过程,不是码农,不
做
很深入地追究,只想实现想要的效果,随便记录下。期待有更好的想法。 设计目标:方便小车调试,能用
键盘
控制
小车急停与移动。 以前在MFC中也用过
键盘
控制
很简单,直接检测
键盘
事件即可。在ROS下也有
键盘
控制
移动机器人的源码,但是由于自己设计的
控制
部分是不断地发布速度话题的,如果采用
控制
一个节点
键盘
控制
一个节点,发布的速度话题就很混乱,小车应该停不下来。暂时没有...
ubuntu ROS python
键盘
控制
小车移动
ubuntu ros 用
键盘
控制
小车移动
ROS python 实现
键盘
控制
底盘移动
ROS python 实现
键盘
控制
底盘移动 解决手柄偶尔失灵问题, 如: 1.底盘移动震动导致接收断开 2.手柄没电问题
(无人机方向)ros小白之
键盘
控制
无人机(终端方式)
(无人机方向)ros小白之
键盘
控制
无人机(终端方式)
Webots 机器人仿真平台(七)
键盘
控制
小车
键盘
控制
小车1 新建C++
控制
器2 代码说明3演示效果 上一篇博客中我们利用距离传感器让小车在环境中实现避障行走,但是在实际的使用情况下我们更加希望让小车按我们指定的路线行进,即遥控小车行走,在这篇博客中我们使用
键盘
上的方向键
控制
小车前后左右运动,实现遥控操作机器人或者小车。 1 新建C++
控制
器 新建一个C++
控制
器并命名为 keyboard ,将以下代码填入 keyboard.cpp中然后编...
Delphi
5,930
社区成员
262,938
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章