1,105,594 Community Members

Weird C# Error

Member Avatar
glut
Light Poster
44 posts since Sep 2011
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

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.

Member Avatar
Mike Askew
Posting Shark
927 posts since Nov 2010
Reputation Points: 129 [?]
Q&As Helped to Solve: 85 [?]
Skill Endorsements: 25 [?]
Featured
 
0
 

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

Member Avatar
skatamatic
Posting Shark
980 posts since Nov 2007
Reputation Points: 371 [?]
Q&As Helped to Solve: 133 [?]
Skill Endorsements: 5 [?]
 
0
 

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.

Member Avatar
phoenix911
Junior Poster
169 posts since May 2009
Reputation Points: 28 [?]
Q&As Helped to Solve: 21 [?]
Skill Endorsements: 0 [?]
 
0
 

I agree with MikeyIsMe, use the MouseClick event.

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

Member Avatar
glut
Light Poster
44 posts since Sep 2011
Reputation Points: 0 [?]
Q&As Helped to Solve: 0 [?]
Skill Endorsements: 0 [?]
 
0
 

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 :)

You
This article has been dead for over three months: Start a new discussion instead
Post:
Start New Discussion
View similar articles that have also been tagged: