网站地图
zenghuilan.com
生活小窍门 解释生活中的一切名词
send(C语言函数) 发布于:

send是一个C语言函数,可以用于向窗口发送非PowerBuilder预定义事件的消息,send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中。

用法Send()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中,这一点与Post()函数不同,Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序中,它并不等待相应事件事件处理程序的执行。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Send()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。实际上,Send()函数把它的各个参数直接邀询验传送给Windows的系统调用SendMessage()。在各种C++开发工具的WINDOWS.H文件中可以查到各消息编号。如果应用程序要发送PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用TriggerEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Send()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口

参数:

按键 要发送的按键序列。

标志 [可选参数] 更改程序处理“按键”的方式:

标志 = 0 (默认),按键序和估多列中含嚷喇希有的特殊字符比如 + 和 ! 将被视为 SHIFT 和 ALT 键。

标志 = 1,按键将按原样发送。

返回值

注意

AutoIt 可发送所有的 ASCⅡ 码及扩展 ASCⅡ 码字符(0-255),若要发送 UNICODE 编码的字符则必须使用“ASC”选项加上您要发送的字符代码(见下面榆雅榜白的 {ASC})。

“Send” 命令的语法跟 ScriptIt 以及 Visual Basic 的 “SendKeys” 命令类似。字符序列将按原文发送,但下列字符除外:

'!'

表示告知 AutoIt 要发送一个 ALT 键击动作,因此语句 Send("This is text!a") 的意思是按序发送按键 "This is text" 然后在按下"ALT+a"。

注意,有些程序对大小写字符和 ALT 键相当挑剔,举例来说,"!A" 可能会被认为不同于 "!a";第一个代表 ALT+SHIFT+A,而第二个则代表 ALT+a。如果拿不准的话最好使用小写!

'+'

表示告知 AutoIt 要发送一个 SHIFT 键击动作,因此语句 Send("Hell+o") 的意思是按序发送按键 "HellO"。Send("!+a") 表示发送 "ALT+SHIFT+a"。

'^'

表示告知 AutoIt 要发送一个 CONTROL 键击动作,因此语句 Send("^!a") 的意思是发送按键 "CTRL+ALT+a"。

注意,有些程序对大小写字符和 CTRL 键相当挑剔,举例来说,"^A" 可能会被认为不同于 "^a";第一个代表 CTRL+SHIFT+A,而第二个则代表 CTRL+a. 如果拿不准的话最好使用小写!

'#'

井号将发送一个 Windows 徽标键,因此语句 Send("#r") 将发送 Win+r,这将打开“运行”对话框。

您可以通过设置 SendCapslockMode 从而在 Send 函数开始操作前关闭大小写切换键(大写锁,CAPS LOCK)并在完成操作后恢复。

但是,如果在 Send 函数开始执行的时候用户就按住 Shift 键,那么发送的文本懂战可能会是小写字符。

一凶乐狼体个解决办法是在每次执行其它 Send 操作前使用语句 Send("{SHIFTDOWN}{SHIFTUP}")。

某些特殊按键必须用花括号括住才能发送:

注意,Windows 不允许模拟 "CTRL-ALT-DEL"邀察宙 组合键!

Send 命令(无标志参数) 键击结果

{!} !

