当前位置: 首页 > news >正文

Delphi 发送按键

const
ExtendedVKeys : set of byte =
      [VK_Up,VK_Down,VK_Left,VK_Right,VK_Home,VK_End,VK_Prior, {Pg Up} VK_Next, {PgDn}VK_Insert,VK_Delete];
//发送按键
procedure SendCardNo(CardNo:String);
 var
  i :integer;
begin
 for i:=1 to length(CardNo) do
 begin
    SendKeyDown(vkKeyScan(CardNo[i]),1, False);
 end;


end;
procedure SendKeysBack(Key:char);
begin

  SendKeyDown(vkKeyScan(Key),1, False);

end;


Procedure SendKeyDown(VKey: Byte;NumTimes : Word;GenUpMsg : Boolean);
 var
   Cnt : Word;
   ScanCode : Byte;
   NumState : Boolean;
   KeyBoardState : TKeyboardState;
  begin
  If (VKey=VK_NUMLOCK) then
    begin
     NumState:=ByteBool(GetKeyState(VK_NUMLOCK) and 1);
     GetKeyBoardState(KeyBoardState);
   If NumState then
     KeyBoardState[VK_NUMLOCK]:=(KeyBoardState[VK_NUMLOCK] and not 1)
   else
     KeyBoardState[VK_NUMLOCK]:=(KeyBoardState[VK_NUMLOCK] or 1);
     SetKeyBoardState(KeyBoardState);
     exit;
   end;
  ScanCode:=Lo(MapVirtualKey(VKey,0));
  For Cnt:=1 to NumTimes do
    If (VKey in ExtendedVKeys)then
    begin
      KeyboardEvent( VKey, ScanCode, KEYEVENTF_EXTENDEDKEY);
      If (GenUpMsg ) then
       KeyboardEvent( VKey, ScanCode, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP)
    end
    else
    begin
      KeyboardEvent(VKey, ScanCode, 0) ;
      If (GenUpMsg) then
        KeyboardEvent(VKey, ScanCode, KEYEVENTF_KEYUP);
    End;
 end;
 Procedure KeyboardEvent(VKey, ScanCode : Byte;Flags : Longint);
 var
   KeyboardMsg : TMsg;
   Wait :boolean;
 begin
 wait :=true;
  keybd_event(VKey, ScanCode, Flags,0);
  If (Wait) then While (
      PeekMessage(KeyboardMsg,0,WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) do
        begin
         TranslateMessage(KeyboardMsg);
         DispatchMessage( KeyboardMsg);
        end;
  end;
procedure SetCardLength(value: integer);
begin
CardLength:=Value;
end;

procedure SetSendKey(value: boolean);
begin
SendKey:=Value;
end;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lostcity1/archive/2006/03/23/636077.aspx

相关文章:

  • Python - 默认参数的一次性求值
  • Internet TV 影音娱乐新生活
  • Linux 引导过程内幕
  • android service 学习(上)
  • Azure Redis Cache (4) 配置和管理Redis Cache
  • WPF VS Apollo
  • 开始忙碌
  • 常用CSS样式
  • [编]使用AutoCompleteExtender实现文本框自动匹配
  • vim替换^m字符
  • 数据结构 Joseph
  • android GC内存泄露问题
  • 协助ScriptCase7.1做些汉化矫正工作
  • codility上的问题 (21) Upsilon 2012
  • Go语言语法汇总
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《剑指offer》分解让复杂问题更简单
  • 〔开发系列〕一次关于小程序开发的深度总结
  • android 一些 utils
  • canvas绘制圆角头像
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript异步流程控制的前世今生
  • Material Design
  • overflow: hidden IE7无效
  • Python学习之路13-记分
  • SwizzleMethod 黑魔法
  • ViewService——一种保证客户端与服务端同步的方法
  • Wamp集成环境 添加PHP的新版本
  • 开源地图数据可视化库——mapnik
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何设计一个比特币钱包服务
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 项目管理碎碎念系列之一:干系人管理
  • 学习笔记TF060:图像语音结合,看图说话
  • 容器镜像
  • ​MySQL主从复制一致性检测
  • ​如何在iOS手机上查看应用日志
  • #laravel 通过手动安装依赖PHPExcel#
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (3)选择元素——(17)练习(Exercises)
  • (4)事件处理——(7)简单事件(Simple events)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Oracle)SQL优化技巧(一):分页查询
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十五)使用Nexus创建Maven私服
  • (一) springboot详细介绍
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复