关于send(Handle(this),256,9,Long(0,0))的说明

关于

send(Handle(this),256,9,Long(0,0))

的说明

 

数据窗口中要将回车将转换成

TAB

键用到了

send(Handle(this),256,9,Long(0,0))

但是很多

人不知道知其然而不知其所以然。这里贴点资料,相信大家看了之后就明白了。

 

其中第二个参数

256

,转换为

16

进制就是

100

,我们在下面的资料中可以找到

 

WM_KEYFIRST = $0100; 

WM_KEYDOWN = $0100; 

 

file://

message#An UnsignedInteger whose value is the system message number of the message you want to 

send 

这其中的

message#

就是楼上说的

WM_COMMAND

其定义可以从微软的

SDK

中的

WINDOWS.H

中找到

 

WM_NULL            = $0000; 

WM_CREATE          = $0001; 

应用程序创建一个窗口

 

WM_DESTROY          = $0002; 

一个窗口被销毁

 

WM_MOVE            = $0003; 

移动一个窗口

 

WM_SIZE            = $0005; 

改变一个窗口的大小

 

WM_ACTIVATE        = $0006; 

一个窗口被激活或失去激活状态;

 

WM_SETFOCUS        = $0007; 

获得焦点后

 

WM_KILLFOCUS        = $0008; 

失去焦点

 

WM_ENABLE          = $000A; 

改变

enable

状态

 

WM_SETREDRAW        = $000B; 

设置窗口是否能重画

   

WM_SETTEXT          = $000C; 

应用程序发送此消息来设置一个窗口的文本

 

WM_GETTEXT          = $000D; 

应用程序发送此消息来复制对应窗口的文本到缓冲区

 

WM_GETTEXTLENGTH    = $000E; 

得到与一个窗口有关的文本的长度(不包含空字符)

 

WM_PAINT            = $000F; 

要求一个窗口重画自己

 

WM_CLOSE            = $0010; 

当一个窗口或应用程序要关闭时发送一个信号

 

WM_QUERYENDSESSION  = $0011; 

当用户选择结束对话框或程序自己调用

ExitWindows

函数

 

WM_QUIT            = $0012; 

用来结束程序运行或当程序调用

postquitmessage

函数

 

 

WM_QUERYOPEN        = $0013; 

当用户窗口恢复以前的大小位置时,把此消息发送给某个图标

 

WM_ERASEBKGND      = $0014; 

当窗口背景必须被擦除时(例在窗口改变大小时)

 

WM_SYSCOLORCHANGE  = $0015; 

当系统颜色改变时,发送此消息给所有顶级窗口

 

WM_ENDSESSION      = $0016; 

当系统进程发出

WM_QUERYENDSESSION

消息后,此消息发送给应用程序,

 

通知它对话是否结束

 

WM_SYSTEMERROR      = $0017; 

WM_SHOWWINDOW      = $0018; 

当隐藏或显示窗口是发送此消息给这个窗口

 

_ACTIVATEAPP      = $001C; 

发此消息给应用程序哪个窗口是激活的,哪个是非激活的;

 

WM_FONTCHANGE      = $001D; 

当系统的字体资源库变化时发送此消息给所有顶级窗口

 

WM_TIMECHANGE      = $001E; 

当系统的时间变化时发送此消息给所有顶级窗口

 

WM_CANCELMODE      = $001F; 

发送此消息来取消某种正在进行的摸态(操作)

 

WM_SETCURSOR        = $0020; 

如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口

 

WM_MOUSEACTIVATE    = $0021; 

当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口

 

WM_CHILDACTIVATE    = $0022; 

发送此消息给

MDI

子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小

 

WM_QUEUESYNC        = $0023; 

此消息由基于计算机的训练程序发送,通过

WH_JOURNALPALYBACK

hook

程序

 

分离出用户输入消息

 

WM_GETMINMAXINFO    = $0024; 

此消息发送给窗口当它将要改变大小或位置;

 

 

WM_PAINTICON        = $0026; 

发送给最小化窗口当它图标将要被重画

 

WM_ICONERASEBKGND  = $0027; 

此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画

 

WM_NEXTDLGCTL      = $0028; 

发送此消息给一个对话框程序去更改焦点位置

 

WM_SPOOLERSTATUS    = $002A; 

每当打印管理列队增加或减少一条作业时发出此消息

 

 

WM_DRAWITEM        = $002B; 

button

combobox

listbox

menu

的可视外观改变时发送

 

此消息给这些空件的所有者

 

WM_MEASUREITEM      = $002C; 

button, combo box, list box, list view control, or menu item 

被创建时

 

发送此消息给控件的所有者

 

WM_DELETEITEM      = $002D; 

the 

list 

box 

 

combo 

box 

 

 

 

