我正在制作一个全局捕获键盘输入的Windows应用程序.当用户使用应用程序使用的CTRL + ALT + G快捷键组合时
SendKey.Send(Guid.NewGuid().ToString());
Run Code Online (Sandbox Code Playgroud)
在任何文本字段中键入生成的GUID.无论应用程序采取何种输入,它都应该这样做.
当你第一次键入CTRL + ALT + G时,它的工作方式与我的预期完全相同,但后续尝试不会产生任何结果,或者只是非常罕见的成功.
我的意思是,这一切都应该非常简单和一致.我有一个工作的全局键盘钩子,它一直工作,我已经测试过,但SendKey.Send()方法不是每次都有效.
我看过Google的任何与我的问题相关的内容,但到目前为止还没有任何工作.
有人有任何见解吗?
编辑1:我也尝试过使用SendKey.SendWait(),做同样的事情.我真的想要一种更灵敏的方式来使用这种键盘快捷方式生成新的GUID.
编辑2:
以下是代码的基本部分:
/* Initialization Code Here */
// register the event that is fired after the key press.
hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(hook_KeyPressed);
// register the control + alt + F12 combination as hot key.
hook.RegisterHotKey((uint)(HotkeyModifiers.Control | HotkeyModifiers.Alt), Keys.G);
Run Code Online (Sandbox Code Playgroud)
事件代码非常简单:
void hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
SendKeys.SendWait(Guid.NewGuid().ToString());
}
Run Code Online (Sandbox Code Playgroud)
我项目中的其他任何事情都只是松懈.
更新1:
关于这个问题,我确实有更多的问题,但是今天我没有时间继续研究这个问题.我已经实现了Jon Raynor建议使用app.config方法取得一定程度的成功.一旦我解决了我的新问题,我将发布一个编辑,如果我的应用程序按预期运行,可能会关闭此问题.
我正在寻找一种方法来确保只有可序列化的对象存储在C#中的Dictionary中.
更具体地说,我希望做类似的事情:
Dictionary<String, ISerializable> serialDict = new Dictionary<String, ISerializable>();
Run Code Online (Sandbox Code Playgroud)
这个问题是我不能存储整数类型,如整数,布尔值或字符串.
有没有办法确保我的词典只包含可以序列化的对象?
按照.NET API,类Dictionary<TKey, TValue>是继承自ICollection<T>,这里T是KeyValuePair<TKey, TValue>.Dictionary<TKey, TValue>该类如何隐藏它继承的一些方法ICollection<T>?
例如:
ICollection<T>有方法ICollection.Add(T item)
,但当你使用一个Dictionary<TKey, TValue>对象时,它没有该方法.你只能使用Dictionary<TKey, TValue>.Add(TKey key, TValue value).没有Dictionary<TKey, TValue>.Add(KeyValuePair<TKey,TValue> kvp)方法.
谁知道为什么?这些方法是如何隐藏的?
根据RSA类的MSDN文档,有两种RSA.Create()方法.一个默认实现,一个采用字符串参数"algName".我无法在任何地方找到任何使用RSA.Create(String)版本的示例.
所以我的问题是:参数"algName"通常包含什么?可以使用哪些算法?或者我在哪里可以找到有效算法名称的信息?
问候StackOverflow,
如果我有一个带有Flag属性的枚举类型以及此枚举类型中具有各自属性的值,我该如何检索所有适当的属性?
例如:
[Flags()]
enum MyEnum
{
[EnumDisplayName("Enum Value 1")]
EnumValue1 = 1,
[EnumDisplayName("Enum Value 2")]
EnumValue2 = 2,
[EnumDisplayName("Enum Value 3")]
EnumValue3 = 4,
}
void Foo()
{
var enumVar = MyEnum.EnumValue2 | MyEnum.EnumValue3;
// get a collection of EnumDisplayName attribute objects from enumVar
...
}
Run Code Online (Sandbox Code Playgroud) 问候StackOverflow,
我正在开发一个Windows上的小项目,需要读取GSUTIL复制功能的输出.问题是,复制功能的输出似乎不能通过标准输出工作.此外,GSUTIL的行为不一致:管道输出不能与复制功能一起使用,但使用列表功能确实有效.
当我在命令提示符中使用以下命令时,输出将显示在命令提示符中,但不会重定向到文本文件.此命令无法正常工作:
C:\gsutil> python gsutil cp "file://C:/test_files/*" gs://gs_teststore/ > gsutil_cp.txt
Run Code Online (Sandbox Code Playgroud)
另一方面,当我使用list函数(ls)时,输出通过标准输出工作,并在我希望的工作:
C:\gsutil> python gsutil ls gs://gs_teststore/ > gsutil_ls.txt
Run Code Online (Sandbox Code Playgroud)
有没有办法从GSUTIL的复制功能中捕获输出?
.net ×4
c# ×4
collections ×1
cryptography ×1
dictionary ×1
enums ×1
generics ×1
gsutil ×1
inheritance ×1
interface ×1
pipe ×1
rsa ×1