我正在使用var TelegramBot = require('telegrambot');
var api = new TelegramBot('<YOUR TOKEN HERE>');
// You can either use getUpdates or setWebHook to retrieve updates.
// getUpdates needs to be done on an interval and will contain all the
// latest messages send to your bot.
// Update the offset to the last receive update_id + 1
api.invoke('getUpdates', { offset: 0 }, function (err, updates) {
if (err) throw err;
console.log(updates);
});
// The chat_id received in the message update
api.invoke('sendMessage', { chat_id: <chat_id>, text: 'my message' }, function (err, message) {
if (err) throw err;
console.log(message);
});
函数将按下的键的虚拟键码转换为其unicode字符,
这是函数定义:
ToUnicodeEx
此功能适用于我的文化 es-ES ,键盘布局 3082 ,但是,如果改为指定 3082 ,我会尝试使用代码下面指定 1033 键盘布局以模拟 en-US 文化的关键压力,或任何不同于 3082 的任何其他键盘布局,然后{ {1}}函数将失败并返回0,其中返回值0表示:
指定的虚拟键没有当前状态的转换 键盘。没有任何内容写入指定的缓冲区 pwszBuff。
<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True, CallingConvention:=CallingConvention.Winapi)>
Friend Shared Function ToUnicodeEx(
ByVal wVirtKey As UInteger,
ByVal wScanCode As UInteger,
ByVal lpKeyState As Byte(),
<Out, MarshalAs(UnmanagedType.LPWStr)>
ByVal pwszBuff As StringBuilder,
ByVal cchBuff As Integer,
ByVal wFlags As UInteger,
ByVal dwhkl As IntPtr
) As Integer
End Function
我做错了什么?,我该如何解决?
答案 0 :(得分:2)
您不能简单地传递一个数字(IntPtr
)作为最后一个参数......正如MSDN
dwhkl [in,optional] 类型:HKL 用于转换指定代码的输入语言环境标识符。此参数可以是以前由LoadKeyboardLayout函数返回的任何输入区域设置标识符。
您必须先使用LoadKeyboardLayout
加载布局。
答案 1 :(得分:0)
尝试,重新研究,并且有些失败,我在.Net框架类库中找到了不涉及P / Invoking的最佳和更简单的解决方案。
只需知道一个文化名称,例如 en-US 或 es-ES 和Systwm.Windows.Forms.InputLanguage
类,我们就可以检索布局句柄(HKL)
InputLanguage.FromCulture(New CultureInfo("en-US")).Handle
然后,可以为dwHKL
函数的ToUnicodeEx
参数设置该值,它可以完美运行!。