Search code examples
c#keydownpostmessage

C# what is the necessary library for PostMessage?


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.


Solution

  • 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;