标签: low-level-api

是否有跨平台的python低级API来捕获或生成键盘事件?

我正在尝试编写一个跨平台的python程序,它将在后台运行,监视所有键盘事件,当它看到一些特定的快捷方式时,它会生成一个或多个自己的键盘事件.例如,将Ctrl- @映射到"my.email@address"可能很方便,因此每次某个程序询问我的电子邮件地址时,我只需要输入Ctrl- @即可.

我知道这些程序已经存在,我正在重新发明轮子......但我的目标只是了解有关低级键盘API的更多信息.此外,这个问题的答案可能对其他程序员有用,例如,如果他们想要启动需要密码的SSH连接,而不使用pexpect.

谢谢你的帮助.

注意:有一个类似的问题,但它仅限于Windows平台,并且不需要python.我正在寻找跨平台的python api.还有其他与键盘事件有关的问题,但显然他们对系统范围的键盘事件不感兴趣,只是特定于应用程序的键盘快捷键.

编辑:我应该在这里增加一个声明:我不是想写一个键盘记录.如果我需要一个键盘记录器,无论如何我都可以从网上下载一个.;-)

python cross-platform keyboard-events low-level-api

11
推荐指数
2
解决办法
1万
查看次数

C++中的低级蓝牙编程

我需要一个库(或API,...)来使用C++进行一些低级蓝牙编程.任何参考或丰富的链接都会很棒!

我更喜欢在基于Linux的操作系统中工作......

提前致谢... :)

c++ bluetooth low-level-api

6
推荐指数
1
解决办法
5125
查看次数

如何将 PHYSICAL_MONITOR 与监视器 DeviceID 关联

