ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5641|回复: 11

[VBA程序开发] 图解两个api函数!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-29 18:02 | 显示全部楼层 |阅读模式
声明:本人不会api,试着看了一点点教程,这个算是自己的笔记吧.
a.jpg
b.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-29 18:02 | 显示全部楼层
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Sub test1()
    xxxx = CopyFile("e:/a.txt", "e:/new1.txt", True)
End Sub
Sub test2()
    CopyFile "e:/a.txt", "e:/new.txt", True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-30 03:31 | 显示全部楼层
抄来了一段
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Const WM_CUT = &H300
    Const WM_COPY = &H301
    Const WM_PAST = &H302
    Const WM_CLEAR = &H303
    Const WM_UNDO = &H304
    Dim fb As Long
  
    Private Sub cmdClear_Click()
     fb = SendMessage(Text1.hwnd, WM_CLEAR, 0, 0)
    End Sub
    Private Sub cmdCopy_Click()
     fb = SendMessage(Text1.hwnd, WM_COPY, 0, 0)
    End Sub
    Private Sub cmdCut_Click()
     fb = SendMessage(Text1.hwnd, WM_CUT, 0, 0)
    End Sub
    Private Sub Command4_Click()
     fb = SendMessage(Text1.hwnd, WM_PAST, 0, 0)
    End Sub
    Private Sub Command5_Click()
     fb = SendMessage(Text1.hwnd, WM_UNDO, 0, 0)
    End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-30 03:34 | 显示全部楼层
Const WM_CUT = &H300
    Const WM_COPY = &H301
    Const WM_PAST = &H302
    Const WM_CLEAR = &H303
    Const WM_UNDO = &H304
有些搞乱了
这个函数中的这种常量还有什么!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-30 04:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Text1.hwnd移植到VBA里无效,!!
vba里该怎么取得文本框的句柄!!

[ 本帖最后由 HHAAMM 于 2009-5-30 04:08 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-30 13:11 | 显示全部楼层
原帖由 HHAAMM 于 2009-5-30 03:34 发表
Const WM_CUT = &H300
    Const WM_COPY = &H301
    Const WM_PAST = &H302
    Const WM_CLEAR = &H303
    Const WM_UNDO = &H304
有些搞乱了
这个函数中的这种常量还有什么!!

这种常量太多了,API浏览器中以WM_开头的常量全是,另外各种标准控件都有自己独特的消息,比如以EM_开头的文本框消息,以CB_开头的列表框消息等等,见下表:

前缀消息类别
ABMApplication desktop toolbar 应用程序桌面工具条
BMButton control 按钮控件
CBCombo box control 组合框控件
CBEMExtended combo box control扩展组合框控件
CDMCommon dialog box 通用对话框
DBTDevice 设备
DLDrag list box 下拉列表控件
DMDefault push button control
DTMDate and time picker control日期/时间选择控件
EMEdit control 文本框控件
HDMHeader control 列表头控件
HKMHot key control热键控件
IPMIP address control IP地址控件
LBList box control 列表框控件
LVMList view control 列表控件
MCMMonth calendar control日历控件
PBMProgress bar 进度条控件
PGMPager control Pager控件
PSMProperty sheet 属性表单
RBRebar control伸缩条
SBStatus bar window 状态栏
SBMScroll bar control 滚动条
STMStatic control 静态控件
TBToolbar 工具栏
TBMTrackbar
TCMTab control
TTMTooltip control 工具提示
TVMTree-view control 树形列表
UDMUp-down control
WMGeneral window 常规窗口
在Windows中,系统与窗口以及窗口与窗口之间的通讯全是以消息的方式,如果说窗口是Windows系统的躯壳,消息就是它的灵魂。每个窗口实例都包含一个消息处理函数(Windows Procedure)用来处理接收到的消息。
每个用户输入(比如移动鼠标、按下鼠标/键盘按键、抬起鼠标/键盘按键...)都会被硬件的驱动程序转化为一条对应的消息,由应用程序引起系统的变化也会产生消息,比如窗口的位置、Z次序变化会产生WM_PAINT、WM_WINDOWPOSCHANGED等消息;点击菜单项会产生WM_COMMAND消息...,这类消息被称作系统定义消息,标准控件的消息也属于这部分;另外窗口自身也可以自定义消息用于执行某种任务或者与其它窗口通信,这类消息被称作程序定义消息,这个例子不好举,不过可以类比一下,比如文本框控件有EM_UNDO消息用来撤销上一次的操作,其他窗口也可通过向文本框发送EM_UNDO消息来使它执行这一任务,应用程序也可以定义类似的消息来完成其他任务。
Windows中,为了避免消息ID的冲突,规定&H0000-&H03FF范围内的数字用于定义系统消息(0-1023共1024个数字),&H0400-&H7FFF用来定义程序定义消息。
系统定义消息中WM前缀的消息可以从网上找到,比如这里:http://blog.csdn.net/oobibigo/archive/2008/10/02/3009826.aspx

TA的精华主题

TA的得分主题

发表于 2009-5-30 13:12 | 显示全部楼层
原帖由 HHAAMM 于 2009-5-30 04:07 发表
Text1.hwnd移植到VBA里无效,!!
vba里该怎么取得文本框的句柄!!

VBA中的文本框、组合框与VB中的不同,它们都是“轻量”控件,也就是没有自己句柄的控件

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-30 15:54 | 显示全部楼层
俺发现这样也可以对单元格进行保护
Private Declare Function GetCursorPos Lib "user32" (b As a) As Long
Private Type a
         x As Long
         y As Long
End Type

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim b As a
GetCursorPos b
If b.x < 200 Or b.y < 200 Then
    Cells(6, 3).Select
End If
'MsgBox "X = " & b.x & " Y = " & b.y
End Sub

[ 本帖最后由 HHAAMM 于 2009-5-30 15:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-5-30 19:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-1 10:43 | 显示全部楼层
原帖由 HHAAMM 于 2009-5-30 15:54 发表
俺发现这样也可以对单元格进行保护
Private Declare Function GetCursorPos Lib "user32" (b As a) As Long
Private Type a
         x As Long
         y As Long
End Type

Private Sub Worksheet_Selecti ...

GetCursorPos :获取当前光标位置,坐标是相对屏幕原点的,如果小化窗口就不适用了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-18 13:20 , Processed in 0.045270 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表