关于 SENDKEYS 的代码

sendkeys 的用法(MSDN):

SendKeys 语句

       

将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样。

语法

SendKeys string[, wait]

SendKeys 语句的语法具有以下几个命名参数:

部分描述
string必需的。字符串表达式,指定要发送的按键消息。
Wait可选的。指定等待方式的 BooleandefBooleanDataType@veendf98.chm 值。如果为 False(缺省值),则控件在按键发送出去之后立刻返回到过程。如果为 True,则按键消息必须在控件返回到过程之前加以处理。

 

说明

每个按键由一个或多个字符表示。为了指定单一键盘字符,必须按字符本身的键。例如,为了表示字母 A,可以用 "A" 作为 string。为了表示多个字符,就必须在字符后面直接加上另一个字符。例如,要表示 A、B 及 C,可用 "ABC" 作为 string

SendKeys 来说,加号 (+)、插入符 (^)、百分比符号 (%)、上划线 (~) 及圆括号 ( ) 都具有特殊意义。为了指定上述任何一个字符,要将它放在大括号 ({}) 当中。例如,要指定正号,可用 {+} 表示。方括号 ([ ]) 对 SendKeys 来说并不具有特殊意义,但必须将它们放在大括号中。在其它应用程序中,方括号有特殊意义,在出现动态数据交换 (DDE) 的时候,它可能具有重要意义。为了指定大括号字符,请使用 {{} 及 {}}。

为了在按下按键时指定那些不显示的字符,例如 ENTER 或 TAB 以及那些表示动作而非字符的按键,请使用下列代码:

按键代码
BACKSPACE{BACKSPACE}, {BS}, 或 {BKSP}
BREAK{BREAK}
CAPS LOCK{CAPSLOCK}
DEL or DELETE{DELETE} 或 {DEL}
DOWN ARROW{DOWN}
END{END}
ENTER {ENTER}~
ESC{ESC}
HELP{HELP}
HOME{HOME}
INS or INSERT{INSERT} 或 {INS}
LEFT ARROW{LEFT}
NUM LOCK{NUMLOCK}
PAGE DOWN{PGDN}
PAGE UP{PGUP}
PRINT SCREEN{PRTSC}
RIGHT ARROW{RIGHT}
SCROLL LOCK{SCROLLLOCK}
TAB{TAB}
UP ARROW{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}

 

为了指定那些与 SHIFT、CTRL 及 ALT 等按键结合的组合键,可在这些按键码的前面放置一个或多个代码,这些代码列举如下:

按键代码
SHIFT+
CTRL ^
ALT%

 

为了说明在按下其它按键时应同时按下 SHIFT、CTRL、及 ALT 的任意组合键,请把那些按键的码放在括号当中。例如,为了说明按下 E 与 C 的时候同时按下 SHIFT 键,请使用 "+(EC)"。为了说明在按下 E 的时候同时按下 SHIFT 键,但接着按 C 而不按 SHIFT,则使用 "+EC"。

为了指定重复键,使用 {key number} 的形式。必须在 keynumber 之间放置一个空格。例如,{LEFT 42} 意指 42 次按下 LEFT ARROW 键;{h 10} 则是指 10 次按下 H 键。

注意 不能用 SendKeys 将按键消息发送到这样一个应用程序,这个应用程序并没有被设计成在 Microsoft Windows or Macintosh中运行。Sendkeys 也无法将 PRINT SCREEN 按键 {PRTSC} 发送到任何应用程序。

我们如果想发送键命令,可以用 SENDKEYS ,但要发送 WINDOWS 微标键怎么做?(MSDN中没有给出WINDOWS键 的键码)
下面是可以执行的代码:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_LWIN = &H5B 'Left Windows key (Microsoft Natural keyboard)
Private Const VK_RWIN = &H5C 'Right Windows key (Natural keyboard)
Private Sub Command1_Click() 'left windows
keybd_event VK_LWIN, 0&H1, 0
keybd_event VK_LWIN, 
0&H2, 0
End Sub
Private Sub Command2_Click() 'right windows
keybd_event VK_RWIN, 0&H1, 0
keybd_event VK_RWIN, 
0&H2, 0
End Sub

 

