【问题标题】:Making a corner of the desktop activate screensaver使桌面一角激活屏保
【发布时间】:2022-03-19 03:58:35
【问题描述】:

我正在尝试编写一个简单的应用程序来在鼠标位于屏幕右上角时激活我的屏幕保护程序。我找到了从 C# 控制屏幕保护程序的答案,但是我无法确定如何对鼠标位置进行“热角”类型检查。这是我唯一坚持的部分,任何帮助将不胜感激。

这会激活屏幕保护程序

[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    private static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int  lParam);

private const int SC_SCREENSAVE = 0xF140;
private const int WM_SYSCOMMAND = 0x0112;

public static void SetScreenSaverRunning()
{
  SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_SCREENSAVE, 0);
}

【问题讨论】:

  • 你能不能也发布一些你是如何让它运行屏幕保护程序的?
  • 嗨,Gideon,编辑了我的原始问题以包含用于激活屏幕保护程序的代码

标签: c# windows desktop mouse-cursor screensaver


【解决方案1】:

您可以使用System.Windows.Form.Screen 类来获取当前分辨率(查看this answer)。然后使用Cursor.Position.Property 确定光标当前所在的位置(即它是否在应该激活它的某个预定义矩形的边界内)。

【讨论】:

    【解决方案2】:

    我做了完全相同的事情,只是它加载在左上角。我所做的只是使表单大小为 1px x 1px,没有边框,并在鼠标停留在表单上一秒钟时激活屏幕保护程序。这样做需要您找到所有方法来将表单置于所有内容之上。

    另一种选择是鼠标钩子,只关注 (0,0) 鼠标位置,或右上角 - (0, screen.width)

    【讨论】:

    • 我喜欢左上角的方法。它简化了很多事情。
    • 去找低级鼠标钩子了,现在可以用了,谢谢你的建议。刚刚基本工作,屏幕保护程序现在在鼠标位于右上角时激活,只需添加代码即可更改哪个角是“热角”
    • 每次打开屏幕保护程序时,您的进程的内存是否会增加?当我前段时间尝试鼠标钩时,我记得内存使用量越来越大,这就是我保持 1x1 形式的原因。
    • 既然你提到了,我每次移动鼠标都会增加内存!
    • 我已经尝试过其他也可以进行挂钩的类,并且在鼠标移动了一段时间后它们也恰好泄漏了 8k... 我将删除屏幕保护程序控件的内容以查看是否可以刚刚接收到事件以尝试查明内存泄漏。
    【解决方案3】:

    您也可以尝试 Lucian Wischik 的 ScrHots。它是免费软件,完全符合您的需求,并且还具有“从不激活屏幕保护程序”功能的热点。可以对所有四个角进行编程以执行任一功能。我已经用了很多年了,效果很好。

    http://www.wischik.com/scr/savers.html(ScrHots3,在“实用程序”部分下)

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2019-03-13
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      相关资源
      最近更新 更多