LB_DELETESTRING, 

LB_RESETCONTENT, CB_DELETESTRING, or CB_RESETCONTENT 

消息

 

WM_VKEYTOITEM      = $002E; 

此消息有一个

LBS_WANTKEYBOARDINPUT

风格的发出给它的所有者来响应

WM_KEYDOWN

消息

   

WM_CHARTOITEM      = $002F; 

此消息由一个

LBS_WANTKEYBOARDINPUT

风格的列表框发送给他的所有者来响应

WM_CHAR

消息

   

WM_SETFONT          = $0030; 

当绘制文本时程序发送此消息得到控件要用的颜色

 

 

WM_GETFONT          = $0031; 

应用程序发送此消息得到当前控件绘制文本的字体

 

WM_SETHOTKEY        = $0032; 

应用程序发送此消息让一个窗口与一个热键相关连

 

WM_GETHOTKEY        = $0033; 

应用程序发送此消息来判断热键与某个窗口是否有关联

 

WM_QUERYDRAGICON    = $0037; 

此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能

 

返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标

 

WM_COMPAREITEM      = $0039; 

发送此消息来判定

combobox

listbox

新增加的项的相对位置

 

WM_GETOBJECT        = $003D; 

WM_COMPACTING      = $0041; 

显示内存已经很少了

 

WM_WINDOWPOSCHANGING = $0046; 

发送此消息给那个窗口的大小和位置将要被改变时,来调用

setwindowpos

函数或其它窗口管理函数

 

WM_WINDOWPOSCHANGED = $0047; 

发送此消息给那个窗口的大小和位置已经被改变时,来调用

setwindowpos

函数或其它窗口管理函数

 

WM_POWER            = $0048;

