我正在编写一个 C# 应用程序(专门用于笔记本电脑),我想了解盖子的状态,即它何时打开以及何时关闭。
我已经将 pInvoke 与 Microsoft's RegisterPowerSettingNotification function 一起使用了在this SO answer的帮助下.
所以,有了上面的内容,我知道盖子何时关闭或打开,并知道它的状态, 但是我想在其他任何事情继续之前了解盖子的状态。 我注意到即使盖子没有变化,回调函数也会被调用,我可以检查它的参数以了解盖子的状态,但这对我不利,因为它是一个事件,我不能简单地等待让它发生(也许有另一种方法可以解决这个问题?)。
我也尝试过 PowerEnumerate 函数,但无法从中得到任何东西(也许有一些我不知道的东西可以帮助)
编辑 1: 我等不及或延迟应用程序,有 2 个问题需要我在没有 CB 的情况下获得状态,第一个是笔记本电脑连接到显示器时可以关闭盖子,从而允许用户使用笔记本电脑。如果用户在这种情况下启动应用程序,则它不应启动。 第二个原因是我希望应用程序对用户友好,并通知它在启动或停止时发生的情况,如果我在错误的时间收到 cb,由于应用程序的内部逻辑,它可能会被忽略,然后将不得不等到下次我得到 cb 时,我会的。
所以,(没有双关语意) 有没有办法立即获得这些信息?
编辑 2: 从评论中似乎不清楚我需要什么。我需要一种查询盖子状态的方法。即 - 调用一些 API 或其他东西,返回值是状态。 谢谢!
关键字:GUID_LIDSWITCH_STATE_CHANGE,WM_POWERBROADCAST,电源设置
最佳答案
我认为“lid state”不能保证反射(reflect)在电源管理属性中。您对盖子状态的兴趣是否仅仅取决于显示器?如果是这样,您可以找到一种方法来确定集成屏幕的属性(如果他们在连接到外部显示器时安装它可能会出现问题)并保存它们。然后检查正在使用的屏幕的属性并采取相应措施。
参见 System.Windows.Forms.Screen - http://msdn.microsoft.com/en-us/library/system.windows.forms.screen%28v=vs.110%29.aspx
可以从 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY 中的“设备参数”键中提取序列号。此处演示了如何提取它(连同其他信息):
http://sourceforge.net/p/wmimonitor/code/HEAD/tree/DisplayInfoWMIProvider/WMIProvider/WMIProvider.cs
或者,假设即使 Windows 中的机盖关闭事件设置为“不执行任何操作”,回调仍会触发,您或许可以考虑使用辅助进程或服务来一直运行并跟踪更改。您可以通过注册表或文件共享状态。您还可以查看是否有任何其他硬件项目(例如触摸板)在关闭时更改电源状态,而不管“电源计划”如何,并使用 GetDevicePowerState API 函数。
关于c# - 获取当前的笔记本电脑盖子状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869987/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一