Hello. I have a really weird problem. Whenever I try to get if the user pressed down on the mouse (clicked), via GetAsyncKeyState(), it only shows it some times. I tried the exact same code, but with another key Ex: A, and it works fine.

Here is the code.

public void GetMouse()
        {

            foreach (System.Int32 i in Enum.GetValues(typeof(Keys)))
            {
                XPos.Add((ushort)Cursor.Position.X);
                YPos.Add((ushort)Cursor.Position.Y);

                int pressed = GetAsyncKeyState(i);

                if ((pressed == -32767))
                {
                    if ((i == 1) || (i == 2))
                        Click.Add((ushort)i);
                    else
                        Click.Add(0);
                }
                else
                    Click.Add(0);
            }
        }

This goes through a loop, so it is always checking.
Oh, and also I've tried this on multiple windows, and such, and it still doesn't work.

Thank you so much, Glut.

Recommended Answers

All 4 Replies

Have you considered using the MouseClick property of the form instead?

That seems like a very CPU expensive loop to poll for mouse clicks. It has to go through hundreds (maybe even thousands) of enums, poll the GetAsyncKeyState, filter the results, then set flags. An event would have a LOT less overhead.

As for why it's not working - I have no idea. Never used GetAsyncKeyState before. Maybe put this in context for us (what are you trying to accomplish) and we can help come up with a better solution.

I agree with MikeyIsMe, use the MouseClick event.

But then again, not knowing what the OP wants..

I agree with MikeyIsMe, use the MouseClick event.

But then again, not knowing what the OP wants..

Getting it globally. I'll try Thread.Sleep(100); and get back to you guys. Thanks :)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.