整理分享C#通过user32.dll模拟物理按键操作的代码
对系统模拟按键方面的知识和按键映射代码做了一下梳理,在这里分享出来,适用于开发自动操作工具和游戏外挂。
主代码:
- public const int KEYEVENTF_EXTENDEDKEY = 0x0001; //Key click flag
- public const int KEYEVENTF_KEYUP = 0x0002; //Key up flag
- [DllImport("user32.dll")]
- private static extern void keybd_event(byte bVk, byte bSCan, int dwFlags, int dwExtraInfo);
- [DllImport("user32.dll")]
- private static extern byte MapVirtualKey(byte wCode, int wMap);
- public static void 模拟按下按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte)虚拟按键代码;
- keybd_event(code, , , );
- }
- public static void 模拟弹起按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte) 虚拟按键代码;
- keybd_event(code, , KEYEVENTF_KEYUP, );
- }
- public static void 模拟单击按键(VirtualKeyCode 虚拟按键代码)
- {
- var code = (byte)虚拟按键代码;
- keybd_event(code, , KEYEVENTF_EXTENDEDKEY, );
- }
网上关于keybd_event的dwFlags参数功能说法很混乱,经我测试貌似是KEYEVENTF_EXTENDEDKEY表示一次单击,0表示按下,KEYEVENTF_KEYUP表示弹起,不一定完全正确,希望高人指点一下。
另外MapVirtualKey的作用实在不懂,所以就没用上,看到有人这么调用不知有什么区别:
- var code = (byte)虚拟按键代码;
- keybd_event(code, MapVirtualKey(code,), , );
我试过好像也没什么变化~到底MapVirtualKey是干什么用的呢??
VirtualKeyCode枚举:
- /// <summary>
- /// 虚拟按键代码
- /// 参考于 http://msdn.microsoft.com/zh-cn/library/dd375731(v=vs.85).aspx
- /// </summary>
- public enum VirtualKeyCode
- {
- /// <summary>
- /// Left mouse button
- /// </summary>
- Left_mouse_button = 0x01,
- /// <summary>
- /// Right mouse button
- /// </summary>
- Right_mouse_button = 0x02,
- /// <summary>
- /// Control-break processing
- /// </summary>
- Control_break_processing = 0x03,
- /// <summary>
- /// Middle mouse button (three-button mouse)
- /// </summary>
- Middle_mouse_button = 0x04,
- /// <summary>
- /// X1 mouse button
- /// </summary>
- X1_mouse_button = 0x05,
- /// <summary>
- /// X2 mouse button
- /// </summary>
- X2_mouse_button = 0x06,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined1 = 0x07,
- /// <summary>
- /// BACKSPACE key
- /// </summary>
- BACKSPACE_key = 0x08,
- /// <summary>
- /// TAB key
- /// </summary>
- TAB_key = 0x09,
- /// <summary>
- /// CLEAR key
- /// </summary>
- CLEAR_key = 0x0C,
- /// <summary>
- /// ENTER key
- /// </summary>
- ENTER_key = 0x0D,
- /// <summary>
- /// SHIFT key
- /// </summary>
- SHIFT_key = 0x10,
- /// <summary>
- /// CTRL key
- /// </summary>
- CTRL_key = 0x11,
- /// <summary>
- /// ALT key
- /// </summary>
- ALT_key = 0x12,
- /// <summary>
- /// PAUSE key
- /// </summary>
- PAUSE_key = 0x13,
- /// <summary>
- /// CAPS LOCK key
- /// </summary>
- CAPS_LOCK_key = 0x14,
- /// <summary>
- /// IME Kana mode
- /// </summary>
- IME_Kana_mode = 0x15,
- /// <summary>
- /// IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
- /// </summary>
- IME_Hanguel_mode = 0x15,
- /// <summary>
- /// IME Hangul mode
- /// </summary>
- IME_Hangul_mode = 0x15,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined2 = 0x16,
- /// <summary>
- /// IME Junja mode
- /// </summary>
- IME_Junja_mode = 0x17,
- /// <summary>
- /// IME final mode
- /// </summary>
- IME_final_mode = 0x18,
- /// <summary>
- /// IME Hanja mode
- /// </summary>
- IME_Hanja_mode = 0x19,
- /// <summary>
- /// IME Kanji mode
- /// </summary>
- IME_Kanji_mode = 0x19,
- /// <summary>
- /// Undefined
- /// </summary>
- Undefined = 0x1A,
- /// <summary>
- /// ESC key
- /// </summary>
- ESC_key = 0x1B,
- /// <summary>
- /// IME convert
- /// </summary>
- IME_convert = 0x1C,
- /// <summary>
- /// IME nonconvert
- /// </summary>
- IME_nonconvert = 0x1D,
- /// <summary>
- /// IME accept
- /// </summary>
- IME_accept = 0x1E,
- /// <summary>
- /// IME mode change request
- /// </summary>
- IME_mode_change_request = 0x1F,
- /// <summary>
- /// SPACEBAR
- /// </summary>
- SPACEBAR = 0x20,
- /// <summary>
- /// PAGE UP key
- /// </summary>
- PAGE_UP_key = 0x21,
- /// <summary>
- /// PAGE DOWN key
- /// </summary>
- PAGE_DOWN_key = 0x22,
- /// <summary>
- /// END key
- /// </summary>
- END_key = 0x23,
- /// <summary>
- /// HOME key
- /// </summary>
- HOME_key = 0x24,
- /// <summary>
- /// LEFT ARROW key
- /// </summary>
- LEFT_ARROW_key = 0x25,
- /// <summary>
- /// UP ARROW key
- /// </summary>
- UP_ARROW_key = 0x26,
- /// <summary>
- /// RIGHT ARROW key
- /// </summary>
- RIGHT_ARROW_key = 0x27,
- /// <summary>
- /// DOWN ARROW key
- /// </summary>
- DOWN_ARROW_key = 0x28,
- /// <summary>
- /// SELECT key
- /// </summary>
- SELECT_key = 0x29,
- /// <summary>
- /// PRINT key
- /// </summary>
- PRINT_key = 0x2A,
- /// <summary>
- /// EXECUTE key
- /// </summary>
- EXECUTE_key = 0x2B,
- /// <summary>
- /// PRINT SCREEN key
- /// </summary>
- PRINT_SCREEN_key = 0x2C,
- /// <summary>
- /// INS key
- /// </summary>
- INS_key = 0x2D,
- /// <summary>
- /// DEL key
- /// </summary>
- DEL_key = 0x2E,
- /// <summary>
- /// HELP key
- /// </summary>
- HELP_key = 0x2F,
- /// <summary>
- /// 0 key
- /// </summary>
- _0_key = 0x30,
- /// <summary>
- /// 1 key
- /// </summary>
- _1_key = 0x31,
- /// <summary>
- /// 2 key
- /// </summary>
- _2_key = 0x32,
- /// <summary>
- /// 3 key
- /// </summary>
- _3_key = 0x33,
- /// <summary>
- /// 4 key
- /// </summary>
- _4_key = 0x34,
- /// <summary>
- /// 5 key
- /// </summary>
- _5_key = 0x35,
- /// <summary>
- /// 6 key
- /// </summary>
- _6_key = 0x36,
- /// <summary>
- /// 7 key
- /// </summary>
- _7_key = 0x37,
- /// <summary>
- /// 8 key
- /// </summary>
- _8_key = 0x38,
- /// <summary>
- /// 9 key
- /// </summary>
- _9_key = 0x39,
- /// <summary>
- /// A key
- /// </summary>
- A_key = 0x41,
- /// <summary>
- /// B key
- /// </summary>
- B_key = 0x42,
- /// <summary>
- /// C key
- /// </summary>
- C_key = 0x43,
- /// <summary>
- /// D key
- /// </summary>
- D_key = 0x44,
- /// <summary>
- /// E key
- /// </summary>
- E_key = 0x45,
- /// <summary>
- /// F key
- /// </summary>
- F_key = 0x46,
- /// <summary>
- /// G key
- /// </summary>
- G_key = 0x47,
- /// <summary>
- /// H key
- /// </summary>
- H_key = 0x48,
- /// <summary>
- /// I key
- /// </summary>
- I_key = 0x49,
- /// <summary>
- /// J key
- /// </summary>
- J_key = 0x4A,
- /// <summary>
- /// K key
- /// </summary>
- K_key = 0x4B,
- /// <summary>
- /// L key
- /// </summary>
- L_key = 0x4C,
- /// <summary>
- /// M key
- /// </summary>
- M_key = 0x4D,
- /// <summary>
- /// N key
- /// </summary>
- N_key = 0x4E,
- /// <summary>
- /// O key
- /// </summary>
- O_key = 0x4F,
- /// <summary>
- /// P key
- /// </summary>
- P_key = 0x50,
- /// <summary>
- /// Q key
- /// </summary>
- Q_key = 0x51,
- /// <summary>
- /// R key
- /// </summary>
- R_key = 0x52,
- /// <summary>
- /// S key
- /// </summary>
- S_key = 0x53,
- /// <summary>
- /// T key
- /// </summary>
- T_key = 0x54,
- /// <summary>
- /// U key
- /// </summary>
- U_key = 0x55,
- /// <summary>
- /// V key
- /// </summary>
- V_key = 0x56,
- /// <summary>
- /// W key
- /// </summary>
- W_key = 0x57,
- /// <summary>
- /// X key
- /// </summary>
- X_key = 0x58,
- /// <summary>
- /// Y key
- /// </summary>
- Y_key = 0x59,
- /// <summary>
- /// Z key
- /// </summary>
- Z_key = 0x5A,
- /// <summary>
- /// Left Windows key (Natural keyboard)
- /// </summary>
- Left_Windows_key = 0x5B,
- /// <summary>
- /// Right Windows key (Natural keyboard)
- /// </summary>
- Right_Windows_key = 0x5C,
- /// <summary>
- /// Applications key (Natural keyboard)
- /// </summary>
- Applications_key = 0x5D,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved1 = 0x5E,
- /// <summary>
- /// Computer Sleep key
- /// </summary>
- Computer_Sleep_key = 0x5F,
- /// <summary>
- /// Numeric keypad 0 key
- /// </summary>
- Numeric_keypad_0_key = 0x60,
- /// <summary>
- /// Numeric keypad 1 key
- /// </summary>
- Numeric_keypad_1_key = 0x61,
- /// <summary>
- /// Numeric keypad 2 key
- /// </summary>
- Numeric_keypad_2_key = 0x62,
- /// <summary>
- /// Numeric keypad 3 key
- /// </summary>
- Numeric_keypad_3_key = 0x63,
- /// <summary>
- /// Numeric keypad 4 key
- /// </summary>
- Numeric_keypad_4_key = 0x64,
- /// <summary>
- /// Numeric keypad 5 key
- /// </summary>
- Numeric_keypad_5_key = 0x65,
- /// <summary>
- /// Numeric keypad 6 key
- /// </summary>
- Numeric_keypad_6_key = 0x66,
- /// <summary>
- /// Numeric keypad 7 key
- /// </summary>
- Numeric_keypad_7_key = 0x67,
- /// <summary>
- /// Numeric keypad 8 key
- /// </summary>
- Numeric_keypad_8_key = 0x68,
- /// <summary>
- /// Numeric keypad 9 key
- /// </summary>
- Numeric_keypad_9_key = 0x69,
- /// <summary>
- /// Multiply key
- /// </summary>
- Multiply_key = 0x6A,
- /// <summary>
- /// Add key
- /// </summary>
- Add_key = 0x6B,
- /// <summary>
- /// Separator key
- /// </summary>
- Separator_key = 0x6C,
- /// <summary>
- /// Subtract key
- /// </summary>
- Subtract_key = 0x6D,
- /// <summary>
- /// Decimal key
- /// </summary>
- Decimal_key = 0x6E,
- /// <summary>
- /// Divide key
- /// </summary>
- Divide_key = 0x6F,
- /// <summary>
- /// F1 key
- /// </summary>
- F1_key = 0x70,
- /// <summary>
- /// F2 key
- /// </summary>
- F2_key = 0x71,
- /// <summary>
- /// F3 key
- /// </summary>
- F3_key = 0x72,
- /// <summary>
- /// F4 key
- /// </summary>
- F4_key = 0x73,
- /// <summary>
- /// F5 key
- /// </summary>
- F5_key = 0x74,
- /// <summary>
- /// F6 key
- /// </summary>
- F6_key = 0x75,
- /// <summary>
- /// F7 key
- /// </summary>
- F7_key = 0x76,
- /// <summary>
- /// F8 key
- /// </summary>
- F8_key = 0x77,
- /// <summary>
- /// F9 key
- /// </summary>
- F9_key = 0x78,
- /// <summary>
- /// F10 key
- /// </summary>
- F10_key = 0x79,
- /// <summary>
- /// F11 key
- /// </summary>
- F11_key = 0x7A,
- /// <summary>
- /// F12 key
- /// </summary>
- F12_key = 0x7B,
- /// <summary>
- /// F13 key
- /// </summary>
- F13_key = 0x7C,
- /// <summary>
- /// F14 key
- /// </summary>
- F14_key = 0x7D,
- /// <summary>
- /// F15 key
- /// </summary>
- F15_key = 0x7E,
- /// <summary>
- /// F16 key
- /// </summary>
- F16_key = 0x7F,
- /// <summary>
- /// F17 key
- /// </summary>
- F17_key = 0x80,
- /// <summary>
- /// F18 key
- /// </summary>
- F18_key = 0x81,
- /// <summary>
- /// F19 key
- /// </summary>
- F19_key = 0x82,
- /// <summary>
- /// F20 key
- /// </summary>
- F20_key = 0x83,
- /// <summary>
- /// F21 key
- /// </summary>
- F21_key = 0x84,
- /// <summary>
- /// F22 key
- /// </summary>
- F22_key = 0x85,
- /// <summary>
- /// F23 key
- /// </summary>
- F23_key = 0x86,
- /// <summary>
- /// F24 key
- /// </summary>
- F24_key = 0x87,
- /// <summary>
- /// NUM LOCK key
- /// </summary>
- NUM_LOCK_key = 0x90,
- /// <summary>
- /// SCROLL LOCK key
- /// </summary>
- SCROLL_LOCK_key = 0x91,
- /// <summary>
- /// Left SHIFT key
- /// </summary>
- Left_SHIFT_key = 0xA0,
- /// <summary>
- /// Right SHIFT key
- /// </summary>
- Right_SHIFT_key = 0xA1,
- /// <summary>
- /// Left CONTROL key
- /// </summary>
- Left_CONTROL_key = 0xA2,
- /// <summary>
- /// Right CONTROL key
- /// </summary>
- Right_CONTROL_key = 0xA3,
- /// <summary>
- /// Left MENU key
- /// </summary>
- Left_MENU_key = 0xA4,
- /// <summary>
- /// Right MENU key
- /// </summary>
- Right_MENU_key = 0xA5,
- /// <summary>
- /// Browser Back key
- /// </summary>
- Browser_Back_key = 0xA6,
- /// <summary>
- /// Browser Forward key
- /// </summary>
- Browser_Forward_key = 0xA7,
- /// <summary>
- /// Browser Refresh key
- /// </summary>
- Browser_Refresh_key = 0xA8,
- /// <summary>
- /// Browser Stop key
- /// </summary>
- Browser_Stop_key = 0xA9,
- /// <summary>
- /// Browser Search key
- /// </summary>
- Browser_Search_key = 0xAA,
- /// <summary>
- /// Browser Favorites key
- /// </summary>
- Browser_Favorites_key = 0xAB,
- /// <summary>
- /// Browser Start and Home key
- /// </summary>
- Browser_Start_and_Home_key = 0xAC,
- /// <summary>
- /// Volume Mute key
- /// </summary>
- Volume_Mute_key = 0xAD,
- /// <summary>
- /// Volume Down key
- /// </summary>
- Volume_Down_key = 0xAE,
- /// <summary>
- /// Volume Up key
- /// </summary>
- Volume_Up_key = 0xAF,
- /// <summary>
- /// Next Track key
- /// </summary>
- Next_Track_key = 0xB0,
- /// <summary>
- /// Previous Track key
- /// </summary>
- Previous_Track_key = 0xB1,
- /// <summary>
- /// Stop Media key
- /// </summary>
- Stop_Media_key = 0xB2,
- /// <summary>
- /// Play/Pause Media key
- /// </summary>
- Play_Or_Pause_Media_key = 0xB3,
- /// <summary>
- /// Start Mail key
- /// </summary>
- Start_Mail_key = 0xB4,
- /// <summary>
- /// Select Media key
- /// </summary>
- Select_Media_key = 0xB5,
- /// <summary>
- /// Start Application 1 key
- /// </summary>
- Start_Application_1_key = 0xB6,
- /// <summary>
- /// Start Application 2 key
- /// </summary>
- Start_Application_2_key = 0xB7,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters1 = 0xBA,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters2 = 0xBF,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters3 = 0xC0,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters4 = 0xDB,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters5 = 0xDC,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters6 = 0xDD,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters7 = 0xDE,
- /// <summary>
- /// Used for miscellaneous characters; it can vary by keyboard.
- /// </summary>
- Used_for_miscellaneous_characters8 = 0xDF,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved2 = 0xE0,
- /// <summary>
- /// OEM specific
- /// </summary>
- OEM_specific1 = 0xE1,
- /// <summary>
- /// Either the angle bracket key or the backslash key on the RT 102-key keyboard
- /// </summary>
- Either_the_angle_bracket_key_or_the_backslash_key_on_the_RT_102_key_keyboard = 0xE2,
- /// <summary>
- /// IME PROCESS key
- /// </summary>
- IME_PROCESS_key = 0xE5,
- /// <summary>
- /// OEM specific
- /// </summary>
- OEM_specific2 = 0xE6,
- /// <summary>
- /// 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>
- Used_to_pass_Unicode_characters_as_if_they_were_keystrokes = 0xE7,
- /// <summary>
- /// Unassigned
- /// </summary>
- Unassigned = 0xE8,
- /// <summary>
- /// Attn key
- /// </summary>
- Attn_key = 0xF6,
- /// <summary>
- /// CrSel key
- /// </summary>
- CrSel_key = 0xF7,
- /// <summary>
- /// ExSel key
- /// </summary>
- ExSel_key = 0xF8,
- /// <summary>
- /// Erase EOF key
- /// </summary>
- Erase_EOF_key = 0xF9,
- /// <summary>
- /// Play key
- /// </summary>
- Play_key = 0xFA,
- /// <summary>
- /// Zoom key
- /// </summary>
- Zoom_key = 0xFB,
- /// <summary>
- /// Reserved
- /// </summary>
- Reserved = 0xFC,
- /// <summary>
- /// PA1 key
- /// </summary>
- PA1_key = 0xFD,
- /// <summary>
- /// Clear key
- /// </summary>
- Clear_key = 0xFE
- }
调用演示:
- //模拟实现Ctrl+O操作
- 模拟按下按键(VirtualKeyCode.CTRL_key)
- 模拟单击按键(VirtualKeyCode.O_key)
- 模拟弹起按键(VirtualKeyCode.CTRL_key)
整理分享C#通过user32.dll模拟物理按键操作的代码的更多相关文章
- UI自动化测试(四)AutoIT工具使用和robot对象模拟键盘按键操作
AutoIT简介 AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/ ...
- python+appium模拟手机物理按键操作
一句代码:driver.keyevent() 括号里填入的是手机物理按键的数字代号 driver.press_keycode() 括号里填入的是键盘按键的数字代号 手机物理 ...
- C# 模拟键盘按键操作
[DllImport("user32.dll")] public static extern IntPtr keybd_event(byte bVk, byte bScan, in ...
- selenium学习-模拟键盘按键操作
导入 from selenium.webdriver.common.keys import Keys 格式:Keys.XXX 一般这么用:send_keys(Keys.XXX) # coding= ...
- emacs里面模拟vim按键操作的插件evil
emacsConfig/evil-setting.el (setq evil-mode t) (setq evil-shift-width ) ;; some modes aren't meant f ...
- Android随笔之——用shell脚本模拟用户按键、触摸操作
之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作.本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容. 本文的模拟功 ...
- 【整理】c# 调用windows API(user32.dll)
User32.dll提供了很多可供调用的接口,大致如下(转自http://blog.csdn.net/zhang399401/article/details/6978803) using System ...
- Win32 API中的user32.dll中的ShowWindow方法参数整理
在使用ShowWindow方法来设置窗体的状态时,由于不知道参数值,用起来非常容易混乱,所以整理了以下其参数的枚举值,方便以后的的使用. public class User32API { #reg ...
- C#中可直接调用WIN32的API函数--USER32.DLL
Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...
随机推荐
- ASP.NET MVC 中将FormCollection与实体间转换方法
将Action动作中传递的FormCollection转变成对应的实体,可以使用Controller的TryUpdateModel()方法. public ActionResult Create(Fo ...
- session 丢失和解决方案
在ASP.NET的开发中,总遇到Session丢失.最常见的情况是当用户登录后将用户信息保存在Session中例如Session["user"]=user;在其后的页面中检查Ses ...
- python 数据处理中各种存储方式里数据类型的转换
自己记录,仅供参考 在数据处理时经常会遇到数据类型不匹配的事情,为了方便查看各种存储方式中数据类型的改变.我把一些自己常用的整理方式记录下来,希望可以为以后数据类型的处理工作提供便利. 数据常用的基本 ...
- 从入门到精通C++需要学的10本书
学习C++从入门到精通的的十本最经典书籍 文章来源中国IT实验室收集整理作者佚名更新时间2009-5-16 12:27:05 保存本文保存本文推荐给好友推荐给好友收藏本页收藏本页 欢迎进入C/C++ ...
- Linux解压和打包jar
linux 中解压jarunzip XXX.jar -d app 打jar 进入到解压目录里面(app)jar cvfm0 MR-XDR-JMR-NEW.jar META-INF/MANIFEST.M ...
- Loadrunner开发测试脚本
Loadrunner开发测试脚本 开发测试脚本可以通过录制,也可以手动开发,建议能录制的尽量录制,省时省力,不能录制的只能费力自己开发了,具体看项目情况来决定. 使用Loadrunner开发脚本过程中 ...
- MySQL连接线程kill利器之pt-kill
如何每10秒检查一次,杀死指定用户超过100秒的查询? pt-kill \ --no-version-check \ --host 127.0.0.1 --port 3306 --user 'xxxx ...
- python模块学习心得
初始模块 1.什么是模块 模块是用来实现某项功能的一大堆代码,为什么会有模块呢?过程式编程的时候为了减少程序员编程代码的重复性,就利用函数的调用减少了代码的重复性,但是某些时候程序会过于的庞大,我们会 ...
- linux 学习6 软件包安装
一.软件包管理简介 二.RPM包管理-rpm命令管理 三.RPM包管理-yum在线管理 四.源码包管理 五.脚本安装包与软件包选择 .软件包分类 源码包 脚本安装包 二进制包(RPM包.系统默认 ...
- Perl爬取铁路违章旅客信息
#! /usr/bin/perl use strict; use Encode qw(encode decode); binmode(STDIN,":encoding(utf8)" ...