首页 > 其他分享 >MSTSCLib_TLB 修正

MSTSCLib_TLB 修正

时间:2023-04-08 15:44:06浏览次数:40  
标签:function MapVirtualKey 修正 keyupstate TLB stdcall MSTSCLib keydatas PTR

 

delphi7 导入RDP AcitveX 生成的MSTSCLib_TLB.pas 

delphi真的好惨啊,资料都是其他语言的。用到都得自己转换,自身导入生成的还有问题。或者用法根本就不一样。

生成的是这样的:
IMsRdpClientNonScriptable = interface(IMsTscNonScriptable)
['{2F079C4C-87B2-4AFD-97AB-20CDB43038AE}']
function NotifyRedirectDeviceChange(wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
function SendKeys(numKeys: Integer; var pbArrayKeyUp: WordBool; var plKeyData: Integer): HResult; stdcall;
end;

通过导入生成的方法,是一次只能输入一个。不能多个一起输入。

根据微软的文档:
https://learn.microsoft.com/vi-vn/windows/win32/termserv/imsrdpclientnonscriptable-sendkeys

这两个参数是数组才对,查阅资料后要改成下面这样

IMsRdpClientNonScriptable = interface(IMsTscNonScriptable)
['{2F079C4C-87B2-4AFD-97AB-20CDB43038AE}']
function NotifyRedirectDeviceChange(wParam: UINT_PTR; lParam: LONG_PTR): HResult; stdcall;
function SendKeys(numKeys: Integer; pbArrayKeyUp: Pointer; plKeyData: Pointer): HResult; stdcall;


调用时也要注意:
var
 keydatas: array[0..19] of integer; //一次最多发20个
 keyupstate: array[0..19] of SmallInt; //c++中 VARIANT_BOOL 是COM 使用的布尔类型, 其实质上是 short 类型 不能使用boolen。c++的short对应的delphi的是SmallInt
begin
  keydatas[0] := MapVirtualKey(65,0);
  keydatas[1] := MapVirtualKey(65,0);
  keydatas[2] := MapVirtualKey(66,0);
  keydatas[3] := MapVirtualKey(66,0);
  keydatas[4] := MapVirtualKey(67,0);
  keydatas[5] := MapVirtualKey(67,0);

  keyupstate[0] := 0;
  keyupstate[1] := 1;
  keyupstate[2] := 0;
  keyupstate[3] := 1;
  keyupstate[4] := 0;
  keyupstate[5] := 1;
  //注意状态要正确,不然会输入的结果。这里输入的是abc
  nonScriptable.SendKeys(6, @keyupda[0],@keydatas[0]);
 end
  

 

标签:function,MapVirtualKey,修正,keyupstate,TLB,stdcall,MSTSCLib,keydatas,PTR
From: https://www.cnblogs.com/BTag/p/17298635.html

相关文章

  • 修正es查询里的字段类型是keyword的query
    defconvert_query(query):"""ConvertElasticsearchquerytousekeywordandtextfieldsappropriately"""ifisinstance(query,dict):forkey,valueinquery.items():ifkeyin["term......
  • 《基于Modern工具包的本地化方式》的错误修正
    在《基于Modern工具包的本地化方式》一文中实现的本地化方式忽略了在切换语言后,原始的文本值已经改变,要想再切换回去,由于找不到对应的本地化值,最终切换不了,因而,必须在第一次切换的时候记录下原始文本值,这样才能保证每次切换的时候都能找到对应值。在前文中还有一个bug是当本地化先......
  • 数据中心冷却的 safe-RL,基于对 action 的事后修正技术
    目录一个总述摘要1intro2relatedwork3preliminaries4performanceofrewardshaping5thesafariapproach5.1CMDPFormulation&ApproachOverview5.2off-lineIL......
  • 修正screenfetch无法正常显示内存信息
    使用screenfetch出现错误/usr/bin/screenfetch:行1851:-:语法错误:需要操作数(错误符号是"-")打开screenfetch的1851行看来是获取内存数据的代码出问题了。具......
  • #loongarch架构介绍# [五] TLB维护
    作者:蒋卫峰李涛前言上一篇文章中介绍了loongarch中TLB相关的异常处理,这一篇文章继续介绍TLB相关的维护操作。1.TLB硬件组织机构首先补充loongarch中TLB相关的硬件背景......
  • Ubuntu apt下载:无法修正错误
    问题:在为cpp下载mysql函数库的时候显示:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。解决:其主要原因是因为不同的Ubuntu版本对应的源......
  • Git提交修正
    应用场景日常开发中我们可能会遇到这样的问题1、提交了代码有错误2、提交的信息写错了3、漏了一些文件没有提交......再或者我们写一个功能时,中间有很多小的提交,这中......
  • 学科网格式修正 sections find
    Sub学科网格式修正()'删除第二节内容MsgBoxActiveDocument.Sections.CountMsgBoxActiveDocument.Sections(2).Range.Delete'删除节符号"^b",用替换功能实现Se......
  • 修正判定条件覆盖(MC/DC)
    MC/DC是DO-178BLevelA认证标准中规定的,欧美民用航空器强制要求遵守该标准。   MC/DC定义如下:   Condition——aBooleanexpressioncontainingnoBooleanop......
  • 编写图像抖动修正色带问题
    图像色带(Band)问题一般出现在带有渐变的图像上,在影视上可以换成16bit的色彩以解决,而游戏开发中通常对图像做色彩抖动处理来解决。但抖动这块一直没有找到很好的插件,PS也......