如何使用SendMessage发送按键组合,例如:Ctrl+A

2023-05-16

ExpandedBlockStart.gif 代码
var    
      hwnd   :   Integer;   
  
begin    
      hwnd   :
=    FindWindow( ' Notepad ' ,    nil );   
      SetForegroundWindow(hwnd);   
      keybd_event(VK_CONTROL,   MapVirtualKey(VK_CONTROL,   
0 ),    0 ,    0 );   
      keybd_event(Ord(
' A ' ),   MapVirtualKey(Ord( ' A ' ),    0 ),    0 ,    0 );   
      keybd_event(Ord(
' A ' ),   MapVirtualKey(Ord( ' A ' ),    0 ),   KEYEVENTF_KEYUP,    0 );   
      keybd_event(VK_CONTROL,   MapVirtualKey(VK_CONTROL,   
0 ),   KEYEVENTF_KEYUP,    0 )   
  
end ;

 

============================================================================

--------------第一种方法------------   
  这种方法在中文输入法打开的情况下中西文都正常,   
  但我不想用这种费事的办法.   
  ------------------------------------   
  //模拟按键函数   
  ExpandedBlockStart.gif代码

procedure    TForm1.SendKeys(sSend: string );   
  
var    
          i:integer;   
          Sstr:
string ;   
          focushld,windowhld:hwnd;   
          threadld:dword;   
          ch:   byte;   
  
begin    
      windowhld:
= GetForegroundWindow;   
      threadld:
= GetWindowThreadProcessId(Windowhld, nil );   
      AttachThreadInput(GetCurrentThreadId,threadld,true);   
      Focushld:
= getfocus;   
      getcursorpos(p);   
// 查鼠标坐标   
      Focushld:
= WindowFromPoint(p);    // 返回句柄   
      AttachThreadInput(GetCurrentThreadId,threadld,false);   
      
if    (focushld = 0 )    or    
            (focushld
= Self.Memo1.Handle)    or    
            (focushld
= Self.Edit1.Handle)    or    
            (focushld
= Self.Edit2.Handle)    or    
            (focushld
= SpinEdit1.Handle)      then    
          
begin    
                Exit;   
          
end ;   
      i   :
=     1 ;   
      
while    i    <=    Length(sSend)    do    
      
begin    
          ch   :
=    byte(sSend[i]);   
          
if    Windows.IsDBCSLeadByte(ch)    then    
              
begin    
                    Inc(i);   
                    SendMessage(focushld,   WM_IME_CHAR,   MakeWord(byte(sSend[i]),   ch),   
0 );   
              
end    
          
else    
              
begin    
                    SendMessage(focushld,   WM_IME_CHAR,   word(ch),   
0 );   
              
end ;   
          Inc(i);   
      
end ;   
      SendMessage(focushld,   WM_IME_CHAR,   word(
13 ),    0 );   
  
end ;   
    
  
// 定时器定时发送字符   
  
procedure    TForm1.Timer1Timer(Sender:   TObject);   
  
begin    
        SendKeys(
' ABCD1234大话西游 ' );   
  
end ;      

 

 
  --------------第二种方法------------   
  这种方法用拷贝-粘贴的方式,在记事本下正常,   
  但在WORD下毫无反应!   
  ------------------------------------   
   ExpandedBlockStart.gif 代码
procedure    TGoodDictForm.SendKey();   
  
var    
          i:integer;   
          focushld,windowhld:hwnd;   
          threadld:dword;   
          ch:   byte;   
  
begin    
      windowhld:
= GetForegroundWindow;   
      threadld:
= GetWindowThreadProcessId(Windowhld, nil );   
      AttachThreadInput(GetCurrentThreadId,threadld,true);   
      getcursorpos(p);   
// 查鼠标坐标   
      Focushld:
= WindowFromPoint(p);    // 返回句柄   
      AttachThreadInput(GetCurrentThreadId,threadld,false);   
      
if    (focushld = 0 )    or    (focushld = Self.Memo1.Handle)    then    
          
begin    
                Exit;   
          
end ;   
      SendMessage(focushld,   WM_Paste,   
0 ,    0 );   
  
end ;   
    
  
// 定时器定时发送字符   
  
procedure    TForm1.Timer1Timer(Sender:   TObject);   
  
begin    
        Edit1.SelectAll;   
        Edit1.CopyToClipboard;   
        SendKeys();   
  
