2016-05-17 101 views
1

我有以下程序:SendMessage函数不工作时发送字母数字从另一个程序

  • 打开Citrix连接中心(concentr.exe)
  • 把窗口前
  • 发送R键(此打开偏好)
  • 关闭这两个窗口(精矿和喜好)

这里是工作荷兰国际集团代码:

Process.Start(@"C:\Program Files (x86)\Citrix\ICA Client\concentr.exe"); 
    IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Citrix Connection Center"); 
    SetForegroundWindow(windowPtr); 
    SendKeys.SendWait("{r}"); 
    IntPtr prefWindowPtr = FindWindowByCaption(IntPtr.Zero, "Citrix Receiver - Preferences"); 
    SendMessage(prefWindowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
    SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 

我用,因为它代表该代码唯一的问题是利用SendKeys.SendWait发送R关键,我想一起SendMessage调用替换。

我曾尝试以下,但它似乎并没有做任何事情:

SendMessage(windowPtr, WM_KEYDOWN, (IntPtr)0x52, IntPtr.Zero); 
SendMessage(windowPtr, WM_CHAR, (IntPtr)0x72, IntPtr.Zero); 
SendMessage(windowPtr, WM_KEYUP, (IntPtr)0x52, IntPtr.Zero); 

我在记事本中运行Microsoft间谍++和记录当我按下R,这给他们做了上面的行我下面的:

enter image description here

有谁知道我错了/我应该在这里,而不是在做什么?

+0

你看着使用AutoIt3?你为什么要做自己的自动化? –

+1

生成假输入的方法是使用'SendInput'。使用'SendMessage'发送假输入消息不会通过输入系统。 –

+0

@Brianfromstatefarm我需要将其与现有的C#应用​​程序集成 - 也是用户不会在他们的机器上安装AutoIt – Bassie

回答

0

正如评论中指出的那样,正确的做法是使用SendInput()

正在关注this answer并且我能够正常工作。声明所有必需的结构和方法后,我就能够成功地发送R这样的:

void SendR() 
{ 
    INPUT[] Inputs = new INPUT[1]; 
    INPUT Input = new INPUT(); 

    Input.type = 1; // Keyboard Input 
    Input.U.ki.wScan = ScanCodeShort.KEY_R; 
    Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; 
    Inputs[0] = Input; 

    SendInput(1, Inputs, INPUT.Size); 
} 

其他声明:

/// <summary> 
/// Declaration of external SendInput method 
/// </summary> 
[DllImport("user32.dll")] 
internal static extern uint SendInput(
    uint nInputs, 
    [MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs, 
    int cbSize); 


// Declare the INPUT struct 
[StructLayout(LayoutKind.Sequential)] 
public struct INPUT 
{ 
    internal uint type; 
    internal InputUnion U; 
    internal static int Size 
    { 
     get { return Marshal.SizeOf(typeof(INPUT)); } 
    } 
} 

// Declare the InputUnion struct 
[StructLayout(LayoutKind.Explicit)] 
internal struct InputUnion 
{ 
    [FieldOffset(0)] 
    internal MOUSEINPUT mi; 
    [FieldOffset(0)] 
    internal KEYBDINPUT ki; 
    [FieldOffset(0)] 
    internal HARDWAREINPUT hi; 
} 

[StructLayout(LayoutKind.Sequential)] 
internal struct MOUSEINPUT 
{ 
    internal int dx; 
    internal int dy; 
    internal MouseEventDataXButtons mouseData; 
    internal MOUSEEVENTF dwFlags; 
    internal uint time; 
    internal UIntPtr dwExtraInfo; 
} 

[Flags] 
internal enum MouseEventDataXButtons : uint 
{ 
    Nothing = 0x00000000, 
    XBUTTON1 = 0x00000001, 
    XBUTTON2 = 0x00000002 
} 

[Flags] 
internal enum MOUSEEVENTF : uint 
{ 
    ABSOLUTE = 0x8000, 
    HWHEEL = 0x01000, 
    MOVE = 0x0001, 
    MOVE_NOCOALESCE = 0x2000, 
    LEFTDOWN = 0x0002, 
    LEFTUP = 0x0004, 
    RIGHTDOWN = 0x0008, 
    RIGHTUP = 0x0010, 
    MIDDLEDOWN = 0x0020, 
    MIDDLEUP = 0x0040, 
    VIRTUALDESK = 0x4000, 
    WHEEL = 0x0800, 
    XDOWN = 0x0080, 
    XUP = 0x0100 
} 

[StructLayout(LayoutKind.Sequential)] 
internal struct KEYBDINPUT 
{ 
    internal VirtualKeyShort wVk; 
    internal ScanCodeShort wScan; 
    internal KEYEVENTF dwFlags; 
    internal int time; 
    internal UIntPtr dwExtraInfo; 
} 

[Flags] 
internal enum KEYEVENTF : uint 
{ 
    EXTENDEDKEY = 0x0001, 
    KEYUP = 0x0002, 
    SCANCODE = 0x0008, 
    UNICODE = 0x0004 
} 

internal enum VirtualKeyShort : short 
{ 
    ///<summary> 
    ///Left mouse button 
    ///</summary> 
    LBUTTON = 0x01, 
    ///<summary> 
    ///Right mouse button 
    ///</summary> 
    RBUTTON = 0x02, 
    ///<summary> 
    ///Control-break processing 
    ///</summary> 
    CANCEL = 0x03, 
    ///<summary> 
    ///Middle mouse button (three-button mouse) 
    ///</summary> 
    MBUTTON = 0x04, 
    ///<summary> 
    ///Windows 2000/XP: X1 mouse button 
    ///</summary> 
    XBUTTON1 = 0x05, 
    ///<summary> 
    ///Windows 2000/XP: X2 mouse button 
    ///</summary> 
    XBUTTON2 = 0x06, 
    ///<summary> 
    ///BACKSPACE key 
    ///</summary> 
    BACK = 0x08, 
    ///<summary> 
    ///TAB key 
    ///</summary> 
    TAB = 0x09, 
    ///<summary> 
    ///CLEAR key 
    ///</summary> 
    CLEAR = 0x0C, 
    ///<summary> 
    ///ENTER key 
    ///</summary> 
    RETURN = 0x0D, 
    ///<summary> 
    ///SHIFT key 
    ///</summary> 
    SHIFT = 0x10, 
    ///<summary> 
    ///CTRL key 
    ///</summary> 
    CONTROL = 0x11, 
    ///<summary> 
    ///ALT key 
    ///</summary> 
    MENU = 0x12, 
    ///<summary> 
    ///PAUSE key 
    ///</summary> 
    PAUSE = 0x13, 
    ///<summary> 
    ///CAPS LOCK key 
    ///</summary> 
    CAPITAL = 0x14, 
    ///<summary> 
    ///Input Method Editor (IME) Kana mode 
    ///</summary> 
    KANA = 0x15, 
    ///<summary> 
    ///IME Hangul mode 
    ///</summary> 
    HANGUL = 0x15, 
    ///<summary> 
    ///IME Junja mode 
    ///</summary> 
    JUNJA = 0x17, 
    ///<summary> 
    ///IME final mode 
    ///</summary> 
    FINAL = 0x18, 
    ///<summary> 
    ///IME Hanja mode 
    ///</summary> 
    HANJA = 0x19, 
    ///<summary> 
    ///IME Kanji mode 
    ///</summary> 
    KANJI = 0x19, 
    ///<summary> 
    ///ESC key 
    ///</summary> 
    ESCAPE = 0x1B, 
    ///<summary> 
    ///IME convert 
    ///</summary> 
    CONVERT = 0x1C, 
    ///<summary> 
    ///IME nonconvert 
    ///</summary> 
    NONCONVERT = 0x1D, 
    ///<summary> 
    ///IME accept 
    ///</summary> 
    ACCEPT = 0x1E, 
    ///<summary> 
    ///IME mode change request 
    ///</summary> 
    MODECHANGE = 0x1F, 
    ///<summary> 
    ///SPACEBAR 
    ///</summary> 
    SPACE = 0x20, 
    ///<summary> 
    ///PAGE UP key 
    ///</summary> 
    PRIOR = 0x21, 
    ///<summary> 
    ///PAGE DOWN key 
    ///</summary> 
    NEXT = 0x22, 
    ///<summary> 
    ///END key 
    ///</summary> 
    END = 0x23, 
    ///<summary> 
    ///HOME key 
    ///</summary> 
    HOME = 0x24, 
    ///<summary> 
    ///LEFT ARROW key 
    ///</summary> 
    LEFT = 0x25, 
    ///<summary> 
    ///UP ARROW key 
    ///</summary> 
    UP = 0x26, 
    ///<summary> 
    ///RIGHT ARROW key 
    ///</summary> 
    RIGHT = 0x27, 
    ///<summary> 
    ///DOWN ARROW key 
    ///</summary> 
    DOWN = 0x28, 
    ///<summary> 
    ///SELECT key 
    ///</summary> 
    SELECT = 0x29, 
    ///<summary> 
    ///PRINT key 
    ///</summary> 
    PRINT = 0x2A, 
    ///<summary> 
    ///EXECUTE key 
    ///</summary> 
    EXECUTE = 0x2B, 
    ///<summary> 
    ///PRINT SCREEN key 
    ///</summary> 
    SNAPSHOT = 0x2C, 
    ///<summary> 
    ///INS key 
    ///</summary> 
    INSERT = 0x2D, 
    ///<summary> 
    ///DEL key 
    ///</summary> 
    DELETE = 0x2E, 
    ///<summary> 
    ///HELP key 
    ///</summary> 
    HELP = 0x2F, 
    ///<summary> 
    ///0 key 
    ///</summary> 
    KEY_0 = 0x30, 
    ///<summary> 
    ///1 key 
    ///</summary> 
    KEY_1 = 0x31, 
    ///<summary> 
    ///2 key 
    ///</summary> 
    KEY_2 = 0x32, 
    ///<summary> 
    ///3 key 
    ///</summary> 
    KEY_3 = 0x33, 
    ///<summary> 
    ///4 key 
    ///</summary> 
    KEY_4 = 0x34, 
    ///<summary> 
    ///5 key 
    ///</summary> 
    KEY_5 = 0x35, 
    ///<summary> 
    ///6 key 
    ///</summary> 
    KEY_6 = 0x36, 
    ///<summary> 
    ///7 key 
    ///</summary> 
    KEY_7 = 0x37, 
    ///<summary> 
    ///8 key 
    ///</summary> 
    KEY_8 = 0x38, 
    ///<summary> 
    ///9 key 
    ///</summary> 
    KEY_9 = 0x39, 
    ///<summary> 
    ///A key 
    ///</summary> 
    KEY_A = 0x41, 
    ///<summary> 
    ///B key 
    ///</summary> 
    KEY_B = 0x42, 
    ///<summary> 
    ///C key 
    ///</summary> 
    KEY_C = 0x43, 
    ///<summary> 
    ///D key 
    ///</summary> 
    KEY_D = 0x44, 
    ///<summary> 
    ///E key 
    ///</summary> 
    KEY_E = 0x45, 
    ///<summary> 
    ///F key 
    ///</summary> 
    KEY_F = 0x46, 
    ///<summary> 
    ///G key 
    ///</summary> 
    KEY_G = 0x47, 
    ///<summary> 
    ///H key 
    ///</summary> 
    KEY_H = 0x48, 
    ///<summary> 
    ///I key 
    ///</summary> 
    KEY_I = 0x49, 
    ///<summary> 
    ///J key 
    ///</summary> 
    KEY_J = 0x4A, 
    ///<summary> 
    ///K key 
    ///</summary> 
    KEY_K = 0x4B, 
    ///<summary> 
    ///L key 
    ///</summary> 
    KEY_L = 0x4C, 
    ///<summary> 
    ///M key 
    ///</summary> 
    KEY_M = 0x4D, 
    ///<summary> 
    ///N key 
    ///</summary> 
    KEY_N = 0x4E, 
    ///<summary> 
    ///O key 
    ///</summary> 
    KEY_O = 0x4F, 
    ///<summary> 
    ///P key 
    ///</summary> 
    KEY_P = 0x50, 
    ///<summary> 
    ///Q key 
    ///</summary> 
    KEY_Q = 0x51, 
    ///<summary> 
    ///R key 
    ///</summary> 
    KEY_R = 0x52, 
    ///<summary> 
    ///S key 
    ///</summary> 
    KEY_S = 0x53, 
    ///<summary> 
    ///T key 
    ///</summary> 
    KEY_T = 0x54, 
    ///<summary> 
    ///U key 
    ///</summary> 
    KEY_U = 0x55, 
    ///<summary> 
    ///V key 
    ///</summary> 
    KEY_V = 0x56, 
    ///<summary> 
    ///W key 
    ///</summary> 
    KEY_W = 0x57, 
    ///<summary> 
    ///X key 
    ///</summary> 
    KEY_X = 0x58, 
    ///<summary> 
    ///Y key 
    ///</summary> 
    KEY_Y = 0x59, 
    ///<summary> 
    ///Z key 
    ///</summary> 
    KEY_Z = 0x5A, 
    ///<summary> 
    ///Left Windows key (Microsoft Natural keyboard) 
    ///</summary> 
    LWIN = 0x5B, 
    ///<summary> 
    ///Right Windows key (Natural keyboard) 
    ///</summary> 
    RWIN = 0x5C, 
    ///<summary> 
    ///Applications key (Natural keyboard) 
    ///</summary> 
    APPS = 0x5D, 
    ///<summary> 
    ///Computer Sleep key 
    ///</summary> 
    SLEEP = 0x5F, 
    ///<summary> 
    ///Numeric keypad 0 key 
    ///</summary> 
    NUMPAD0 = 0x60, 
    ///<summary> 
    ///Numeric keypad 1 key 
    ///</summary> 
    NUMPAD1 = 0x61, 
    ///<summary> 
    ///Numeric keypad 2 key 
    ///</summary> 
    NUMPAD2 = 0x62, 
    ///<summary> 
    ///Numeric keypad 3 key 
    ///</summary> 
    NUMPAD3 = 0x63, 
    ///<summary> 
    ///Numeric keypad 4 key 
    ///</summary> 
    NUMPAD4 = 0x64, 
    ///<summary> 
    ///Numeric keypad 5 key 
    ///</summary> 
    NUMPAD5 = 0x65, 
    ///<summary> 
    ///Numeric keypad 6 key 
    ///</summary> 
    NUMPAD6 = 0x66, 
    ///<summary> 
    ///Numeric keypad 7 key 
    ///</summary> 
    NUMPAD7 = 0x67, 
    ///<summary> 
    ///Numeric keypad 8 key 
    ///</summary> 
    NUMPAD8 = 0x68, 
    ///<summary> 
    ///Numeric keypad 9 key 
    ///</summary> 
    NUMPAD9 = 0x69, 
    ///<summary> 
    ///Multiply key 
    ///</summary> 
    MULTIPLY = 0x6A, 
    ///<summary> 
    ///Add key 
    ///</summary> 
    ADD = 0x6B, 
    ///<summary> 
    ///Separator key 
    ///</summary> 
    SEPARATOR = 0x6C, 
    ///<summary> 
    ///Subtract key 
    ///</summary> 
    SUBTRACT = 0x6D, 
    ///<summary> 
    ///Decimal key 
    ///</summary> 
    DECIMAL = 0x6E, 
    ///<summary> 
    ///Divide key 
    ///</summary> 
    DIVIDE = 0x6F, 
    ///<summary> 
    ///F1 key 
    ///</summary> 
    F1 = 0x70, 
    ///<summary> 
    ///F2 key 
    ///</summary> 
    F2 = 0x71, 
    ///<summary> 
    ///F3 key 
    ///</summary> 
    F3 = 0x72, 
    ///<summary> 
    ///F4 key 
    ///</summary> 
    F4 = 0x73, 
    ///<summary> 
    ///F5 key 
    ///</summary> 
    F5 = 0x74, 
    ///<summary> 
    ///F6 key 
    ///</summary> 
    F6 = 0x75, 
    ///<summary> 
    ///F7 key 
    ///</summary> 
    F7 = 0x76, 
    ///<summary> 
    ///F8 key 
    ///</summary> 
    F8 = 0x77, 
    ///<summary> 
    ///F9 key 
    ///</summary> 
    F9 = 0x78, 
    ///<summary> 
    ///F10 key 
    ///</summary> 
    F10 = 0x79, 
    ///<summary> 
    ///F11 key 
    ///</summary> 
    F11 = 0x7A, 
    ///<summary> 
    ///F12 key 
    ///</summary> 
    F12 = 0x7B, 
    ///<summary> 
    ///F13 key 
    ///</summary> 
    F13 = 0x7C, 
    ///<summary> 
    ///F14 key 
    ///</summary> 
    F14 = 0x7D, 
    ///<summary> 
    ///F15 key 
    ///</summary> 
    F15 = 0x7E, 
    ///<summary> 
    ///F16 key 
    ///</summary> 
    F16 = 0x7F, 
    ///<summary> 
    ///F17 key 
    ///</summary> 
    F17 = 0x80, 
    ///<summary> 
    ///F18 key 
    ///</summary> 
    F18 = 0x81, 
    ///<summary> 
    ///F19 key 
    ///</summary> 
    F19 = 0x82, 
    ///<summary> 
    ///F20 key 
    ///</summary> 
    F20 = 0x83, 
    ///<summary> 
    ///F21 key 
    ///</summary> 
    F21 = 0x84, 
    ///<summary> 
    ///F22 key, (PPC only) Key used to lock device. 
    ///</summary> 
    F22 = 0x85, 
    ///<summary> 
    ///F23 key 
    ///</summary> 
    F23 = 0x86, 
    ///<summary> 
    ///F24 key 
    ///</summary> 
    F24 = 0x87, 
    ///<summary> 
    ///NUM LOCK key 
    ///</summary> 
    NUMLOCK = 0x90, 
    ///<summary> 
    ///SCROLL LOCK key 
    ///</summary> 
    SCROLL = 0x91, 
    ///<summary> 
    ///Left SHIFT key 
    ///</summary> 
    LSHIFT = 0xA0, 
    ///<summary> 
    ///Right SHIFT key 
    ///</summary> 
    RSHIFT = 0xA1, 
    ///<summary> 
    ///Left CONTROL key 
    ///</summary> 
    LCONTROL = 0xA2, 
    ///<summary> 
    ///Right CONTROL key 
    ///</summary> 
    RCONTROL = 0xA3, 
    ///<summary> 
    ///Left MENU key 
    ///</summary> 
    LMENU = 0xA4, 
    ///<summary> 
    ///Right MENU key 
    ///</summary> 
    RMENU = 0xA5, 
    ///<summary> 
    ///Windows 2000/XP: Browser Back key 
    ///</summary> 
    BROWSER_BACK = 0xA6, 
    ///<summary> 
    ///Windows 2000/XP: Browser Forward key 
    ///</summary> 
    BROWSER_FORWARD = 0xA7, 
    ///<summary> 
    ///Windows 2000/XP: Browser Refresh key 
    ///</summary> 
    BROWSER_REFRESH = 0xA8, 
    ///<summary> 
    ///Windows 2000/XP: Browser Stop key 
    ///</summary> 
    BROWSER_STOP = 0xA9, 
    ///<summary> 
    ///Windows 2000/XP: Browser Search key 
    ///</summary> 
    BROWSER_SEARCH = 0xAA, 
    ///<summary> 
    ///Windows 2000/XP: Browser Favorites key 
    ///</summary> 
    BROWSER_FAVORITES = 0xAB, 
    ///<summary> 
    ///Windows 2000/XP: Browser Start and Home key 
    ///</summary> 
    BROWSER_HOME = 0xAC, 
    ///<summary> 
    ///Windows 2000/XP: Volume Mute key 
    ///</summary> 
    VOLUME_MUTE = 0xAD, 
    ///<summary> 
    ///Windows 2000/XP: Volume Down key 
    ///</summary> 
    VOLUME_DOWN = 0xAE, 
    ///<summary> 
    ///Windows 2000/XP: Volume Up key 
    ///</summary> 
    VOLUME_UP = 0xAF, 
    ///<summary> 
    ///Windows 2000/XP: Next Track key 
    ///</summary> 
    MEDIA_NEXT_TRACK = 0xB0, 
    ///<summary> 
    ///Windows 2000/XP: Previous Track key 
    ///</summary> 
    MEDIA_PREV_TRACK = 0xB1, 
    ///<summary> 
    ///Windows 2000/XP: Stop Media key 
    ///</summary> 
    MEDIA_STOP = 0xB2, 
    ///<summary> 
    ///Windows 2000/XP: Play/Pause Media key 
    ///</summary> 
    MEDIA_PLAY_PAUSE = 0xB3, 
    ///<summary> 
    ///Windows 2000/XP: Start Mail key 
    ///</summary> 
    LAUNCH_MAIL = 0xB4, 
    ///<summary> 
    ///Windows 2000/XP: Select Media key 
    ///</summary> 
    LAUNCH_MEDIA_SELECT = 0xB5, 
    ///<summary> 
    ///Windows 2000/XP: Start Application 1 key 
    ///</summary> 
    LAUNCH_APP1 = 0xB6, 
    ///<summary> 
    ///Windows 2000/XP: Start Application 2 key 
    ///</summary> 
    LAUNCH_APP2 = 0xB7, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_1 = 0xBA, 
    ///<summary> 
    ///Windows 2000/XP: For any country/region, the '+' key 
    ///</summary> 
    OEM_PLUS = 0xBB, 
    ///<summary> 
    ///Windows 2000/XP: For any country/region, the ',' key 
    ///</summary> 
    OEM_COMMA = 0xBC, 
    ///<summary> 
    ///Windows 2000/XP: For any country/region, the '-' key 
    ///</summary> 
    OEM_MINUS = 0xBD, 
    ///<summary> 
    ///Windows 2000/XP: For any country/region, the '.' key 
    ///</summary> 
    OEM_PERIOD = 0xBE, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_2 = 0xBF, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_3 = 0xC0, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_4 = 0xDB, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_5 = 0xDC, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_6 = 0xDD, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_7 = 0xDE, 
    ///<summary> 
    ///Used for miscellaneous characters; it can vary by keyboard. 
    ///</summary> 
    OEM_8 = 0xDF, 
    ///<summary> 
    ///Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard 
    ///</summary> 
    OEM_102 = 0xE2, 
    ///<summary> 
    ///Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key 
    ///</summary> 
    PROCESSKEY = 0xE5, 
    ///<summary> 
    ///Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. 
    ///The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, 
    ///see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP 
    ///</summary> 
    PACKET = 0xE7, 
    ///<summary> 
    ///Attn key 
    ///</summary> 
    ATTN = 0xF6, 
    ///<summary> 
    ///CrSel key 
    ///</summary> 
    CRSEL = 0xF7, 
    ///<summary> 
    ///ExSel key 
    ///</summary> 
    EXSEL = 0xF8, 
    ///<summary> 
    ///Erase EOF key 
    ///</summary> 
    EREOF = 0xF9, 
    ///<summary> 
    ///Play key 
    ///</summary> 
    PLAY = 0xFA, 
    ///<summary> 
    ///Zoom key 
    ///</summary> 
    ZOOM = 0xFB, 
    ///<summary> 
    ///Reserved 
    ///</summary> 
    NONAME = 0xFC, 
    ///<summary> 
    ///PA1 key 
    ///</summary> 
    PA1 = 0xFD, 
    ///<summary> 
    ///Clear key 
    ///</summary> 
    OEM_CLEAR = 0xFE 
} 

internal enum ScanCodeShort : short 
{ 
    LBUTTON = 0, 
    RBUTTON = 0, 
    CANCEL = 70, 
    MBUTTON = 0, 
    XBUTTON1 = 0, 
    XBUTTON2 = 0, 
    BACK = 14, 
    TAB = 15, 
    CLEAR = 76, 
    RETURN = 28, 
    SHIFT = 42, 
    CONTROL = 29, 
    MENU = 56, 
    PAUSE = 0, 
    CAPITAL = 58, 
    KANA = 0, 
    HANGUL = 0, 
    JUNJA = 0, 
    FINAL = 0, 
    HANJA = 0, 
    KANJI = 0, 
    ESCAPE = 1, 
    CONVERT = 0, 
    NONCONVERT = 0, 
    ACCEPT = 0, 
    MODECHANGE = 0, 
    SPACE = 57, 
    PRIOR = 73, 
    NEXT = 81, 
    END = 79, 
    HOME = 71, 
    LEFT = 75, 
    UP = 72, 
    RIGHT = 77, 
    DOWN = 80, 
    SELECT = 0, 
    PRINT = 0, 
    EXECUTE = 0, 
    SNAPSHOT = 84, 
    INSERT = 82, 
    DELETE = 83, 
    HELP = 99, 
    KEY_0 = 11, 
    KEY_1 = 2, 
    KEY_2 = 3, 
    KEY_3 = 4, 
    KEY_4 = 5, 
    KEY_5 = 6, 
    KEY_6 = 7, 
    KEY_7 = 8, 
    KEY_8 = 9, 
    KEY_9 = 10, 
    KEY_A = 30, 
    KEY_B = 48, 
    KEY_C = 46, 
    KEY_D = 32, 
    KEY_E = 18, 
    KEY_F = 33, 
    KEY_G = 34, 
    KEY_H = 35, 
    KEY_I = 23, 
    KEY_J = 36, 
    KEY_K = 37, 
    KEY_L = 38, 
    KEY_M = 50, 
    KEY_N = 49, 
    KEY_O = 24, 
    KEY_P = 25, 
    KEY_Q = 16, 
    KEY_R = 19, 
    KEY_S = 31, 
    KEY_T = 20, 
    KEY_U = 22, 
    KEY_V = 47, 
    KEY_W = 17, 
    KEY_X = 45, 
    KEY_Y = 21, 
    KEY_Z = 44, 
    LWIN = 91, 
    RWIN = 92, 
    APPS = 93, 
    SLEEP = 95, 
    NUMPAD0 = 82, 
    NUMPAD1 = 79, 
    NUMPAD2 = 80, 
    NUMPAD3 = 81, 
    NUMPAD4 = 75, 
    NUMPAD5 = 76, 
    NUMPAD6 = 77, 
    NUMPAD7 = 71, 
    NUMPAD8 = 72, 
    NUMPAD9 = 73, 
    MULTIPLY = 55, 
    ADD = 78, 
    SEPARATOR = 0, 
    SUBTRACT = 74, 
    DECIMAL = 83, 
    DIVIDE = 53, 
    F1 = 59, 
    F2 = 60, 
    F3 = 61, 
    F4 = 62, 
    F5 = 63, 
    F6 = 64, 
    F7 = 65, 
    F8 = 66, 
    F9 = 67, 
    F10 = 68, 
    F11 = 87, 
    F12 = 88, 
    F13 = 100, 
    F14 = 101, 
    F15 = 102, 
    F16 = 103, 
    F17 = 104, 
    F18 = 105, 
    F19 = 106, 
    F20 = 107, 
    F21 = 108, 
    F22 = 109, 
    F23 = 110, 
    F24 = 118, 
    NUMLOCK = 69, 
    SCROLL = 70, 
    LSHIFT = 42, 
    RSHIFT = 54, 
    LCONTROL = 29, 
    RCONTROL = 29, 
    LMENU = 56, 
    RMENU = 56, 
    BROWSER_BACK = 106, 
    BROWSER_FORWARD = 105, 
    BROWSER_REFRESH = 103, 
    BROWSER_STOP = 104, 
    BROWSER_SEARCH = 101, 
    BROWSER_FAVORITES = 102, 
    BROWSER_HOME = 50, 
    VOLUME_MUTE = 32, 
    VOLUME_DOWN = 46, 
    VOLUME_UP = 48, 
    MEDIA_NEXT_TRACK = 25, 
    MEDIA_PREV_TRACK = 16, 
    MEDIA_STOP = 36, 
    MEDIA_PLAY_PAUSE = 34, 
    LAUNCH_MAIL = 108, 
    LAUNCH_MEDIA_SELECT = 109, 
    LAUNCH_APP1 = 107, 
    LAUNCH_APP2 = 33, 
    OEM_1 = 39, 
    OEM_PLUS = 13, 
    OEM_COMMA = 51, 
    OEM_MINUS = 12, 
    OEM_PERIOD = 52, 
    OEM_2 = 53, 
    OEM_3 = 41, 
    OEM_4 = 26, 
    OEM_5 = 43, 
    OEM_6 = 27, 
    OEM_7 = 40, 
    OEM_8 = 0, 
    OEM_102 = 86, 
    PROCESSKEY = 0, 
    PACKET = 0, 
    ATTN = 0, 
    CRSEL = 0, 
    EXSEL = 0, 
    EREOF = 93, 
    PLAY = 0, 
    ZOOM = 98, 
    NONAME = 0, 
    PA1 = 0, 
    OEM_CLEAR = 0, 
} 

/// <summary> 
/// Define HARDWAREINPUT struct 
/// </summary> 
[StructLayout(LayoutKind.Sequential)] 
internal struct HARDWAREINPUT 
{ 
    internal int uMsg; 
    internal short wParamL; 
    internal short wParamH; 
} 

我还发现了文档INPUTSendInput()有用。

在Citrix Receiver的自动化Preferences新代码:

Process.Start(@"C:\Program Files (x86)\Citrix\ICA Client\concentr.exe"); 
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Citrix Connection Center"); 
SetForegroundWindow(windowPtr); 
System.Threading.Thread.Sleep(1000); // The window takes about a second to load up 
SendR(); 
IntPtr prefWindowPtr = FindWindowByCaption(IntPtr.Zero, "Citrix Receiver - Preferences"); 
SendMessage(prefWindowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "Citrix Connection Center") //For some reason I need to find this handle again or it doesn't close the window 
SendMessage(windowPtr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
相关问题