2012-04-19 4 views
0

Я пытаюсь имитировать нажатие клавиши в C# и я получаю эти ошибки:C#, что является необходимой библиотекой для PostMessage?

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 

и это код, который выдает ошибку:

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 

Я предполагаю, что я должен что-то добавить с using System.(something) но что? Спасибо за помощь.

+1

Должны быть значения сообщений в Windows. Если вам нужен дружественный enum для этого, вам придется написать свой собственный или найти его в Интернете. – asawyer

ответ

2

Необходимо определить их самостоятельно.

[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; 
1

It's in User32.Dll. Вам нужно будет указать его самостоятельно. Visit this PInvoke.net page on PostMessage for more information.

Вот пример класса, предполагающего, что Forward() находится в классе 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); 
}