{#} #

{+} +

{^} ^

{{} {

{}} }

{SPACE} 空格

{ENTER} 主键盘区的 回车键

{ALT} ALT

{BACKSPACE} 或 {BS} 退格

{DELETE} 或 {DEL} 删除(DELETE)

{UP} 向上箭头

{DOWN} 向下箭头

{LEFT} 向左箭头

{RIGHT} 向右箭头

{HOME} HOME

{END} END

{ESCAPE} 或 {ESC} ESC键

{INSERT} 或 {INS} INS(Insert)

{PGUP} PageUp

{PGDN} PageDown

{F1} - {F12} 功能键

{TAB} TAB

{PRINTSCREEN} Print Screen key

{LWIN} 左徽标键

{RWIN} 右徽标键

{NUMLOCK on} NUMLOCK (on/off/toggle)(开/关/切换)

{CAPSLOCK off} CAPSLOCK (on/off/toggle)(开/关/切换)

{SCROLLLOCK toggle} SCROLLLOCK (on/off/toggle)(开/关/切换)

{CTRLBREAK} Ctrl+Break

{PAUSE} PAUSE

{NUMPAD0} - {NUMPAD9} 数字键盘上的 数字键

{NUMPADMULT} 数字键盘上的 乘号

{NUMPADADD} 数字键盘上的 加号

{NUMPADSUB} 数字键盘上的 减号

{NUMPADDⅣ} 数字键盘上的 除号

{NUMPADDOT} 数字键盘上的 点号

{NUMPADENTER} 数字键盘上的 回车键

{APPSKEY} Windows 应用程序键

{LALT} 左 ALT 键

{RALT} 右 ALT 键

{LCTRL} 左 CTRL 键

{RCTRL} 右 CTRL 键

{LSHIFT} 左 Shift 键

{RSHIFT} 右 Shift 键

{SLEEP} 系统休眠(SLEEP)键

{ALTDOWN} 按住 ALT 键直到发送 {ALTUP} 为止

{SHIFTDOWN} 按住 SHIFT 键直到发送 {SHIFTUP} 为止

{CTRLDOWN} 按住 CTRL 键直到发送 {CTRLUP} 为止

{LWINDOWN} 按住左徽标键直到发送 {LWINUP} 为止

{RWINDOWN} 按住右徽标键直到发送 {RWINUP} 为止

{ASC nnnn} 发送 ALT+nnnn 组合键

{BROWSER_BACK} 仅支持2000/XP:按下浏览器中的“后退”按钮

{BROWSER_FORWARD} 仅支持2000/XP:按下浏览器中的“前进”按钮

{BROWSER_REFRESH} 仅支持2000/XP:按下浏览器中的“刷新”按钮

{BROWSER_STOP} 仅支持2000/XP:按下浏览器中的“停止”按钮

{BROWSER_SEARCH} 仅支持2000/XP:按下浏览器中的“搜索”按钮

{BROWSER_FAVORITES} 仅支持2000/XP:按下浏览器中的“收藏夹”按钮

{BROWSER_HOME} 仅支持2000/XP:运行浏览器并转到主页

{VOLUME_MUTE} 仅支持2000/XP:切换系统静音状态

{VOLUME_DOWN} 仅支持2000/XP:减小系统音量

{VOLUME_UP} 仅支持2000/XP:增大系统音量

{MEDIA_NEXT} 仅支持2000/XP:在播放器中选择播放下一个轨道(影音媒体)

{MEDIA_PREV} 仅支持2000/XP:在播放器中选择播放上一个轨道

{MEDIA_STOP} 仅支持2000/XP:使播放器停止播放

{MEDIA_PLAY_PAUSE} 仅支持2000/XP:使播放器播放/暂停

{LAUNCH_MAIL} 仅支持2000/XP:运行邮件客户端程序

{LAUNCH_MEDIA} 仅支持2000/XP:运行播放器(Media player)

{LAUNCH_APP1} 仅支持2000/XP:运行用户程序1(我的电脑)

{LAUNCH_APP2} 仅支持2000/XP:运行用户程序2(计算器)

如果要发送 ASCⅡ 字符 A 则参考下例(相当于 ALT+065,按住ALT键并在数字键盘上顺序按下065)

Send("{ASC 065}")

(在使用两位数的 ASCⅡ 码时必须在前面加一个 0,否则将使用 437号代码页)。

如果要发送 UNICODE 字符则输入该字符代码,例如下例将发送一个中文字符

Send("{ASC 2709}")

可参考下例重复发送某按键:

Send("{DEL 4}") ;连续4次按下 DEL 键

Send("{S 30}") ;发送30个字符“S”

Send("+{TAB 4}) ;连续4次按下 SHIFT+TAB

如果要按住(保持按下状态)某个按键(通常用于游戏中)

Send("{a down}") ;按住按键 A

Send("{a up}") ;松开按键 A

如果要改变 capslock、numlock 和 scrolllock 键的状态,可参考下例:

Send("{NumLock on}") ;打开 NumLock

Send("{CapsLock off}") ;关闭 CapsLock

Send("{ScrollLock toggle}") ;切换 ScrollLock 的状态

如果要用变量来指定重复发送的次数,参考下例:

$n = 4

Send("+{TAB " & $n & "}")

如果要用变量来指定要重复发送的 ASCⅡ 字符(比如 A),参考下例:

$x = Chr(65)

Send("{" & $x & " 4}")

大多数笔记本电脑的键盘上都会有一个特殊的 Fn 键,此键无法被模拟。

注意,若把标志参数的值设为1则“按键”参数将被原样发送。如果某些文本是从变量里拷贝而来,而您又希望完全按原样发送这些文本的话,就应该使用这一设置。

例如,先打开 文件夹选项窗口(位于控制面板),然后请尝试执行下面这些语句:

Send("{TAB}") 切换到(焦点切换)下一个控件(按钮、复选框等)

Send("+{TAB}") 切换到上一个控件

Send("^{TAB}") 切换到下一个窗口标签

Send("^+{TAB}") 切换到上一个窗口标签

Send("{SPACE}") 可用来切换复选框的选中状态或点击某个按钮

Send("{+}") 通常用来选中某个复选框(如果它“确实是”复选框的话)

Send("{-}") 通常用来取消选中某个复选框

Send("{NumPadMult}") 完全展开 SysTreeView32 控件内显示的文件夹

组合 Alt 键使用可访问菜单项,请打开记事本窗口然后尝试执行下面这些语句:

Send("!f") 表示发送 Alt+f,这是打开记事本的文件菜单的快捷键,您还可以试试其它的!

Send("{DOWN}") 移动焦点到下一个菜单项

Send("{UP}") 移动焦点到上一个菜单项

Send("{LEFT}") 切换到左边的菜单或收缩子菜单

Send("{RIGHT}") 切换到右边的菜单或展开子菜单

经套接字传送消息

相关函数

sendto,sendmsg,recv,recvfrom,recvmsg,socket

表头文件

#include < sys/socket.h >

定义函数

ssize_t send (int s,const void *msg,size_t len,int flags);

参数说明

第一个参数指定发送端套接字描述符;

第二个参数指明一个存放应用程式要发送数据的缓冲区;

第三个参数指明实际要发送的数据的字符数;

第四个参数一般置0。

函数说明

send() 用来将数据由指定的 socket 传给对方主机。使用 send 时套接字必须已经连接。send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。所保证的仅是当send 成功返回时,数据已经无错误地发送到网络上。

对于支持为报文设限的协议,如果单个报文超过协议所支持的最大尺寸,send 失败并将 errno 设为 EMSGSIZE ;对于字节流协议,send 会阻塞直到整个数据被传输。

flags 参数有如下的选择:

MSG_DONTROUTE 勿将数据路由出本地网络

MSG_DONTWAIT 允许非阻塞操作(等价于使用O_NONBLOCK)

MSG_EOR 如果协议支持,此为记录结束

MSG_OOB 如果协议支持,发送带外数据

MSG_NOSIGNAL 禁止向系统发送异常信息

返回值

成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

错误代码

EBADF 参数 s 非法的 socket 处理代码。

EFAULT 参数中有一指针指向无法存取的内存空间。

WNOTSOCK 参数 s 为一文件描述词,非 socket。

EINTR 被信号所中断。

EAGAIN 此动作会令进程阻断,但参数 s 的 socket 为不可阻断的。

ENOBUFS 系统的缓冲内存不足。

EINVAL 传给系统调用的参数不正确。

简述

向一个已连接的套接口发送数据。

#include <winsock.h>

int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);

s:一个用于标识已连接套接口的描述字。

buf:包含待发送数据的缓冲区。

len:缓冲区中数据的长度。

flags:调用执行方式。

注释

send()适用于已连接的数据包或流式套接口发送数据。对于数据报类套接口,必需注意发送数据长度不应超过通讯子网的IP包最大长度。IP包最大长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。如果数据太长无法自动通过下层协议,则返回WSAEMSGSIZE错误,数据不会被发送。

请注意成功地完成send()调用并不意味着数据传送到达。

如果传送系统的缓冲区空间不够保存需传送的数据,除非套接口处于非阻塞I/O方式,否则send()将阻塞。对于非阻塞SOCK_STREAM类型的套接口,实际写的数据数目可能在1到所需大小之间,其值取决于本地和远端主机的缓冲区大小。可用select()调用来确定何时能够进一步发送数据。

在相关套接口的选项之上,还可通过标志位flag来影响函数的执行方式。也就是说,本函数的语义既取决于套接口的选项也取决于标志位。后者由以下一些值组成:

值意义

MSG_DONTROUTE 指明数据不选径。一个WINDOWS套接口供应商可以忽略此标志;MSG_OOB 发送带外数据(仅适用于SO_STREAM;)。

返回值

若无错误发生,send()返回所发送数据的总数(请注意这个数字可能小于len中所规定的大小)。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。

错误代码:

WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。

WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。

WSAEACESS:要求地址为广播地址,但相关标志未能正确设置。

WSAEINTR:通过一个WSACancelBlockingCall()来取消一个(阻塞的)调用。

WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。

WSAEFAULT:buf参数不在用户地址空间中的有效位置。

WSAENETRESET:由于WINDOWS套接口实现放弃了连接,故该连接必需被复位。

WSAENOBUFS:WINDOWS套接口实现报告一个缓冲区死锁。

WSAENOTCONN:套接口未被连接。

WSAENOTSOCK:描述字不是一个套接口。

WSAEOPNOTSUPP:已设置了MSG_OOB,但套接口非SOCK_STREAM类型。

WSAESHUTDOWN:套接口已被关闭。一个套接口以1或2的how参数调用shutdown()关闭后,无法再用send()函数。

WSAEWOULDBLOCK:

WSAEMSGSIZE:套接口为SOCK_DGRAM类型,且数据报大于WINDOWS套接口实现所支持的最大值。

WSAEINVAL:套接口未用bind()捆绑。

WSAECONNABORTED:由于超时或其他原因引起虚电路的中断。

WSAECONNRESET:虚电路被远端复位。

参见:

recv(), recvfrom(), socket(), sendto(), WSAStartup()


相关文章推荐:
C语言函数 | API函数 | 字符 | 井号 | 徽标键 | 切换键 | 回车键 | 功能键 | 徽标键 | 回车键 | 徽标键 | 收藏夹 | 切换系统 | 用户程序 | 字符 | 文件夹选项 | 复选框 | 复选框 | 文件菜单 | size_t | 缓冲区 | send() | 套接字 | 报文 | 字节流 | 协议支持 | 指针 | 文件描述词 | 内存不足 | 系统调用 | 套接口 | winsock.h | 缓冲区 | 套接口 | 通讯子网 | WSAStartup() | 数据传送 | 缓冲区 | select() | 套接口 | 带外数据 | 错误代码 | 套接口 | 地址空间 | 缓冲区 | 死锁 | 套接口 | recv() | recvfrom() | socket() | sendto() |