end ;   

 


  要正確送出中文字符一定要依照微軟的IME機制,   單純用SendMessage   是不能夠的.   你可以把要送出的字符放在剪貼板中,   使用keybd_event     這個API送出   Ctrl   與   V   兩鍵的組合.   就能夠把中英文字串放到Word   軟件中,     
  keybd_event(VK_CONTROL,   0,   0,   0);   
  keybd_event(Ord('v'),       0,   0,   0);   
  keybd_event(Ord('v'),       0,   KEYEVENTF_KEYUP,   0);   
  keybd_event(VK_CONTROL,   0,   KEYEVENTF_KEYUP,   0);   
    
  uses   sendkey32   
  {+   =   Shift   
  ^   =   Control   
  %   =   Alt}   
  SendKeys('^X',true);     
  发送   Control+X消息   
 =====================================================================

 

ExpandedBlockStart.gif 代码
procedure    TForm1.Button1Click(Sender:   TObject);   
  
var    
      KeyState:   TKeyboardState;   
  
begin    
      GetKeyboardState(KeyState);   
      KeyState[VK_CONTROL]   :
=     not    KeyState[VK_CONTROL];    //    ctrl -> down   
      SetKeyboardState(KeyState);   
      SendMessage(Form1.Handle,   WM_KEYDOWN,   WPARAM(
' A ' ),    0 );   
      GetKeyboardState(KeyState);   
      KeyState[VK_CONTROL]   :
=     not    KeyState[VK_CONTROL];    //    ctrl -> up   
      SetKeyboardState(KeyState);   
  
end ;   
    
  
procedure    MyKeyDown( var    msg:   TWMKeyDown); message    WM_KEYDOWN;   
    
  
procedure    TForm1.MyKeyDown( var    msg:   TWMKeyDown);   
  
begin    
      
if    GetKeyState(VK_CONTROL)    <     0     then    
      
begin    
          ShowMessage(
' Ctrl   +    '     +    Chr(msg.CharCode));    //    it ' s   OK.   
       end ;   
      
inherited ;   
  
end ;

 

 