我需要帮助将从GetPhysicalMonitorsFromHMONITOR获得的 PHYSICAL_MONITOR与监视器 DISPLAY_DEVICE.DeviceID 关联起来(例如“\?\DISPLAY#GSM59AB#5&932a802&1&UID261#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}”),它来自使用的EnumDisplayDevices带有标志 EDD_GET_DEVICE_INTERFACE_NAME ,或者以某种方式从 DISPLAY_DEVICE.DeviceID 获取 PHYSICAL_MONITOR ,反之亦然。

我需要将它们关联起来,因为:

  1. HANDLE PHYSICAL_MONITOR.hPhysicalMonitor 将用于lowlevelmonitorconfigurationapi,因为我需要向监视器发送命令。

  2. DISPLAY_DEVICE.DeviceID 用于使用 SetupAPI 从注册表获取 EDID 结构(前 128 个字节对我来说足够了,只需要制造商代码和型号)

1和2已经完成,问题在于将id与物理监视器关联起来。 此外,还可以仅使用 SetupAPI 从注册表获取所有显示器 EDID,但在这种情况下,不可能获取物理显示器句柄。

MSDN上同样的问题,没有解决((

我还注意到一件事:此代码枚举了所有监视器:

DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
// Initialize DisplayDevice.
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);

while ((EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)))
{
    std::wstring deviceName = DisplayDevice.DeviceName;
    DISPLAY_DEVICE DisplayDeviceM;
    ZeroMemory(&DisplayDeviceM, sizeof(DisplayDeviceM));
    DisplayDeviceM.cb = sizeof(DisplayDeviceM);
    int monitorIndex = 0;
    while (EnumDisplayDevices(deviceName.c_str(), monitorIndex, &DisplayDeviceM, EDD_GET_DEVICE_INTERFACE_NAME))
    {
        std::wstring monitorID = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi multiple-monitors low-level low-level-api

6
推荐指数
1
解决办法
1559
查看次数

来自rawinput的低级键盘钩子和击键

目前,我正在制作一个拦截特定键盘击键的程序(使用其HID进行过滤).因此,为了知道特定设备发送了哪些击键,我使用了RawInput技术,受到这个伟大教程的启发:

http://www.codeproject.com/Articles/17123/Using-Raw-Input-from-C-to-handle-multiple-keyboard

现在,它工作得很好:我可以获得击键并知道哪个键盘生成了它.

我的项目的难点在于拦截和阻止来自这个特定键盘的击键,以避免这些击键到达聚焦应用程序(聚焦意味着操作系统带来的前景窗口).

因此,在具有窗口句柄的所有当前线程上,自然解决方案是低级全局钩子.

我使用并调整了此页面中的代码来执行此操作:

http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx

我在visual studio中创建了一个新项目,以避免在我的工作中乱七八糟.经过一些研究,我能够通过在回调函数中返回值(-1)来阻止所有应用程序的击键:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)  
{
//Check if we have a key to pass

if (
    nCode >= 0 && ( 
    (wParam == (IntPtr)WM_KEYDOWN) || (wParam == (IntPtr)WM_KEYUP) ) 
    )
{
    int vkCode = Marshal.ReadInt32(lParam);
    if ((Keys)vkCode == Form1.KeysToIgnore)
    {
        return (IntPtr)(-1);
    }
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

为了将所有内容(钩子程序和击键检测)放在一起,我在最终项目中创建了两个线程:

1st:使用RawInput识别每个键击并将其附加到设备

第二:用于挂钩所有窗口并阻止某些击键

线程1被设计为发送键击以阻止线程2,线程2读取发送到所有窗口应用程序的所有消息和来自特定键盘的垃圾键击.我确切地知道这两个线程是同步的.

问题是钩子似乎是在执行Rawinput之前执行的,所以我无法识别发送击键的键盘.我不知道怎么做,也许改变钩子的类型(避免使用低级键盘钩,但使用用户空间级键盘钩).

或者也许有人知道一种聪明的方式来做我想做的事情?

我知道这个请求真的很复杂,请不要犹豫,询问更多细节.

c# keyboard-hook raw-input low-level-api

5
推荐指数
1
解决办法
1万
查看次数

Plotly:如何在两条垂直线之间设置填充颜色?

使用 matplotlib,我们可以“简单地”使用fill_between()示例中的方法填充两条垂直线之间的区域:

https://matplotlib.org/3.2.1/gallery/lines_bars_and_markers/fill_between_demo.html#selectively-marking-horizo​​ntal-regions-across-the-whole-axes

使用 matplotlib,我可以制作我需要的东西:

在此处输入图片说明

我们有两个信号,我正在计算滚动/移动 Pearson 和 Spearman 的相关性。当相关性低于 -0.5 或高于 0.5 时,我想对周期进行着色(Pearson 为蓝色,Spearman 为橙色)。我还在所有地块中用灰色将周末变暗。

但是,我发现使用 Plotly 很难完成相同的任务。了解如何在两条水平线之间进行操作也很有帮助。

请注意,我使用 Plotly 和 Dash 来加速多个绘图的可视化。用户要求更“动态类型的东西”。然而,我不是一个 GUI 人,不能花时间在这上面,尽管我需要用初步结果来喂养他们。

顺便说一句,我过去尝试过 Bokeh,但由于某种我不记得的原因而放弃了。Plotly 看起来不错,因为我可以使用 Python 或 R,这是我的主要开发工具。

谢谢,

卡洛斯

python fill low-level-api plotly

5
推荐指数
2
解决办法
3531
查看次数

性能字节[]到通用

我需要制作一个byte [] - > T扩展方法,需要它快速(不需要它很漂亮)

在绝对性能关键环境中,此功能将在很短的时间内被称为100次100次.

我们目前正在优化"滴答"级别,每个刻度转换为在callstack中高出几毫秒,因此需要原始速度而不是可维护性(不是我喜欢设计软件,但其背后的推理超出了范围) .

考虑下面的代码,它是干净和可维护的,但它相对较慢(可能是由于装箱和拆箱),这可以优化为更快?

public static T ConvertTo<T>(this byte[] bytes, int offset = 0)
{
    var type = typeof(T);
    if (type == typeof(sbyte)) return bytes[offset].As<T>();
    if (type == typeof(byte)) return bytes[offset].As<T>();
    if (type == typeof(short)) return BitConverter.ToInt16(bytes, offset).As<T>();
    if (type == typeof(ushort)) return BitConverter.ToUInt32(bytes, offset).As<T>();
    if (type == typeof(int)) return BitConverter.ToInt32(bytes, offset).As<T>();
    if (type == typeof(uint)) return BitConverter.ToUInt32(bytes, offset).As<T>();
    if (type == typeof(long)) return BitConverter.ToInt64(bytes, offset).As<T>();
    if (type == typeof(ulong)) return BitConverter.ToUInt64(bytes, offset).As<T>(); …
Run Code Online (Sandbox Code Playgroud)

c# performance low-level-api

3
推荐指数
1
解决办法
668
查看次数

在 Linux 中使用汇编语言处理 GUI

我对汇编编程语言非常陌生。我对在 Windows 上运行的 MASM 有一点经验。我想知道如何在 Linux 中处理 GUI。(我已经使用 gcc 在 Linux 上编写了简单的汇编程序)我希望有人能给我任何资源,特别是编码示例。

谢谢 !!

linux assembly gcc low-level-api

1
推荐指数
1
解决办法
3341
查看次数