0

I am trying to simulate a keypress in C# and I'm getting these errors:

Error   2   The name 'WM_KEYDOWN' does not exist in the current context c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 28  52  HaxBot3
Error   5   The name 'WM_KEYDOWN' does not exist in the current context c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 29  52  HaxBot3
Error   8   The name 'WM_KEYDOWN' does not exist in the current context c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 30  52  HaxBot3
Error   9   The name 'VK_RIGHT' does not exist in the current context   c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 30  64  HaxBot3
Error   3   The name 'VK_CONTROL' does not exist in the current context c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 28  64  HaxBot3
Error   6   The name 'VK_ALT' does not exist in the current context c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 29  64  HaxBot3
Error   1   The name 'PostMessage' does not exist in the current context    c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 28  17  HaxBot3
Error   4   The name 'PostMessage' does not exist in the current context    c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 29  17  HaxBot3
Error   7   The name 'PostMessage' does not exist in the current context    c:\users\frk\documents\visual studio 2010\Projects\HaxBot3\HaxBot3\Form1.cs 30  17  HaxBot3

and this is the code that gives the error:

public static void Forward()
        {
            Process[] processes = Process.GetProcessesByName("test");

            foreach (Process proc in processes)
            {
                PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_CONTROL, 0);
                PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_ALT, 0);
                PostMessage(proc.MainWindowHandle, WM_KEYDOWN, VK_RIGHT, 0);
            }
        }//Fprward

I guess I have to add something with using System.(something) but what? Thanks for help.

void
  • 1,876
  • 8
  • 24
  • 30
  • 1
    They should be windows message values. If you want a friendly enum for it, you'll have to write your own, or find one online. – asawyer Apr 19 '12 at 21:18

2 Answers2

2

You need to define these yourself.

[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint msg, uint wParam, IntPtr lParam);

public const uint WM_KEYDOWN = 0x0100;
public const uint VK_RIGHT = 27;
public const uint VK_CONTROL = 11;
public const uint VK_ALT = 12;
Kendall Frey
  • 43,130
  • 20
  • 110
  • 148
1

It's in User32.Dll. You will need to specify it yourself. Visit this PInvoke.net page on PostMessage for more information.

Here's an example class assuming Forward() is in the class MyClass.

public static class MyClass
{
  public static void Forward()
  {
     /* snip */
  }

  [return: MarshalAs(UnmanagedType.Bool)]
  [DllImport("user32.dll", SetLastError = true)]
  static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
}
scottheckel
  • 9,106
  • 1
  • 35
  • 47