转载于:https://www.cnblogs.com/rogee/archive/2010/09/20/1832045.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用SendMessage发送按键组合,例如:Ctrl+A 的相关文章

  • vnc 端口修改、用户添加删除、批量启动停止

    2019独角兽企业重金招聘Python工程师标准 gt gt gt yum y install tiger server usr bin env bash config file 61 34 etc sysconfig vncservers
  • Docker命令详解

    最近学习Docker xff0c 将docker所有命令实验了一番 xff0c 特整理如下 xff1a docker help Usage docker OPTIONS COMMAND arg docker daemon help dock
  • rman备份rman-00554 ,rman-04005错误

    gt rman target 64 orac 到Oracle安装目录找到 network admin sqlnet ora文件 将SQLNET AUTHENTICATION SERVICES 61 NONE 修改为 SQLNET AUTHE
  • 码农学ODL之SDN入门篇

    本文作为码农学ODL系列的SDN基础入门篇 xff0c 分为两部分 第一部分 xff0c 主要讲述SDN是什么 xff0c 改变了什么 xff0c 架构是什么样的 xff0c 第二部分 xff0c 简要介绍如何去学习SDN 1 什么是SDN
  • CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建 xff0c 详情见 xff1a 搭建CAS单点登录服务器 然而前面只是简单地介绍了服务器的搭建 xff0c 其验证方式是原始的配置文件的方式 xff0c 这显然不能满足日常的需求 下面介绍下通过mysql数
  • 抽象类和接口的区别

    抽象类和接口的区别 一 抽象类 xff1a 抽象类是特殊的类 xff0c 只是不能被实例化 xff1b 除此以外 xff0c 具有类的其他特性 xff1b 重要的是抽象类可以包括抽象方法 xff0c 这是普通类所不能的 抽象方法只能声明于抽
  • 对本课程的期望

    希望自己能够通过对本课程的学习 xff0c 对C语言能有进一步的了解 xff0c 能够学会自主运用 xff0c 学习到经验技术和知识 xff0c 也希望老师能够在学习新知识时多讲解多运用 xff0c 反复练习 xff0c 以增加学生对新知识
  • 一篇文章带你搞懂JS对象的自我销毁

    在日常的JS组件开发中 xff0c 往往会有一些较为复杂的DOM操作及事件监听 xff0c 尤其是在处理UI层面的widgets时候更为明显 常常会花很多精力在对象的init上 xff0c 而当组件需要被移除时则仅仅是把所在DOM草草的re
  • LCA系列 hdu2587

    题http acm hdu edu cn showproblem php pid 61 2586 好久不写LCA了 span class hljs preprocessor include lt cstdio gt span span cl
  • AutoLISPDCL对话框设计

    AutoLISPDCL对话框设计 xff0c 代码如下 defun c viewdcl if null dcl pt setq dcl pt 39 1 1 setq dcl file getfiled 34 打开DCL文件 34 34 34
  • boost的asio接收单路大数据量udp包的方法

    开发windows客户端接收RTP视频流 xff0c 当h264视频达到1080P 60fps的时候 xff0c 按包来调用recvfrom的函数压力比较大 xff0c 存在丢包的问题 xff0c windows的完成端口的性能效果当然可以
  • Python Word2Vec使用训练好的模型生成词向量

    文本文件必须是utf 8无bom格式 from gensim models deprecated word2vec import Word2Vec model 61 Word2Vec load 39 model Word60 model 3
  • 使用dig或nslookup指定dns服务器查询域名解析

    一般来说linux下查询域名解析有两种选择 xff0c nslookup或者dig xff0c 而在使用上我觉得dig更加方便顺手 如果是在linux下的话 xff0c 只要装上dnsutils这个包就可以使用dig命令 安装bind ut
  • freeswitch系列六 freeswitch在拨号计划中通过lua实现对redis操作

    3种freeswitch访问redis方案的分析 由于项目的原因 xff0c 需要在freeswitch的拨号计划中根据redis中特定key的值 xff0c 判断后续的操作是转发请求或者播放录音 这里需要freeswitch中实现对red
  • 接口异常状态统一处理方案在 Firefox 下无效的原因和解决方案

    没想到会是在双十一这么忙的时间段把这篇文章写完 xff0c 公司很忙很紧张 xff0c 可我还有时间在公司做分享 xff0c 写博文 xff0c 惭愧惭愧 做后台系统在双十一期间不如 2c 端的小伙伴有参与感呀 问题根源 上文 接口异常状态
  • 玩转神龙服务器的Hyper-V虚拟化网络之 配置直通网卡

    在上一篇 玩转神龙服务器的Hyper V虚拟化网络之 配置NAT网络 的文章中我们使用NAT的方式使Hyper V VM可以访问公网 在这一篇里 xff0c 我们会使用直通网卡的特性来使VM有对外提供服务的功能 前置条件 神龙服务器 xff
  • postgresql学习笔记1---安装和psql基本操作

    本文是PostgreSQL修炼之道这本书的学习笔记 xff0c 记录下疑惑或不解的地方 xff0e 这里也列一些资源 官方文档 http www postgresql org files documentation pdf 9 4 post
  • python 在字典中添加键值对的方法。

    list 添加元素的方法是 list append xff08 a xff09 将 a 添加到 list 里 dict 添加元素的方法是 dict update dict2 意为 xff0c 将 dict2 的内容添加到 dict 中 转载
  • 常用的4种开发模式

    常用的4种开发模式 1 瀑布式开发 瀑布式开发是由W W Royce在1970年提出的软件开发模型 xff0c 是一种比较老的计算机软件开发模式 xff0c 也是典型的预见性的开发模式 在瀑布式开发模式中 xff0c 开发严格遵循预先计划的
  • 骚猪队的模板

    SaoZhu Team Code Library 2017 11 TAGS ACM for newest edition click here East China Normal University Chen WeiWen Softwar

随机推荐

  • 用nodejs库cheerio抓取网页内容与图片

    之前都是PHP phpQuery 抓取 xff0c 但jQuery更强大 xff0c 于是用nodejs 只是node jquery的依赖太多 xff0c 只好用cheerio 下面是一个抓取脚本 xff1a var http 61 req
  • 完整的系统帮助类Utils

    来源 xff1a http www cnblogs com yuangang p 5477324 html using System using System Collections Generic using System Linq us
  • 转载--git教程

    http lazynight me 2898 html 转载于 https www cnblogs com benchan2015 p 4897797 html
  • 网络通信第一课 C++封装HTTP请求报文说明

    一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组成 使用C 43 43 组装上述报文 boost asio streambuf requ
  • [重要新功能]删除自己发表的评论

    当你登录后 使用cookie也可以 发表评论 不管是使用普通评论还是高级评论 xff0c 你就可以在其他人的Blog中删除自己发表过的评论 这样你在发表评论时 xff0c 如果写错了内容 可以删除后重发 接着 xff0c 准备增加在管理页面
  • 解析FAT16文件系统

    引导扇区的信息例如以下 xff1a 1 偏移地址00H xff0c 长度3 xff0c 内容 xff1a EB 3C 90 跳转指令 2 偏移地址03H xff0c 长度8 内容 xff1a 4D 53 44 4F 53 35 2E 30
  • 将 n个球放入M个盒子中, 设每个球落入各个盒子是等可能的,求有球的盒子数X 的期望...

    将 n个球放入M个盒子中 设每个球落入各个盒子是等可能的 求有球的盒子数X 的期望 引入随机变量 xi 表示第i个盒子有没有球 则 X 61 X1 43 X2 43 43 XM 于是 E X 61 E X1 43 E X2 43 43 E
  • Navicat for MySQL Mac 破解版

    今天在macOS 系统下搭建 Java开发环境 xff0c 需要配置MySQL xff0c 按照Windows的习惯 xff0c 使用Navicat for MySQL 操作比较习惯 然后找不到比较好的破解版 xff0c 这里介绍一个老版的
  • Echarts中X轴只显示最大值和最小值

    目标 xff1a 本篇文章是介绍使用Echarts时设置X轴上的刻度只显示最大值和最小值 xff0c 不显示其他的刻度 这个我在做项目的过程中遇到的一个需求 xff0c 我花费了很长的时间才找到的一种解决办法 xff0c 希望对后面遇到此坑
  • 机器学习期中考复习(md全是证明题)

    佛了
  • 页面字体随窗口变化大小

    详细描述 遇到了一个手机页面字体不能定死的问题 xff0c 页面会随着页面改变 xff0c 而改变大小 师弟遇到的问题 xff0c 我也遇到过 xff0c 我感觉这个东西可能还会有人遇到 截图 分辨是1000px的字体大小和400px的字体
  • 从Hadoop URL中读取数据

    为什么80 的码农都做不了架构师 xff1f gt gt gt 要从Hadoop文件系统中读取文件 xff0c 一个最简单的方法是使用java net URL对象来打开一个数据流 xff0c 从而从中读取数据 一般的格式如下 xff1a 1
  • 【01月11日】【精彩电影合集】【10部】【亲测】【Lsyq5647发布】

    今日电影更新 10部 1 爱情 07最新动作大片DVD中字 2 国家宝藏2 xff1a 神秘书 美国2008 动作大片DVD中文字幕 3 龙过鼠年 范伟 赵本山2008贺岁大片国语DVD版 4 本能 沙郎斯通性感演绎DVD未删减版 5 黑水
  • 关于ElasticsearchRepository的使用笔记

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一个很全的API链接文档 以下是使用Spring data Jpa操作ES的一些记录 在ElasticsearchRepository中我们可以使用Not Add Like
  • Java 判断实体类属性是否为空工具类

    2019独角兽企业重金招聘Python工程师标准 gt gt gt import org apache commons lang StringUtils import java lang reflect Field import java
  • TLS Error: TLS handshake failed解决办法

    直接修改端口号 服务器端和客服端都要改哟 转载于 https blog 51cto com luoguoling 1080298
  • windows禁用rc4 算法

    公司的Windows服务器被扫描出安全漏洞 SSL TLS 受诫礼 BAR MITZVAH 漏洞 CVE 2015 2808 和安全厂家沟通 xff0c 漏洞是由rc4算法 xff0c 引起的 xff01 把服务里面的rc4算法禁用就行了
  • iOS 抓取 UIwebview 上 所有 图片 并进行滚动播放

    关于在UIwebview上添加滚动图片 两种滚动手势会混淆 xff0c 应为webview有webview scrollview的属性 故参照昨天的随笔 scrollview嵌套解决方案 本篇随笔主要讲循环使用正则表达式 xff0c 本人在
  • 优化网络爬虫

    Date 2019 07 03 Author Sun 优化之前的网络爬虫代码如下 xff1a code coding utf 8 author 61 39 sun 39 date 61 39 2019 7 3 上午10 53 39 from
  • 如何使用SendMessage发送按键组合,例如:Ctrl+A

    代码 var hwnd Integer begin hwnd 61 FindWindow 39 Notepad 39 nil SetForegroundWindow hwnd keybd event VK CONTROL MapVirtua