(适用于

16

位的

windows

 

当系统将要进入暂停状态时发送此消息

 

WM_COPYDATA        = $004A; 

当一个应用程序传递数据给另一个应用程序时发送此消息

 

WM_CANCELJOURNAL    = $004B; 

当某个用户取消程序日志激活状态,提交此消息给程序

 

WM_NOTIFY          = $004E; 

当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口

 

WM_INPUTLANGCHANGEREQUEST = $0050; 

当用户选择某种输入语言,或输入语言的热键改变

 

WM_INPUTLANGCHANGE  = $0051; 

当平台现场已经被改变后发送此消息给受影响的最顶级窗口

 

WM_TCARD            = $0052; 

当程序已经初始化

windows

帮助例程时发送此消息给应用程序

 

WM_HELP            = $0053; 

此消息显示用户按下了

F1

,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就

 

发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口

 

WM_USERCHANGED      = $0054; 

当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体

 

设置信息,在用户更新设置时系统马上发送此消息;

 

WM_NOTIFYformAT    = $0055; 

公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用

ANSI

还是

UNICODE

结构

 

WM_NOTIFY

消息,使用此控件能使某个控件与它的父控件之间进行相互通信

 

WM_CONTEXTMENU      = $007B; 

WM_styleCHANGING    = $007C; 

当调用

SETWINDOWLONG

函数将要改变一个或多个

 

窗口的风格时发送此消息给那个窗口

 

WM_styleCHANGED    = $007D; 

当调用

SETWINDOWLONG

函数一个或多个

 

窗口的风格后发送此消息给那个窗口

 

WM_DISPLAYCHANGE    = $007E; 

当显示器的分辨率改变后发送此消息给所有的窗口

 

WM_GETICON          = $007F; 

此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄;

 

WM_SETICON          = $0080; 

程序发送此消息让一个新的大图标或小图标与某个窗口关联;

 

WM_NCCREATE        = $0081; 

当某个窗口第一次被创建时,此消息在

WM_CREATE

消息发送前发送;

 

WM_NCDESTROY        = $0082; 

此消息通知某个窗口,非客户区正在销毁

 

WM_NCCALCSIZE      = $0083; 

当某个窗口的客户区域必须被核算时发送此消息

 

WM_NCHITTEST        = $0084;//

移动鼠标,按住或释放鼠标时发生

 

WM_NCPAINT          = $0085; 

程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时;

 

WM_NCACTIVATE      = $0086; 

此消息发送给某个窗口

 

仅当它的非客户区需要被改变来显示是激活还是非激活状态;

 

WM_GETDLGCODE      = $0087; 

发送此消息给某个与对话框程序关联的控件,

widdows

控制方位键和

TAB

键使输入进入此控件

 

通过响应

WM_GETDLGCODE

消息,应用程序可以把他当成一个特殊的输入控件并能处理它

 

WM_NCMOUSEMOVE      = $00A0; 

当光标在一个窗口的非客户区内移动时发送此消息给这个窗口

      file://

/

客户区为:窗体的标题栏及

                                                                     

                                                             

的边框体

 

WM_NCLBUTTONDOWN    = $00A1; 

当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息

 

WM_NCLBUTTONUP      = $00A2; 

当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息;

 

WM_NCLBUTTONDBLCLK  = $00A3; 

当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息

 

WM_NCRBUTTONDOWN    = $00A4; 

当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息

 

WM_NCRBUTTONUP      = $00A5; 

当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息

 

WM_NCRBUTTONDBLCLK  = $00A6; 

当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息

 

WM_NCMBUTTONDOWN    = $00A7; 

当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息

 

WM_NCMBUTTONUP      = $00A8; 

当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息

 

WM_NCMBUTTONDBLCLK  = $00A9; 

当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息

 

WM_KEYFIRST        = $0100; 

WM_KEYDOWN          = $0100; 

 

WM_MOUSEFIRST      = $0200; 

WM_MOUSEMOVE        = $0200;   

                 //  

移动鼠标

 

WM_LBUTTONDOWN      = $0201; 

 

                   file://

/

下鼠标左键

 

WM_LBUTTONUP        = $0202; 

 

                 file://

/

放鼠标左键

下一个键

 

 

第三参数:

9

的说明

 

我们在下面键和键码对照表中可以找到

tab

的键码是

9

 

键码对照表

 

 

其他触发键的功能

:

 

除了

send

以外,我们还可以使用一个

api

 

keybd_event

 

其声明格式为:

 

Function long keybd_event(INTEGER bVk ,INTEGER bScan , Long dwFlags ,Long dwExtraInfo ) 

Library "user32"

 

按下一个键:

 

keybd_event(

键码

,0,0,0)

 

弹起一个键

 

keybd_event(

键码

,0,2,0) 

如要实现大小写切换,我们可以用

keybd_event

按下

caps lock

,然后在弹起

caps lock 

代码如下:

 


### W25Q256 Flash Memory Array Storage Implementation and Management In the context of managing data within a W25Q256 flash memory, several considerations must be taken into account to ensure efficient storage and retrieval operations. The W25Q256 is a serial flash device with 32 Mbit (4MB) capacity organized as an array of floating-gate cells that can store charge representing binary information. #### Data Organization in W25Q256 The internal structure consists of sectors where each sector contains pages which are further divided into bytes or bits depending on how one views it from software perspective[^1]. For handling arrays specifically: - **Page Programming:** Writing occurs at page level typically; hence when storing elements of an array sequentially they should ideally fit within contiguous pages. - **Sector Erase Requirements:** Before writing new data over existing content, entire sectors need erasing first because individual byte-level modifications aren't supported directly by hardware constraints imposed upon these types of memories. To implement this effectively involves understanding both low-level SPI commands required for communication between microcontroller/processor and W25Q256 alongside higher abstraction layers provided possibly through libraries like those mentioned earlier regarding SDFormatter utility but tailored towards interfacing specifics here instead[^2]. For practical demonstration purposes consider following Python pseudo-code snippet demonstrating basic principles involved while abstracting away actual command sequences sent via SPI interface: ```python import spidev class W25Q256Flash: def __init__(self): self.spi = spidev.SpiDev() self.spi.open(0, 0) def write_array(self, address, data): """Write an array of bytes to specified starting address.""" buffer_size = len(data) # Ensure alignment with page boundaries before proceeding... current_page_start = (address // PAGE_SIZE) * PAGE_SIZE for i in range(buffer_size): target_addr = address + i if ((target_addr % PAGE_SIZE == 0) and not(target_addr == current_page_start)): # Handle crossing page boundary conditions appropriately # Send appropriate sequence of instructions/data using spi.xfer() method... flash_device = W25Q256Flash() # Example usage data_to_store = list(range(10)) # An example integer array converted to list form starting_address = 0x0F00 # Hypothetical start location inside flash space flash_device.write_array(starting_address, data_to_store) ``` This code provides only conceptual guidance rather than being fully functional due to omission of detailed error checking mechanisms necessary for real-world applications along with specific instruction sets needed per operation type such as reading status register values after issuing erase/write commands etc., all critical aspects omitted intentionally focusing more so on high-level logic flow pertinent question asked about implementing array storage patterns efficiently across non-volatile memory devices similar characteristics described above concerning W25Q256 part number specifications particularly. --related questions-- 1. What are common pitfalls encountered during development involving direct manipulation of flash memory? 2. How does wear leveling impact long-term reliability when frequently updating small datasets stored within flash-based media? 3. Can you provide examples illustrating differences between NOR vs NAND architectures used among various kinds of solid-state storages including SPI flashes? 4. In what ways do modern operating systems optimize interactions with external persistent storage solutions beyond simple file system abstractions?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值