• SendKeys.Send() 向活动应用程序发送击键SendKeys.SendWait() 向活动应用程序发送给定的键,然后等待消息被处理这两个方法可以发送组合键,需要注意的是字母按键应为小写。如全选Ctrl+A,要用SendKeys.SendWait("^...

    SendKeys.Send()     向活动应用程序发送击键

    SendKeys.SendWait()       向活动应用程序发送给定的键,然后等待消息被处理

    这两个方法可以发送组合键,需要注意的是字母按键应为小写。如全选Ctrl+A,要用SendKeys.SendWait("^a")才有效。

    按键对应的代码如下:

    代码

    Backspace

    {BACKSPACE}、{BS} 或 {BKSP}

    Break

    {BREAK}

    Caps Lock

    {CAPSLOCK}

    Del 或 Delete

    {DELETE} 或 {DEL}

    向下键

    {DOWN}

    End

    {END}

    Enter

    {ENTER} 或 ~

    Esc

    {ESC}

    Help

    {HELP}

    Home

    {HOME}

    Ins 或 Insert

    {INSERT} 或 {INS}

    向左键

    {LEFT}

    Num Lock

    {NUMLOCK}

    Page Down

    {PGDN}

    Page Up

    {PGUP}

    Print Screen

    {PRTSC}(保留供将来使用)

    向右键

    {RIGHT}

    Scroll Lock

    {SCROLLLOCK}

    Tab

    {TAB}

    向上键

    {UP}

    F1

    {F1}

    F2

    {F2}

    F3

    {F3}

    F4

    {F4}

    F5

    {F5}

    F6

    {F6}

    F7

    {F7}

    F8

    {F8}

    F9

    {F9}

    F10

    {F10}

    F11

    {F11}

    F12

    {F12}

    F13

    {F13}

    F14

    {F14}

    F15

    {F15}

    F16

    {F16}

    数字键盘加号

    {ADD}

    数字键盘减号

    {SUBTRACT}

    数字键盘乘号

    {MULTIPLY}

    数字键盘除号

    {DIVIDE}

     

    使用组合键时

    代码

    Shift

    +

    Ctrl

    ^

    Alt

    %

     

    展开全文
  • using System.Runtime.InteropServices;引入键盘事件函数[DllImport("user32.dll")]public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); 参数: bVk:定义一个虚拟键码。...

    using System.Runtime.InteropServices;

    引入键盘事件函数

    [DllImport("user32.dll")]
    public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);  
    参数:

     

      bVk:定义一个虚拟键码。键码值必须在1~254之间。

     

      bScan:定义该键的硬件扫描码。

     

      dwFlags:定义函数操作的名个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位。

     

      KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。KEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。dwExtralnfo:定义与击键相关的附加的32位值。

     

      返回值:该函数无返回值。

     

      备注:尽管keybd_event传递一个与OEM相关的硬件扫描码给系统,但应用程序不能用此扫描码。系统在内部将扫描码转换成虚拟键码,并且在传送给应用程序前清除键码的UP/down位。应用程序可以摸拟PRINTSCREEN键的按下来获得一个屏幕快照,并把它存放到剪切板中。若要做到这一点,则要将keybd_event的bVk参数置为VK_SNAPSHOT,bScan参数置为0(用以获得全屏快照)或hScan置为1(仅获得活动窗口的快照)。Windows CE:WindowsCE支持dwFlags参数附加的标志位。即使用KEYEVENTF_SILENT标志模拟击键,而不产生敲击的声音。Windows CE不支持KEYEVENTF_EXTENDEDKEY标志。

     

    keybd_event(13, 0, 0, 0);//模拟发送回车消息

    转载于:https://www.cnblogs.com/wwwzzg168/p/3570771.html

    展开全文
  • 废话不说,直接说demo   1.先

    废话不说,直接说demo

     

    1.先引用

    using System.Runtime.InteropServices;

    2.导入sendmessage函数入口

     

     [DllImport("user32.dll", EntryPoint = "SendMessageA")]

            private static extern int SendMessage(

               IntPtr hWnd,   // handle to destination window

               int Msg,    // message

               uint wParam, // first message parameter

               uint lParam // second message parameter

         );

    里面的参数类型可以自己改改,以适应c#的类型

    3.调用 SendMessage(textBox_BarCode.textBox_edit.Handle, 258, 13, 0);

    解释:

     

    参数1:接受句柄

    参数2:258=wm_char 具体意思:就是Const WM_CHAR = 0x0102,安下某键,并且是已经发送wm_keydown和wm_keyup消息

    参数3:13:表示键的值,回车键就是13,因此这里发送了个回车键

    参数4:不解释了,组合键的情况令谈
     

     

    展开全文
  • IntPtr hWndParent = (IntPtr)FindWindowEx(0, 0, "WorkerW", null); IntPtr hWndItem; IntPtr hWnd; while (true) { hWndItem = (IntPtr)FindWi...

     IntPtr hWndParent = (IntPtr)FindWindowEx(0, 0, "WorkerW", null);
                IntPtr hWndItem;
                IntPtr hWnd;
                while (true)
                {
                    hWndItem = (IntPtr)FindWindowEx((int)hWndParent, 0, "SHELLDLL_DefView", null);
                    if (hWndItem != IntPtr.Zero)
                    {
                        hWnd = (IntPtr)FindWindowEx((int)hWndItem, 0, "SysListView32", "FolderView");
                        break;
                    }
                    hWndParent = (IntPtr)FindWindowEx(0, (int)hWndParent, "WorkerW", null);
                }

                   
                // 激活
                // SetActiveWindow(GetDesktopWindow());
                // SetActiveWindow(tempHwnd);
                //  SetForegroundWindow(parent);

                SetFocus(hWnd);

                SendKeys.Send("as");
                SendKeys.SendWait("df");
    试了都没有效果

    向桌面发送按键或都字符,目的是在桌面按键配合Listary用
    SendKeys.Send("as");
     SendKeys.SendWait("df");

    新手学习,上面代码是网上找的

     [DllImport("user32.dll")]
     public static extern bool SetForegroundWindow(IntPtr hWnd);

    IntPtr hWndParent = (IntPtr)FindWindowEx(0, 0, "WorkerW", null);
                IntPtr hWndItem;
                IntPtr hWnd;
                while (true)
                {
                    hWndItem = (IntPtr)FindWindowEx((int)hWndParent, 0, "SHELLDLL_DefView", null);
                    if (hWndItem != IntPtr.Zero)
                    {
                        hWnd = (IntPtr)FindWindowEx((int)hWndItem, 0, "SysListView32", "FolderView");
                        SetForegroundWindow(hWnd);
                        break;
                    }
                    hWndParent = (IntPtr)FindWindowEx(0, (int)hWndParent, "WorkerW", null);
                }
     
                    
                SendKeys.Send("as");
                SendKeys.SendWait("df");


    调试完成~~

    调试”概念很简单,但是有的人没有调试概念而靠“蒙”着编程。比如说你的 hWnd、hWndItem、hWndParent 等等每一步论坛发帖机的值是什么?你 用别的工具——特别是windows SDK 自带的标准调试工具——验证过每一个值对应什么 windows 系统内部对象了吗?

     

    展开全文
  • C#调用Windows API向指定窗口发送按键消息 z 用C#调用Windows API向指定窗口发送 一、调用Windows API。 C#下调用Windows API方法如下: 1、引入命名空间:using System.Runtime.InteropServices;  2、...

    用C#调用Windows API向指定窗口发送按键消息 z

    用C#调用Windows API向指定窗口发送

    一、调用Windows API。
     C#下调用Windows API方法如下:
     1、引入命名空间:using System.Runtime.InteropServices;


     2、引用需要使用的方法,格式:[DllImport("DLL文件")]方法的声明;
     [DllImport("user32.dll")]private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
     [DllImport("user32.dll")]private static extern bool SetForegroundWindow(IntPtr hWnd);
     [DllImport("user32.dll")]private static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
     [DllImport("user32.dll")]private static extern int SendMessage(IntPtr hWnd,int Msg,int wParam,int lParam);
     [DllImport("user32.dll")]private static extern bool SetCursorPos(int X, int Y);
     [DllImport("user32.dll")]private static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
     [DllImport("user32.dll")]private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
      [DllImport("user32.dll")]private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);
     //ShowWindow参数
     private const int SW_SHOWNORMAL = 1;
     private const int SW_RESTORE = 9;
     private const int SW_SHOWNOACTIVATE = 4;
     //SendMessage参数
     private const int WM_KEYDOWN = 0X100;
     private const int WM_KEYUP = 0X101;
     private const int WM_SYSCHAR = 0X106;
     private const int WM_SYSKEYUP = 0X105;
     private const int WM_SYSKEYDOWN = 0X104;
     private const int WM_CHAR = 0X102;

     

    二、找到目标窗口
    1)、根据窗口的标题得到句柄
     IntPtr myIntPtr = FindWindow(null,"窗口名"); //null为类名,可以用Spy++得到,也可以为空
     ShowWindow(myIntPtr, SW_RESTORE); //将窗口还原
     SetForegroundWindow(myIntPtr); //如果没有ShowWindow,此方法不能设置最小化的窗口


    2)、遍历所有窗口得到句柄
    1 定义委托方法CallBack,枚举窗口API(EnumWindows),得到窗口名API(GetWindowTextW)和得到窗口类名API(GetClassNameW)
     public delegate bool CallBack(int hwnd, int lParam);
     [DllImport("user32")]public static extern int EnumWindows(CallBack x, int y);
      [DllImport("user32.dll")]private static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);
     [DllImport("user32.dll")]private static extern int GetClassNameW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)]StringBuilder lpString, int nMaxCount);

    2 调用EnumWindows遍历窗口
     CallBack myCallBack = new CallBack(Recall);
     EnumWindows(myCallBack, 0);

    3 回调方法Recall
     public bool Recall(int hwnd, int lParam)
     {
      StringBuilder sb = new StringBuilder(256);
      IntPtr PW = new IntPtr(hwnd);

      GetWindowTextW(PW,sb,sb.Capacity); //得到窗口名并保存在strName中
      string strName = sb.ToString();

      GetClassNameW(PW,sb,sb.Capacity); //得到窗口类名并保存在strClass中
      string strClass = sb.ToString();

      if (strName.IndexOf("窗口名关键字") >= 0 && strClass.IndexOf("类名关键字") >= 0)
      {
       return false; //返回false中止EnumWindows遍历
      }
      else
      {
       return true; //返回true继续EnumWindows遍历
      }
     }


    3)、打开窗口得到句柄
    1 定义设置活动窗口API(SetActiveWindow),设置前台窗口API(SetForegroundWindow)
     [DllImport("user32.dll")]static extern IntPtr SetActiveWindow(IntPtr hWnd);
     [DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool SetForegroundWindow(IntPtr hWnd);
    2 打开窗口
     Process proc = Process.Start(@"目标程序路径");
     SetActiveWindow(proc.MainWindowHandle);
     SetForegroundWindow(proc.MainWindowHandle);

     

    三、向指定的窗口输入数据
    1 利用发送消息API(SendMessage)向窗口发送数据
     InputStr(myIntPtr, _GameID); //输入游戏ID
     SendMessage(myIntPtr, WM_SYSKEYDOWN, 0X09, 0); //输入TAB(0x09)
     SendMessage(myIntPtr, WM_SYSKEYUP, 0X09, 0);
     InputStr(myIntPtr, _GamePass); //输入游戏密码
     SendMessage(myIntPtr, WM_SYSKEYDOWN, 0X0D, 0); //输入ENTER(0x0d)
     SendMessage(myIntPtr, WM_SYSKEYUP, 0X0D, 0);

     /// <summary>
     /// 发送一个字符串
     /// </summary>
     /// <param name="myIntPtr">窗口句柄</param>
     /// <param name="Input">字符串</param>
     public void InputStr(IntPtr myIntPtr, string Input)
     {
      byte[] ch = (ASCIIEncoding.ASCII.GetBytes(Input));
      for (int i = 0; i < ch.Length; i++)
      {
       SendMessage(PW, WM_CHAR, ch, 0);
      }
     }


    2 利用鼠标和键盘模拟向窗口发送数据
     SetWindowPos(PW, (IntPtr)(-1), 0, 0, 0, 0, 0x0040 | 0x0001); //设置窗口位置
     SetCursorPos(476, 177); //设置鼠标位置
     mouse_event(0x0002, 0, 0, 0, 0); //模拟鼠标按下操作
     mouse_event(0x0004, 0, 0, 0, 0); //模拟鼠标放开操作
     SendKeys.Send(_GameID);   //模拟键盘输入游戏ID
     SendKeys.Send("{TAB}"); //模拟键盘输入TAB
     SendKeys.Send(_GamePass); //模拟键盘输入游戏密码
     SendKeys.Send("{ENTER}"); //模拟键盘输入ENTER

    另:上面还提到了keybd_event方法,用法和mouse_event方法类似,作用和SendKeys.Send一样。

    转载于:https://www.cnblogs.com/Joetao/articles/5788405.html

    展开全文
  • 向任意应用程序(包括后台的)发送任意按键消息(包括普通字符键、功能键、Shift/Control/Alt加任意按键的组合键),以实现自动执行特定功能,是一个用途很广、很有实用价值的功能,很多人都受困于此,不得其解,...
  • public static class ProcessExtensions { // Messages const int WM_KEYDOWN = 0x100; const int WM_KEYUP = 0x101; const int WM_CHAR = 0x105; const ...
  • 比如发送ALT + F 以下是 用spy++截取的消息内容 <00001> 000310DC P WM_SYSKEYDOWN nVirtKey:VK_MENU cRepeat:1 ScanCode:38 fExtended:0 fAltDown:1 fRepeat:0 fUp:0<00002> 000310DC P WM_SY...
  • 应用:像生产的烧录软件,是由第三方提供你无法修改。但又想在烧录程序时将bin文件中的序列号每烧一次加1;  那么实现以前工作,可以做一个app将bin文件加1,然后向烧录软件发消息。例如烧录软件识别F9, ...
  • C# SandKeys 向程序发送模拟键盘按键,全部键盘值
  • 两个工具,简单实现了按键精灵的功能,带源码。 1.从xml脚本中读取数据,简易的模拟鼠标键盘输入。调用自己SendInput API封装好的DLL。 2.全局鼠标键盘钩子,生成模拟输入脚本。
  • 【工具说明】 c#.net 3.5 版本 需要Win7 系统或者 XP安装 .net 3.5 c#按键模拟精灵 通过发送指令 模拟键盘按键。 使用线程机制,随意关闭线程,开启线程。不阻塞UI。
  • 钩子,sednmessage keys.send 按键事件。 能用到的都用了。做的不是很完善。。。
  • 1:通过FindWindow找到窗体 2:通过...3:发送按键 声明: [DllImport("USER32.DLL")] public static extern IntPtr FindWindow(string lpClassName,string lpWindowName); [DllImport("USER32.DLL
  • C#模拟按键输入

    2020-02-17 16:24:44
    [DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)] public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo); keybd_event(Keys.Down, ...
  • 为什么80%的码农都做不了架构师?>>> ...
  • C#如何在后台捕捉按键 [此问题的推荐答案] API别忘了 using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 ...
  • 模拟键盘,向当前进程发送按键消息,进行操作,包括组合键的发送,例如Ctrl+c等按键消息,用于通过软件对当前运行的程序进行键盘控制
1 2 3 4 5 ... 20
收藏数 4,439
精华内容 1,775