问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

API函数GetMenuItemCount的用法

发布网友 发布时间:2022-05-03 01:17

我来回答

2个回答

热心网友 时间:2022-06-28 23:41

一、在VB中声明API函数有两种方法:如果我们只在某个窗体中使用API函数,我们可以在窗体代码的
General部分声明它:

  声明的语法是:
  Private Declare Function ...
  Private Declare Sub.....
  这里必须采用Private声明,因为这个API函数只能被一个窗体内的程序所调用。

  如果我们的程序有多个窗体构成,而且我们需要在多个窗体中使用同一个API函数,就需要在模块中
声明了。
  先添加一个模块(如图示),
  然后采用如下语法声明:
  Public Declare Function....
  Public Declare Sub....
  Public声明的含义是把API函数作为一个公共函数或过程,在一个工程中的任何位置(包括所有的窗
体和模块)都能直接调用它。声明完毕我们就能在程序中使用此API函数了。

  二、可采用以下几种方式使用API函数,以SetWindowPos函数为例:
  (1)忽略函数返回值的调用:
    SetWindowPos Form1.hWnd, -2 ,0 ,0 ,0, 0, 3
  注意此时函数的参数是不加括号的。
  (2)Call方法调用:
    Call SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)
  注意这里需要加上括号,但我们不取回函数的返回值。
  (3)取得函数返回值的调用:
    MyLng = SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)
  此时需要加上括号,而且我们必须事先定义一个变量(变量的类型与函数返回值类型相同)来存储
API函数的返回值。

  三、几个问题的说明:

  (1)声明中的Lib 和 Alias 是怎么回事
  一般情况下WIN32API函数总是包含在WINDOWS系统自带的或是其它公司提供的动态连接库DLL中,而
Declare语句中的Lib关键字就用来指定DLL(动态连接库)文件的路径,这样VB才能找到这个DLL文件,然
后才能使用其中的API函数。如果我们只是列出DLL文件名而不指出其完整的路径的话,VB会自动到.EXE文
件所在目录、当前工作目录、WINDOWS\SYSTEM目录、WINDOWS目录下搜寻这个DLL文件。所以如果所要使用
DLL文件不在上述几个目录下的话,我们应该指明其完整路径。
  Alias用于指定API函数的别名,如果我们调用的API函数要使用字符串(参数中包含String型)的话
,Alias关键字是必须的。这是因为在ANSI和Unicode字符集中同一API函数的名称可能是不一样的,为了
保证不出现声明错误,我们使用Alias关键字指出API函数的别名,一般来说在WIN9X平台下我们把API函数
名后加一个大写A作为别名即可。

  (2)常见的API参数类型的说明
  API函数的参数中最常见的是长整Long型数据类型,例如API中的句柄、一些特定的常量、函数的返回
值都是此类型 的值;另外几种常见的参数类型有:整型Integer、Byte型、String型等。

  (3)声明中的ByVal是作什么用的
  这跟VB的参数传递方式有关,在默认情况下VB是通过地址传递方式传递函数的参数、而有些API函数
要求必须采用传值方式来传递函数参数(这两种参数传递方式是不同的,前者传递的是一个指针,而后者
要求是参数真实的值)。这样就会发生错误,解决的办法是在API函数参数声明的前面加上ByVal关键字,
这样VB就采用传值方式传递参数了。

  (4)怎样得到完整的API函数声明
  VB自带了API文本查看器API TEXT VIEWER,我们可以在其中找到API函数的完整声明,然后把它粘贴
到程序中即可。

热心网友 时间:2022-06-28 23:41

apiFindWindowEx(this.Handle, p, "Edit", "");
上面的Edit 是类名,如果你不知道标题,需要用NULL,而不是""
写成 apiFindWindowEx(this.Handle, p, "Edit", null);

类名,需要查的,.NET 里面的 TEXTBOX 的类名不是 Edit,而是类似

WindowsForms.10.Edit.xxxxxxx.xx 的样子,具体的名字,可以用 spy++ 查看
上面的10代表VS的版本,10代表2010,9代表2008,8代表2005

---------------------------------------------------------
你的理解发生了偏差。

this.contextMenuStrip1.Handle 这个句柄是 这个菜单相对于当前窗体的句柄,是个内部指针。

GetMenuItemCount 里面需要的菜单的句柄是这个窗体的菜单对应于系统级别的指针, 这个句柄,需要用 API 函数 FindWindowEx 来获取
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
单位高温防护欠缺致员工中暑如何对待 狗狗为什么爱看视频 360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 windows 多线程问题 用windows api提供的函数创建4个线程 并用WaitForMultipleObjects 但结果有问题 我们想研究的问题: 1为什么变速器上有那么多个齿轮? 中国应如何应对美国商务部启动反倾销、反补贴调查? 关于自行车研究课题的结题报告,很急,要短,给所有分 Java 线程中调用wait为什么一定要在同步代码块中? 关于自行车研究课题的结题报告,很急 c语言中API函数的使用 自行车研究报告 我想研究的问题: 我们想研究的问题: C++里怎么调用wait 关于自行车的研究报告(500字左右) 急急急急急急急急急急急急急急急急! 新强联哪个领域最值得买?新强联2021年度报告全文?新强联今天有机构调研吗? 线程wait() notify if while 涂料胶粘剂产品经理是干嘛的 曾经风靡全国的痞子派鼻祖作家王朔,为何作品现在无人问津? 临沂目前痞子数量是多少? 痞子的作品有哪些? 谁知道“流氓”一词的来历啊? 为什么要有“流氓”一词?它的来源是哪? 为什么台湾偶像剧“和”字要读成han第四声 诺基亚系列不带GPS导航的手机。 报价 哪一个更好一些?功能上有什么区别? 中国连续多少年成全球遭遇反倾销调查最多国家? API函数怎么执行实现的? 土耳其多少人口 土耳其人 土耳其人科森(Sultan Kosen)有多高 土耳其到底是欧洲人还是阿拉伯人,怎么军队中好多长的象西欧人的金发 棕发 长脸? 请问土耳其人的平均身高 没有进行学生票优惠资质核验,先在网上买了学生票,可以到站再核验吗?可以刷身份证进站? 世界最高的人是谁 土耳其有多少人 程序员(软考)都考些什么、c语言、数据结构、软件工程、java还有其他的什么没有。。。具体点的。非常感谢 嘴唇有一块变白了是什么意思。 学生票第二次买票需要核验吗 嘴唇一半红润一半发白怎么回事 嘴唇一块发白,会不会是白癜风,按压白的更厉害,已经有好几个月了! 嘴唇缺了一点点颜色怎么办 腊鸡腌咸了可以放醋泡吗 我买的腊鸡咸死了,怎么做好吃 嘴唇出现苍白色,是身体哪里出了问题? 嘴唇颜色总是发白没有光泽到底是怎么回事呢?是不是身体里缺什么营养呢?