详细的解释可参看SENDKEYS 类(http://www.vbaccelerator.com/home/VB/Tips/SendKeys_using_the_API/SendKeys_Demonstration_zip_cSendKeys_cls.asp):

vbAccelerator - Contents of code file: cSendKeys.clsVERSION 1.0 CLASS
BEGIN
  MultiUse 
= -1  'True
END
Attribute VB_Name 
= "cSendKeys"
Attribute VB_GlobalNameSpace 
= False
Attribute VB_Creatable 
= True
Attribute VB_PredeclaredId 
= False
Attribute VB_Exposed 
= False
Option Explicit

Public Enum MoreKeyConstants
   VK_LWIN 
= &H5B 'Left Windows key (Microsoft Natural keyboard)
   VK_RWIN = &H5C 'Right Windows key (Natural keyboard)
   VK_APPS = &H5D 'Applications key (Natural keyboard)
   VK_SLEEP = &H5F 'Computer Sleep key
   
   VK_RMENU 
= &HA5 ' Right MENU key
   VK_BROWSER_BACK = &HA6 'Windows 2000/XP: Browser Back key
   VK_BROWSER_FORWARD = &HA7 'Windows 2000/XP: Browser Forward key
   VK_BROWSER_REFRESH = &HA8 'Windows 2000/XP: Browser Refresh key
   VK_BROWSER_STOP = &HA9 'Windows 2000/XP: Browser Stop key
   VK_BROWSER_SEARCH = &HAA 'Windows 2000/XP: Browser Search key
   VK_BROWSER_FAVORITES = &HAB 'Windows 2000/XP: Browser Favorites key
   VK_BROWSER_HOME = &HAC 'Windows 2000/XP: Browser Start and Home key
   VK_VOLUME_MUTE = &HAD 'Windows 2000/XP: Volume Mute key
   VK_VOLUME_DOWN = &HAE  'Windows 2000/XP: Volume Down key
   VK_VOLUME_UP = &HAF  'Windows 2000/XP: Volume Up key
   VK_MEDIA_NEXT_TRACK = &HB0  'Windows 2000/XP: Next Track key
   VK_MEDIA_PREV_TRACK = &HB1  'Windows 2000/XP: Previous Track key
   VK_MEDIA_STOP = &HB2  'Windows 2000/XP: Stop Media key
   VK_MEDIA_PLAY_PAUSE = &HB3  'Windows 2000/XP: Play/Pause Media key
   VK_LAUNCH_MAIL = &HB4  'Windows 2000/XP: Start Mail key
   VK_LAUNCH_MEDIA_SELECT = &HB5  'Windows 2000/XP: Select Media key
   VK_LAUNCH_APP1 = &HB6  'Windows 2000/XP: Start Application 1 key
   VK_LAUNCH_APP2 = &HB7  'Windows 2000/XP: Start Application 2 key
   VK_OEM_1 = &HBA 'Used for miscellaneous characters; it can vary by keyboard.
    Windows 2000/XP: For the US standard keyboard, the ';:' key
 
   VK_OEM_PLUS 
= &HBB 'Windows 2000/XP: For any country/region, the '+' key
   VK_OEM_COMMA = &HBC 'Windows 2000/XP: For any country/region, the ',' key
   VK_OEM_MINUS = &HBD 'Windows 2000/XP: For any country/region, the '-' key
   VK_OEM_PERIOD = &HBE 'Windows 2000/XP: For any country/region, the '.' key
   VK_OEM_2 = &HBF 'Used for miscellaneous characters; it can vary by keyboard.
    Windows 2000/XP: For the US standard keyboard, the '/?' key
   VK_OEM_3 = &HC0 'Used for miscellaneous characters; it can vary by keyboard.
    Windows 2000/XP: For the US standard keyboard, the '`~' key

'  C1D7 Reserved
'
  D8DA Unassigned
   VK_OEM_4 = &HDB 'Used for miscellaneous characters; it can vary by keyboard.
    Windows 2000/XP: For the US standard keyboard, the '[{' key
   VK_OEM_5 = &HDC 'Used for miscellaneous characters; it can vary by keyboard.
    Windows 2000/XP: For the US standard keyboard, the '|' key
   VK_OEM_6 = &HDD 'Used for miscellaneous characters; it can vary by keyboard
    Windows 2000/XP: For the US standard keyboard, the ']}' key
   VK_OEM_7 = &HDE ' Used for miscellaneous characters; it can vary by
    keyboard. Windows 2000/XP: For the US standard keyboard, the
    
'single-quote/double-quote' key
   VK_OEM_8 = &HDF 'Used for miscellaneous characters; it can vary by keyboard.
      E0 Reserved
'- E1 OEM specific
   VK_OEM_102 = &HE2 'Windows 2000/XP: Either the angle bracket key or the
    backslash key on the RT 102-key keyboard
' E3E4 OEM specific
   VK_PROCESSKEY = &HE5 'Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME
    PROCESS key
' E6 OEM specific
   VK_PACKET = &HE7 '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
'  E8 Unassigned
'
 E9F5 OEM specific
   VK_ATTN = &HF6 'Attn key
   VK_CRSEL = &HF7 'CrSel key
   VK_EXSEL = &HF8 'ExSel key
   VK_EREOF = &HF9 'Erase EOF key
   VK_PLAY = &HFA 'Play key
   VK_ZOOM = &HFB 'Zoom key
   VK_NONAME = &HFC 'Reserved for future use
   VK_PA1 = &HFD 'PA1 key
   VK_OEM_CLEAR = &HFE 'Clear key
End Enum

Private m_colKeyMap As New Collection

Private Declare Sub keybd_event Lib "user32" ( _
   ByVal bVk 
As Byte, ByVal bScan As Byte, _
   ByVal dwFlags 
As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2

Private Declare Function GetVersion Lib "kernel32" () As Long
Private Declare Function VkKeyScan Lib "user32" Alias "VkKeyScanA" ( _
   ByVal cChar 
As ByteAs Integer
Private Declare Function VkKeyScanW Lib "user32" ( _
   ByVal cChar 
As IntegerAs Integer

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    lpvDest 
As Any, lpvSource As Any, ByVal cbCopy As Long)

Private Function nextChar(ByRef sString As String, ByVal iPos As Long, Optional
 ByVal lLen 
As Long = 0As String
   
If (lLen = 0Then lLen = Len(sString)
   
If (iPos + 1 <= lLen) Then
      nextChar 
= Mid$(sString, iPos + 11)
   
End If
End Function

Public Sub SendKeys(ByVal sKeys As String, Optional ByVal Wait As Boolean)

   
' The plus sign (+), caret (^), percent sign (%),
   ' tilde (~), and parentheses ( ) have special
   ' meanings to SendKeys
   ' Brackets ([ ]) have no special meaning to SendKeys,
   ' but you must enclose them in braces.
   ' To specify brace characters, use {{} and {}}.
   ' Repeating keys: {LEFT 42} do left 42 times.
   
   
' + = Shift
   ' ^ = Ctrl
   ' % = Alt
   ' ~ = enter
   ' ( = start sub expression. +(EC) = Shift then E then C
      
On Error GoTo errorHandler

   
Dim sMsg As String
   
Dim lErr As Long
   
Dim iPos As Long
   
Dim iNextPos As Long
   
Dim iLen As Long
   
Dim sChar As String
   
Dim colBrace As New Collection
   
Dim sContent As String
   
Dim sKey As String
   
Dim sCount As String
   
Dim lCount As Long

   iPos 
= 1
   iLen 
= Len(sKeys)
   
Do While iPos <= iLen
   
      sChar 
= Mid$(sKeys, iPos, 1)
      
Select Case sChar
      
Case "+""~""%"
         
If nextChar(sKeys, iPos, iLen) = "(" Then
            
' Add to brace stack:
            colBrace.Add sChar
            
' send key down
            Select Case sChar
            
Case "+"
               KeyDown vbKeyShift
            
Case "~"
               KeyDown vbKeyControl
            
Case "%"
               KeyDown vbKeyMenu
            
End Select
            iPos 
= iPos + 2
         
Else
            
' Key press the key (probably not what you wanted)
            Select Case sChar
            
Case "+"
               KeyDown vbKeyShift
               KeyUp vbKeyShift
            
Case "~"
               KeyDown vbKeyControl
               KeyUp vbKeyControl
            
Case "%"
               KeyDown vbKeyMenu
               KeyUp vbKeyMenu
            
End Select
            iPos 
= iPos + 1
         
End If
      
      
Case "~"
         
' Enter key:
         KeyDown vbKeyReturn
         KeyUp vbKeyReturn
         iPos 
= iPos + 1
         
      
Case ")"
         
If (colBrace.Count > 0Then
            sChar 
= colBrace(colBrace.Count)
            
' send key up
            Select Case sChar
            
Case "+"
               KeyUp vbKeyShift
            
Case "~"
               KeyUp vbKeyControl
            
Case "%"
               KeyUp vbKeyMenu
            
End Select
            colBrace.Remove colBrace.Count
            iPos 
= iPos + 1
         
Else
            
' Invalid sendkeys command:
            sMsg = "Invalid sendkeys command: unmatched ) at position " & iPos
            
GoTo errorHandler
         
End If
      
      
Case "{"
         
' special key
         If (iPos + 2 > iLen) Then
            sMsg 
= "Invalid sendkeys command; opening { without content or
             closing } at position " & iPos
            GoTo errorHandler
         
Else
            iNextPos 
= InStr(iPos + 2, sKeys, "}")
            
If (iNextPos = 0Then
               sMsg 
= "Invalid sendkeys command; opening { without closing } at
                position " & iPos
               GoTo errorHandler
            
Else
               sContent 
= Mid$(sKeys, iPos + 1, iNextPos - iPos - 1)
               iPos 
= iNextPos + 1
               
' is this a key/presses pair?
               iNextPos = InStr(sContent, " ")
               
If (iNextPos > 0Then
                  sKey 
= Left$(sContent, iNextPos - 1)
                  sCount 
= Mid$(sContent, iNextPos + 1)
                  
If Not (IsNumeric(sCount)) Then
                     sMsg 
= "Invalid sendkeys command; key repetitions '" &
                      sCount 
& "' is invalid near position " & iPos
                     lCount 
= CLng(sCount)
                  
End If
               
Else
                  sKey 
= sContent
                  lCount 
= 1
               
End If
               KeyPress sKey, lCount
               
            
End If
         
End If
         
      
Case Else
         
' send the key as is
         KeyPress sChar, 1
         iPos 
= iPos + 1
         
      
End Select
   
   
Loop
   
   
If (colBrace.Count > 0Then
      sMsg 
= "Invalid sendkeys command: more open brackets than close brackets."
      
GoTo errorHandler
   
End If
   
   
Exit Sub
   
errorHandler:
   
If Len(sMsg) = 0 Then
      sMsg 
= Err.Description
      lErr 
= Err.Number
   
End If
   
   
' If we don't clear up the shift/control/alt keys,
   ' then you might find other apps on the system are hard to
   ' use.
   ' Make sure you have Break on Unhandled Errors switched
   ' on.
   Do While colBrace.Count > 0
      sChar 
= colBrace(colBrace.Count)
      
' send key up
      Select Case sChar
      
Case "+"
         KeyUp vbKeyShift
      
Case "~"
         KeyUp vbKeyControl
      
Case "%"
         KeyUp vbKeyMenu
      
End Select
      colBrace.Remove colBrace.Count
   
Loop
   
   
On Error GoTo 0
   Err.Raise lErr, App.EXEName 
& ".cSendKeys", sMsg
   
   
Exit Sub

End Sub

Public Sub KeyPress(ByVal sKey As String, Optional ByVal lCount = 1)
Dim vKey As KeyCodeConstants
Dim l As Long

   
On Error Resume Next
   vKey 
= m_colKeyMap(sKey)
   
On Error GoTo 0
   
   
If (vKey = 0Then
      
' translate string into v key code
      vKey = KeyCode(sKey)
   
End If
   
   
If (vKey <> 0Then
      
For l = 1 To lCount
         KeyDown vKey
         KeyUp vKey
      
Next l
   
Else
      Err.Raise 
9, , "Key " & sKey & " could not be interpreted."
   
End If
   
End Sub

Public Sub KeyDown(ByVal vKey As KeyCodeConstants)
   keybd_event vKey, 
0, KEYEVENTF_EXTENDEDKEY, 0
End Sub

Public Sub KeyUp(ByVal vKey As KeyCodeConstants)
   keybd_event vKey, 
0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
End Sub

Public Function KeyCode(ByVal sChar As StringAs KeyCodeConstants
Dim bNt As Boolean
Dim iKeyCode As Integer
Dim b() As Byte
Dim iKey As Integer
Dim vKey As KeyCodeConstants
Dim iShift As ShiftConstants

   
' Determine if we have Unicode support or not:
   bNt = ((GetVersion() And &H80000000) = 0)
   
   
' Get the keyboard scan code for the character:
   If (bNt) Then
      b 
= sChar
      CopyMemory iKey, b(
0), 2
      iKeyCode 
= VkKeyScanW(iKey)
   
Else
      b 
= StrConv(sChar, vbFromUnicode)
      iKeyCode 
= VkKeyScan(b(0))
   
End If
   
   KeyCode 
= (iKeyCode And &HFF&)

End Function


Private Sub Class_Initialize()

   m_colKeyMap.Add vbKeyBack, 
"BACKSPACE"
   m_colKeyMap.Add vbKeyBack, 
"BS"
   m_colKeyMap.Add vbKeyBack, 
"BKSP"
   m_colKeyMap.Add vbKeyPause, 
"BREAK"
   m_colKeyMap.Add vbKeyCapital, 
"CAPSLOCK"
   m_colKeyMap.Add vbKeyDelete, 
"DELETE"
   m_colKeyMap.Add vbKeyDelete, 
"DEL"
   m_colKeyMap.Add vbKeyDown, 
"DOWN"
   m_colKeyMap.Add vbKeyEnd, 
"END"
   m_colKeyMap.Add vbKeyReturn, 
"ENTER"
   m_colKeyMap.Add vbKeyReturn, 
"~"
   m_colKeyMap.Add vbKeyEscape, 
"ESC"
   m_colKeyMap.Add vbKeyHelp, 
"HELP"
   m_colKeyMap.Add vbKeyHome, 
"HOME"
   m_colKeyMap.Add vbKeyInsert, 
"INS"
   m_colKeyMap.Add vbKeyInsert, 
"INSERT"
   m_colKeyMap.Add vbKeyLeft, 
"LEFT"
   m_colKeyMap.Add vbKeyNumlock, 
"NUMLOCK"
   m_colKeyMap.Add vbKeyPageDown, 
"PGDN"
   m_colKeyMap.Add vbKeyPageUp, 
"PGUP"
   m_colKeyMap.Add vbKeyPrint, 
"PRTSC"
   m_colKeyMap.Add vbKeyRight, 
"RIGHT"
   m_colKeyMap.Add vbKeyScrollLock, 
"SCROLLLOCK"
   m_colKeyMap.Add vbKeyTab, 
"TAB"
   m_colKeyMap.Add vbKeyUp, 
"UP"
   m_colKeyMap.Add vbKeyF1, 
"F1"
   m_colKeyMap.Add vbKeyF2, 
"F2"
   m_colKeyMap.Add vbKeyF3, 
"F3"
   m_colKeyMap.Add vbKeyF4, 
"F4"
   m_colKeyMap.Add vbKeyF5, 
"F5"
   m_colKeyMap.Add vbKeyF6, 
"F6"
   m_colKeyMap.Add vbKeyF7, 
"F7"
   m_colKeyMap.Add vbKeyF8, 
"F8"
   m_colKeyMap.Add vbKeyF9, 
"F9"
   m_colKeyMap.Add vbKeyF10, 
"F10"
   m_colKeyMap.Add vbKeyF11, 
"F11"
   m_colKeyMap.Add vbKeyF12, 
"F12"
   m_colKeyMap.Add vbKeyF13, 
"F13"
   m_colKeyMap.Add vbKeyF14, 
"F14"
   m_colKeyMap.Add vbKeyF15, 
"F15"
   m_colKeyMap.Add vbKeyF16, 
"F16"

End Sub

转载于:https://www.cnblogs.com/fengju/archive/2005/09/26/6336364.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】TCP IP通信处理过程

1.数据包首部 每个分层中都会对所发送的数据附加一个首部&#xff0c;其中包含了该层必要的信息&#xff0c;如发送端地址、接收端地址以及协议等相关信息。 2.发送数据包 1&#xff09;应用程序处理 进行编码处理&#xff08;相当于表示层功能&#xff09;&#xff0c;管…

【计算机网络】数据链路相关技术

1.MAC地址 MAC地址长48字节。在使用网卡的情况下&#xff0c;一般会将MAC地址烧入到ROM中&#xff0c;任何一个网卡的MAC地址都是唯一的。例如 00:10:5A:70:33:61 MAC地址的3~24位表示厂商识别码&#xff0c;每个NIC厂商都有特定唯一的识别数字。25~48位是厂商内部为识别每个…

【计算机网络】IP地址

IP地址的基础知识 在TCP/IP通信中&#xff0c;IP地址用于识别主机和路由器。 1.IP地址的定义 IPv4地址为32位&#xff0c;IPv6地址为128位。&#xff08;以下以IPv4为例&#xff09; 将32位的IP地址分为4组&#xff0c;每组8位&#xff0c;每组间用“.”隔开&#xff0c;再…

天空的颜色和大气散射

天空的颜色采用"A Practical Analytic Model for Daylight"建造的模型计算。地形颜色的大气散射采用"Rendering Outdoor Lght Scattering in real Time"介绍的方法计算。A Practical Analytic Model for Daylight中的模型通过太阳的方位&#xff0c;Zenith…

hexo本地博客的转移

1. 复制配置文件 将原来的配置文件进行备份&#xff0c;只需要将文件夹 source、themes和配置文件_config.yml备份即可。 2. 安装Node.js sudo apt-get install nodejs sudo apt-get install npm 3. 安装hexo sudo npm install -g hexo 4. 新建文件夹&#xff0c;cd进入 …

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式&#xff1a; NodePort 暴露端口到节点&#xff0c;提供了集群外部访问的入口LoadBalancer 需要负载均衡器&#xff08;通常都需要云服务商提供&#xff0c;裸机可以安装 METALLB 测试&#xff09;Ingress 统一管理 svc的外部访问&am…

ubuntu18重装笔记

再次重装了系统&#xff0c;为方便以后再次重装&#xff0c;&#xff0c;&#xff0c;因此将主要步骤记录下来。 1. 更新源 sudo gedit /etc/apt/sources.list # 阿里源deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirro…

Flex2.0实现文件上传功能(服务器为ASP.NET)

简介&#xff1a;新的Flex2.0类库里提供了文件类&#xff0c;方便了上传/下载文件。下面的程序demo演示了Flex2.0生成flash来访问本地文件&#xff0c;在flash里上传用户选择的文件到服务器&#xff0c;flash客户端可以处理文件上传进度等多个事件&#xff0c;服务器端是C#写的…

【高性能定时器】 时间轮

时间轮 简述 顾名思义&#xff0c;时间轮就像一个轮子&#xff0c;在转动的时候外界会指向轮子不同的区域&#xff0c;该区域就可以被使用。因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽&#xff08;即时间轮划分的区域&#xff09;之中&#xff0c;就可以实…

【安利】程序猿作图神器 - Graphviz

还在为在linux下画二叉树等图苦恼吗&#xff0c;现在就安利一波linux程序猿的作图神器——Graphviz。&#xff08;本来在写其他东西&#xff0c;刚好要绘图&#xff0c;强行插入一篇blog&#xff09; Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源…

仿ISQL功能的实现,可以实现批处理功能

具体请见下载文件&#xff1a;/Files/bigmouthz/DNet写的数据库isql执行程序&#xff08;含源码&#xff09;.rar部分代码如下&#xff1a; DBCore.DataBaseVisitor.AbsDBHelper dbhelper null ; private void bt_DBLink_Click(object sender, System.EventArgs e) { try …

【高性能定时器】时间堆(最小堆)

最小堆及其应用&#xff1a;时间堆 最小堆及其应用&#xff1a;时间堆 一、 堆1. 概念2. 最小堆的实现3. 性质4. 代码 二、时间堆1. 概念简述2. 实现细节3. 代码 一、 堆 1. 概念 堆是一种经过排序的完全二叉树&#xff0c;其中任一非终端节点的数据值均不大于&#xff08;或…

【操作系统】生产者消费者问题

生产者消费者模型 文章目录生产者消费者模型 [toc]一、 生产者消费者问题二、 问题分析三、 伪代码实现四、代码实现&#xff08;C&#xff09;五、 互斥锁与条件变量的使用比较一、 生产者消费者问题 生产者消费者问题&#xff08;英语&#xff1a;Producer-consumer problem&…

【计算机网络】三次握手与四次挥手

三次握手与四次挥手 通过TCP/IP协议的学习&#xff0c;我们可以知道TCP协议是一种面向连接的、可靠的传输协议。其中&#xff0c;为了保证客户端与服务器连接的有效性&#xff0c;就有了本篇文章所要介绍的“三次挥手”&#xff1b;而“四次挥手”则是为了保证连接的正确断开。…

小叔叔又飞走了

小叔叔在飞走之前&#xff0c;昨天晚上&#xff0c;给我们看了&#xff0c;他回老家拍下的&#xff0c;家里每个人的视频&#xff0c;&#xff08;前面这半句话说得好累&#xff0c;不过应该不是病句&#xff09;让我们看了动情又亲切&#xff0c;至少我是这么觉得。一个大家庭…

系统调用中断(EINTR)与SIGCHLD信号的处理

一、被中断的系统调用(EINTR)的理解1. 慢系统调用是&#xff1f;2. 慢系统调用的类别3. EINTR产生的原因5. 一般处理方法 二、SIGCHLD信号的处理1. SIGCHLD信号的产生2. SIGCHLD信号的处理3. 不处理SIGCHLD的后果 三、示例代码 一、被中断的系统调用(EINTR)的理解 1. 慢系…

SMO写的查看数据库信息的代码

要分析一个比较大的数据库&#xff0c;里面的表太多了&#xff0c;虽然是中文命名&#xff0c;但在2005的Management Studio中查看还是比较麻烦&#xff0c;比如&#xff0c;我想查看具有相同字段名称的表的情况就不好办。于是用SMO写了这个东东。代码比较乱&#xff0c;没有进…

win10宽带连接断网自动重连

文章目录1. 断开网络连接&#xff0c;重命名网络连接2. bat代码&#xff1a;检测到断线自动重连3. 设置开机自动执行3.1 方式一&#xff1a;任务计划程序3.2 方式二&#xff1a;用vbs代码开机运行bat1. 断开网络连接&#xff0c;重命名网络连接 中文名字可能出现远程访问错误 …

ubuntu20环境下使用DevStack安装Openstack-Wallaby(单节点、多节点)

文章目录一、单节点部署1. 环境准备1.1 镜像源1.2 pip源1.3 安装依赖包2. OpenStack安装 - wallaby2.1 添加stack用户2.2 设置代理2.3 下载devstack&#xff0c;使用-b指定版本2.4 进入devstack目录&#xff0c;编辑配置文件2.5 开始安装2.6 安装完成二、多节点部署1. 环境准备…

EMF的一些总结(2)——关于EMF的序列化

关于EMF的序列化对于EMF的序列化有几个比较重要的接口&#xff1a;Resource,ResourceSet,Resource.Factory,URIConverter。这些接口的主要作用就是保存模型到持久化存储介质&#xff0c;或者从持久化存储介质加载模型。1&#xff0e;关于URI&#xff08;Uniform Resource Ident…