Warning: Constant DB_HOST already defined in C:\xampp\htdocs\wp-config.php on line 109
API - 511遇见

标签: API

  • 易语言控制程序窗口靠边自动显示隐藏

    易语言控制程序窗口靠边自动显示隐藏

    源码

    窗口需要一个时钟组件,我们封装一个自动显示隐藏的子程序。窗口名称采用了默认的_启动窗口。为了体现隐藏的平滑度,时钟周期设为1.

    .版本 2

    .子程序 靠边隐藏

    .如果 (取鼠标水平位置 () ≥ _启动窗口.左边 且 取鼠标水平位置 () < _启动窗口.左边 + _启动窗口.宽度 且 取鼠标垂直位置 () ≥ _启动窗口.顶边 且 取鼠标垂直位置 () < _启动窗口.顶边 + _启动窗口.高度)
    .如果真 (_启动窗口.左边 < 0)
    _启动窗口.移动 (0, , , )
    .如果真结束
    .如果真 (_启动窗口.顶边 < 0)
    _启动窗口.移动 (, 0, , )
    .如果真结束

    .如果真 (_启动窗口.左边 > 取屏幕宽度 () - _启动窗口.宽度)
    _启动窗口.移动 (取屏幕宽度 () - _启动窗口.宽度, , , )
    .如果真结束
    .如果真 (_启动窗口.顶边 > 取屏幕高度 () - _启动窗口.高度)
    _启动窗口.移动 (, 取屏幕高度 () - _启动窗口.高度, , )
    .如果真结束

    .否则
    .如果真 (_启动窗口.左边 ≤ 0)
    _启动窗口.移动 (1 - _启动窗口.宽度, , , )
    .如果真结束
    .如果真 (_启动窗口.顶边 ≤ 0)
    _启动窗口.移动 (, 1 - _启动窗口.高度, , )
    .如果真结束

    .如果真 (_启动窗口.左边 ≥ 取屏幕宽度 () - _启动窗口.宽度)
    _启动窗口.移动 (取屏幕宽度 () - 1, , , )
    .如果真结束
    .如果真 (_启动窗口.顶边 ≥ 取屏幕高度 () - _启动窗口.高度)
    _启动窗口.移动 (, 取屏幕高度 () - 1, , )
    .如果真结束

  • 易语言获取日期时间星期格式化时间

    易语言获取日期时间星期格式化时间

    程序集变量

    .版本 2
     
    .程序集 程序集1
    .程序集变量 时间, 日期时间型

    礼拜几转换

    .版本 2
     
    .子程序 转换, 文本型
    .参数 日期, 日期时间型
     
    返回 (多项选择 (取星期几 (日期), “星期日”, “星期一”, “星期二”, “星期三”, “星期四”, “星期五”, “星期六”))

    格式化时间

    .版本 2
     
    .子程序 格式化时间
    .局部变量 结果, 文本型
     
    时间 = 取现行时间 ()
    结果 = 到文本 (取年份 (时间)) + “-” + 到文本 (取月份 (时间)) + “-” + 到文本 (取日 (时间)) + “ ” + 到文本 (取小时 (时间)) + “:” + 到文本 (取分钟 (时间)) + “:” + 到文本 (取秒 (时间)) + “ ” + 转换 (时间)
    输出调试文本 (结果)
  • 易语言timeSetEvent定时器事件

    易语言timeSetEvent定时器事件

    参考:
    https://docs.microsoft.com/en-us/previous-versions/dd757634(v=vs.85)

    MMRESULT timeSetEvent( UINT uDelay,
    UINT uResolution,
    LPTIMECALLBACK lpTimeProc,
    WORD dwUser,
    UINT fuEvent )

    uDelay:以毫秒指定事件的周期。
    Uresolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
    LpTimeProc:指向一个回调函数。
    DwUser:存放用户提供的回调数据。
    FuEvent:指定定时器事件类型:
    TIME_ONESHOT:uDelay毫秒后只产生一次事件
    TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。

    timeSetEvent

    .版本 2
     
    .DLL命令 timeSetEvent, 整数型, "winmm.dll", "timeSetEvent"
        .参数 uDelay, 整数型
        .参数 uResolution, 整数型
        .参数 lpFunction, 子程序指针
        .参数 dwUser, 整数型
        .参数 uFlags, 整数型
    .版本 2
     
    .DLL命令 timeKillEvent, 整数型, "winmm.dll", "timeKillEvent"
        .参数 uID, 整数型

    创建时钟和调用

    .版本 2
     
    .子程序 _按钮1_被单击, , , 创建时钟1
     
    时钟1 = timeSetEvent (10, 0, &TimerProc, 0, 1)

    回调事件

    .版本 2
     
    .子程序 TimerProc
    .参数 uID, 整数型
    .参数 uMsg, 整数型
    .参数 dwUser, 整数型
    .参数 dw1, 整数型
    .参数 dw2, 整数型
    ‘调用的事件,这里随便举了一个例子
    编辑框1.加入文本 (“1”)
  • 易语言字符串Ascii编码查看器源码

    易语言字符串Ascii编码查看器源码

    易语言字符串Ascii编码查看器源码

    窗口组件需要两个编辑框,一个输入字符(串),一个输出Ascii编码。

    .版本 2
     
    .程序集 窗口程序集1
     
    .子程序 _查看编码_被单击
    .局部变量 长度1, 整数型
    .局部变量 文本, 文本型
    .局部变量 长度, 整数型
    .局部变量 字符, 文本型
     
    编码.内容 = “”
    文本 = 源串.内容
    长度1 = 取文本长度 (文本)
    .计次循环首 (长度1, 长度)
        字符 = 取文本中间 (文本, 长度, 1)
        编码.加入文本 (到文本 (取字节集数据 (到字节集 (字符), #整数型)) + “,)
    .计次循环尾 ()
  • 易语言监视USB插入删除设备并读取根目录文件

    易语言监视USB插入删除设备并读取根目录文件

    用到的API

    .版本 2
     
    .DLL命令 SetWindowLong, 子程序指针, , "SetWindowLongA"
        .参数 hwnd, 整数型
        .参数 nIndex, 整数型
        .参数 value, 子程序指针
     
    .DLL命令 CallWindowProc, 整数型, , "CallWindowProcA"
        .参数 proc, 子程序指针
        .参数 hwnd, 整数型
        .参数 msg, 整数型
        .参数 wp, 整数型
        .参数 lp, 整数型
     
    .DLL命令 复制结构体, 整数型, , "RtlMoveMemory"
        .参数 dest, PDEV_BROADCAST_VOLUME, 传址
        .参数 source, 整数型
        .参数 len, 整数型, , 14

    自定义数据类型

    .版本 2
     
    .数据类型 PDEV_BROADCAST_VOLUME
        .成员 dbcv_size, 整数型, , , 14
        .成员 dbcv_devicetype, 整数型
        .成员 dbcv_reserved, 整数型
        .成员 dbcv_unitmask, 整数型
        .成员 dbcv_flags, 短整数型
     
    .数据类型 _DEV_BROADCAST_HDR
        .成员 dbch_size, 整数型
        .成员 dbch_devicetype, 整数型
        .成员 dbch_reserved, 整数型

    常量

    .版本 2
     
    .常量 WM_DEVICECHANGE, "537", , 驱动盘符被改变
    .常量 DBT_DEVICEREMOVECOMPLETE, "32772"
    .常量 DBT_DEVICERARRIVAL, "32768"
    .常量 DBT_DEVTYP_OEM, "0"
    .常量 DBT_DEVTYP_DEVNODE, "1"
    .常量 DBT_DEVTYP_VOLUME, "2"
    .常量 DBT_DEVTYP_PORT, "3"
    .常量 DBT_DEVTYP_N, "4"

    窗口子类化

    1. .版本 2
    2.  
    3. .程序集 窗口程序集1
    4. .程序集变量 a, 子程序指针
    5.  
    6. .子程序 __启动窗口_创建完毕
    7.  
    8. a = SetWindowLong (_启动窗口.取窗口句柄 (), -4, &MsgProc)

    MsgProc

    .版本 2
     
    .子程序 MsgProc, 整数型
    .参数 hwnd, 整数型
    .参数 msg, 整数型
    .参数 wp, 整数型
    .参数 lp, 整数型
    .局部变量 val, PDEV_BROADCAST_VOLUME
    .局部变量 i, 整数型
    .局部变量 mask, 整数型
     
    .判断开始 (msg = 537)
        .判断开始 (wp = #DBT_DEVICERARRIVAL)  ' 插入设备
            复制结构体 (val, lp, 14)
            .如果真 (val.dbcv_devicetype = #DBT_DEVTYP_VOLUME)
                mask = val.dbcv_unitmask
                .变量循环首 (0, 25, 1, i)
                    .如果真 (位与 (mask, 1) = 1)
                        跳出循环 ()
                    .如果真结束
                    mask = 右移 (mask, 1)
                .变量循环尾 ()
                编辑框1.加入文本 (“USB磁盘被插入,盘符:” + 字符 (65 + i) + #换行符)
                检测 (字符 (65 + i))
            .如果真结束
     
        .判断 (wp = #DBT_DEVICEREMOVECOMPLETE)  ' 删除设备
            复制结构体 (val, lp, 14)
            .如果真 (val.dbcv_devicetype = #DBT_DEVTYP_VOLUME)
                mask = val.dbcv_unitmask
                .变量循环首 (0, 25, 1, i)
                    .如果真 (位与 (mask, 1)1)
                        跳出循环 ()
                    .如果真结束
                    mask = 右移 (mask, 1)
                .变量循环尾 ()
                编辑框1.加入文本 (“USB磁盘被拔除,盘符:” + 字符 (65 + i) + #换行符)
            .如果真结束
     
        .默认
     
        .判断结束
     
    .默认
     
    .判断结束
    返回 (CallWindowProc (a, hwnd, msg, wp, lp))

    检测USB根目录

    .版本 2
     
    .子程序 检测
    .参数 盘符, 文本型
    .局部变量 fn, 文本型
     
    fn = 寻找文件 (盘符 + “:\*.*, )
    编辑框2.内容 = “”
    .判断循环首 (fn ≠ “”)
        编辑框2.加入文本 (fn + #换行符)
        fn = 寻找文件 (, )
    .判断循环尾 ()

    销毁还原窗口

    .版本 2
     
    .子程序 __启动窗口_将被销毁
     
    a = SetWindowLong (_启动窗口.取窗口句柄 (), -4, a)
  • 易语言调用LockWorkStation锁定计算机和切换用户

    易语言调用LockWorkStation锁定计算机和切换用户

    切换用户 LockWorkStation

    LockWorkStation 函数
    锁定工作站的显示。锁定工作站保护其免受未经授权者使用。
    语法
    BOOL WINAPI LockWorkStation(void);
    参数
    此函数没有任何参数
    返回值
    如果函数成功,则返回值为非零值。由于该函数以异步方式执行,返回非零值指示操作已启动。它并不表示是否已成功锁定工作站。
    如果该函数失败,则返回值为零。要获取扩展的错误的信息,请调用GetLastError .

    1. .版本 2
    2.  
    3. .DLL命令 切换用户_, , "user32.dll", "LockWorkStation"

    切换用户调用

    1. .版本 2
    2.  
    3. .程序集 窗口程序集_启动窗口
    4.  
    5. .子程序 _按钮_测试_被单击
    6.  
    7. 切换用户_ ()
  • 易语言LocalSize获取自定义数据类型大小

    易语言LocalSize获取自定义数据类型大小

    LocalSize

    在易语言引用这个API中,参数hMem必须是我们自定义的数据类型SYSNAME,注意:可以将参数"hMem"的类型改为其他类型,并设为"传址",这样就相当于C的sizeof

    .版本 2
     
    .DLL命令 LocalSize, 整数型, "kernel32", "LocalSize"
        .参数 hMem, SYSNAME

    自定义数据类型

    SYSNAME我们可以把参数parameter设为整数,文本,逻辑,等等

    .版本 2
     
    .数据类型 SYSNAME
        .成员 parameter1, 整数型
        .成员 parameter2, 整数型
        .成员 parameter3, 整数型
        .成员 parameter4, 整数型
        .成员 parameter5, 文本型
        .成员 parameter5, 逻辑型

    前台调用获取

    这里我们声明一个局部变量,它的类型是我们自定义的数据类型SYSNAME,然后调用LocalSize

    .版本 2
     
    .程序集 窗口程序集1
     
    .子程序 _按钮_sizeof_被单击
    .局部变量 自定义数据类型, SYSNAME
     
    信息框 (LocalSize (自定义数据类型), 0, , )
  • 易语言SendNotifyMessage发送消息

    易语言SendNotifyMessage发送消息

    WINDOWS 中窗口之间的通讯方法有不少,互发消息便是其中的一种。SendMessage和SendNotifyMessage这两个函数的作用就是向其它窗口发送消息。它们看起来很象,调用参数也一样,只是返回值不同,前者返回一个LRESULT,而后者返回一个BOOL。根据MSDN的描述,当这两个函数的调用者与接收消息的窗口处于同一线程时,两者的执行情况一样,都是等待消息被处理完以后再返回;而当它们处于不同线程时,SendMessage所在的线程将等待目标窗口所在线程处理完这个消息,其间它处于阻塞(BLOCK)状态,SendNotifyMessage则是仅仅将消息传给目标窗口的窗口过程函数,并立即返回,它不会一直等着这条消息被处理完。
    在我的程序里我需要一些窗口在发生某些事情时能通知另外一个窗口。所以一开始我使用SendNotifyMessage来发送消息,调用形式如下:
    SendNotifyMessage(hwnd,WM_NOTIFY,ControlID,(LRESULT)pNMHDR);
    pNMHDR指向了一个NMHDR结构,这个结构里的code字段用我自己定义的通知代码填充。在2000底下,程序运行良好,消息能正常发送,目标窗口也能正常接收。但是在98底下,SendNotifyMessage就无论如何都不能成功执行,总是返回FALSE,这样一来目标窗口当然也就接收不到消息了。我没有办法,只好将所有的SendNotifyMessage全部替换为SendMessage,这时消息的发送和接收才按照我预计的方式进行。需要补充说明的是,在整个程序里我只有一个线程,所以这种情况下SendNotifyMessage和SendMessage应该是没有差别的,但是实际情况却让我百思不得其解。是我的理解不对还是MSDN描述有误?我真希望早点知道答案。

    sendMessage,postMessage,sendnotifyMessage有啥区别

    PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。

    PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;

    而SendMessage必须等待其他程序处理消息后才返回,继续执行。

    这两个函数的返回值也不同,PostMessage的返回值表示PostMessage函数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。

    sendmessage与sendnotifymessage的区别主要是体现在项不同的线程中传送消息的,

    在想别的线程中传递消息的同时,sendmessage是阻塞的,即同步,要等到 其线程的中的proc函数处理,并返回处理结果后才会继续执行,发送消息的线程,而sendnotifymessage消息是非阻塞的即将消息发送后,即可返回返回的是该消息是否被正确的处理,而不是返回函数的处理结果。

    当在发送本现场的处理消息时,两个函数没有区别,都是等待消息处理完后,返回处理的结果。

    API比较PostMessageA和SendMessageA游戏屏蔽

    SendNotifyMessageA

    .版本 2
     
    .DLL命令 发送通报消息_, 整数型, "user32.dll", "SendNotifyMessageA"
        .参数 窗口句柄, 整数型, , hwnd,用于接收消息的一个窗口的句柄
        .参数 标识符, 整数型, , wmsg,消息的标识符
        .参数 消息1, 整数型, , wParam,具体由消息决定
        .参数 消息2, 整数型, , lParam,具体由消息决定

    易语言调用

    .版本 2
     
    .程序集 窗口程序集_启动窗口
    .子程序 _按钮_发送消息_被单击
    发送通报消息_ (按钮_测试效果.取窗口句柄 (), 245, 0, 0)
    .子程序 _按钮_测试效果_被单击
    信息框 (“发送消息按钮,按下了,测试效果按钮。”, 0, )
  • 易语言ReadFileEx异步读取文件指定长度数据

    易语言ReadFileEx异步读取文件指定长度数据

    打开文件OpenFile

    .版本 2
     
    .DLL命令 打开文件_, 整数型, "kernel32.dll", "OpenFile", , $(b)
        .参数 文件名, 文本型, , lpFileName,欲打开文件的名字
        .参数 文件操作结果, 文件结构信息_, 传址, lpReOpenBuff,文件操作结果
        .参数 操作方式, 整数型, , wStyle,操作方式

    读入文件数据ReadFileEx

    .版本 2
     
    .DLL命令 读入文件数据_, 整数型, "kernel32", "ReadFileEx"
        .参数 文件句柄, 整数型, , hfile,文件的句柄
        .参数 数据缓冲区, 字节型, 数组, lpbuffer,指定容纳读入数据的一个缓冲区。除非读操作执行完毕,否则不要访问这个缓冲区
        .参数 读入长度, 整数型, , nnumberofbytestoread,要读入的字节数
        .参数 异步操作结构, 重叠操作_, , lpoverlapped,定义了一个异步操作的结构。使用这个函数时,结构中的hEvent字段会被忽略
        .参数 回调函数返回值, 整数型, , lpcompletionroutine,回调函数的返回值

    文件结构信息OFSTRUCT

    .版本 2
     
    .数据类型 文件结构信息, ,OFSTRUCT
        .成员 结构长度, 字节型, , , cBytes,设置成结构的长度(目前是136)
        .成员 文件盘符, 字节型, , , fFixedDisk,参见相关帮助
        .成员 错误代码, 整数型, , , nErrCode,参见相关帮助
        .成员 保留1, 整数型, , , Reserved1,保留不用
        .成员 保留2, 整数型, , , Reserved2,保留不用
        .成员 文件路径, 文本型, , "128", szPathName,文件的完整路径名

    重叠操作OVERLAPPED

    .版本 2
     
    .数据类型 重叠操作_, , OVERLAPPED
        .成员 内部保留参数, 整数型, , , Internal
        .成员 内部高位保留参数, 整数型, , , InternalHigh
        .成员 低32, 整数型, , , offset
        .成员 高32, 整数型, , , offsethigh
        .成员 事件句柄, 整数型, , , hevent

    易语言调用

    .版本 2
     
    .程序集 窗口程序集_启动窗口
     
    .子程序 _按钮_读入内容_被单击
    .局部变量 局部_文件句柄, 整数型
    .局部变量 局部_文件信息, 文件结构信息
    .局部变量 局部_文件内容, 字节型, , "500"
    .局部变量 局部_异步操作的结构, 重叠操作_
    .局部变量 局部_计次, 整数型
    .局部变量 局部_内容, 文本型
     
    .如果真 (通用对话框1.打开 () = 真)
        局部_文件句柄 = 打开文件_ (通用对话框1.文件名, 局部_文件信息, 32)
        读入文件数据_ (局部_文件句柄, 局部_文件内容, 50, 局部_异步操作的结构, 0)
        .计次循环首 (50, 局部_计次)
            局部_内容 = 局部_内容 + 字符 (局部_文件内容 [局部_计次])
        .计次循环尾 ()
        编辑框_运行结果.内容 = 局部_内容
    .如果真结束
  • 易语言GetNumberFormatA格式化数字输出

    易语言GetNumberFormatA格式化数字输出

    GetNumberFormatA函数原型:

    int GetNumberFormatA(
      LCID             Locale,
      DWORD            dwFlags,
      LPCSTR           lpValue,
      const NUMBERFMTA *lpFormat,
      LPSTR            lpNumberStr,
      int              cchNumber
    );

    int GetNumberFormat(
    LCID Locale, // 语言
    DWORD dwFlags, // 如果lpFormat不为NULL,则dwFlags必须为0
    LPCTSTR lpValue, // 输入的数字字符串
    CONST NUMBERFMT *lpFormat, // 格式信息
    LPTSTR lpNumberStr, // 输出缓冲区
    int cchNumber // 输出缓冲区的大小
    );

    易语言API

    .版本 2
     
    .DLL命令 取格式化数字_, 整数型, "kernel32.dll", "GetNumberFormatA"
        .参数 地方ID, 整数型, , Locale
        .参数 标志, 整数型, , dwFlags
        .参数 值, 文本型, , lpValue
        .参数 格式化结构, 数值格式化_, , lpFormat
        .参数 缓冲区文本, 文本型, , lpNumberStr
        .参数 缓冲区文本长度, 整数型, , cchNumber

    struct _numberfmtA 数据类型

    typedef struct _numberfmtA {
      UINT  NumDigits;
      UINT  LeadingZero;
      UINT  Grouping;
      LPSTR lpDecimalSep;
      LPSTR lpThousandSep;
      UINT  NegativeOrder;
    } NUMBERFMTA, *LPNUMBERFMTA;

    typedef struct _numberfmt {
    UINT NumDigits; //小数位个数
    UINT LeadingZero; //小数点的前面是否前置0
    UINT Grouping; //整数位几个可以打包为一组
    LPTSTR lpDecimalSep; //小数分隔符,一般为”.”
    LPTSTR lpThousandSep; //千位分隔符,一般为”,”
    UINT NegativeOrder; //是否显示负数
    } NUMBERFMT, *LPNUMBERFMT;

    数值格式化数据类型

    .版本 2
     
    .数据类型 数值格式化_, , NUMBERFMT
        .成员 小数位数, 整数型, , , NumDigits
        .成员 是否使用0, 整数型, , , LeadingZero
        .成员 组大小, 整数型, , , Grouping
        .成员 小数点符号, 文本型, , , lpDecimalSep
        .成员 组分隔符号, 文本型, , , lpThousandSep
        .成员 负数模式, 整数型, , , NegativeOrder

    易语言调用

    .版本 2
     
    .程序集 窗口程序集_启动窗口
     
    .子程序 _按钮_数值格式化_被单击
    .局部变量 局部_缓区, 文本型
    .局部变量 局部_数值格式化, 数值格式化_
     
    局部_缓区 = 取重复文本 (255,0)
    局部_数值格式化.小数位数 = 4
    局部_数值格式化.组大小 = 3
    局部_数值格式化.小数点符号 = “.”
    局部_数值格式化.组分隔符号 = “,”
    局部_数值格式化.负数模式 = 1
    取格式化数字_ (0, 0,300243.23, 局部_数值格式化, 局部_缓区, 取文本长度 (局部_缓区))
    编辑框_运行结果.内容 = 局部_缓区
  • 易语言SendMessageTimeoutA同步发送消息设置超时

    易语言SendMessageTimeoutA同步发送消息设置超时

    一般每个线程有两个队列:一个用来接收通过Send函数的消息,另外一个队列接收通过Post函数的消息。该两个函数的基本区别是:一个函数需要等待返回的,相当于函数调用,这个是SendMessage;另外一个是将消息放到对方的队列中,然后直接返回。

            使用PostMessage可能防止发送的线程给挂起,但有的时候我们必须通过SendMessage来发送消息(例如:WM_COPYDATA消息)。由于这种原因,就有可能会导致你的发送线程被接收线程的某些操作给挂起,这是很正常的。例如你给对方发送了这个消息,但这个时候刚好对方线程或进程结束了,那么SendMessage不会返回,这个时候你的程序很可能就会挂掉。

            使用 SendMessageTimeOut 可以帮助我们解决这个问题。我们可以设置一个等待时间,一般情况下,这个消息应该会在这个时间会返回,但异常情况就通过这个TIME来帮助我们返回,从而知道对象的线程挂起而避免自己被挂起。

    【函数功能】:

            该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,并且,如果指定的窗口属于不同的线程,直到窗口程序处理完消息或指定的超时周期结束函数才返回。如果接收消息的窗口和当前线程属于同一个队列,窗口程序立即调用,超时值无用。

    SendMessageTimeoutA函数原型

    LRESULT SendMessageTimeout(HWND hwnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM IParam,
    UINT fuFlags,
    UIUT uTimeout,
    LPDWORD lpdwResultult);

    【参数说明】

    hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口。
    Msg:指定被发送的消息。
    wParam:指定附加的消息指定信息。
    IParam:指定附加的消息指定信息。
    fuFlags:指定如何发送消息。此参数可为下列值的组合:
    SMTO_ABORTIFHUNG:如果接收进程处于“hung”状态,不等待超时周期结束就返回。
    SMTO_BLOCK:阻止调用线程处理其他任何请求,直到函数返回。
    SMTO_NORMAL:调用线程等待函数返回时,不被阻止处理其他请求。
    SMTO_NOTIMEOUTIFNOTHUNG:Windows 95及更高版本:如果接收线程没被挂起,当超时周期结束时不返回。
    uTimeout:为超时周期指定以毫秒为单位的持续时间。如果该消息是一个广播消息,每个窗口可使用全超时周期。例如,如果指定5秒的超时周期,有3个顶层窗回未能处理消息,可以有最多15秒的延迟。
    IpdwResult:指定消息处理的结果,依赖于所发送的消息。
    返回值:如果函数调用成功,返回非零值。如果函数调用失败,或超时,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。如果GetLastError返回零,表明函数超时。如果使用HWND_BROADCAST,SenddMessaggTimeout不提供单个窗口超时信息。

    易语言API

    .版本 2
     
    .DLL命令 同步发送消息_, 整数型, "user32.dll", "SendMessageTimeoutA", , SendMessageTimeout,Long,成功时返回TRUE,失败时返回FALSE。会设置GetLastError
        .参数 窗口句柄, 整数型, , hwnd,要接收消息的一个窗口的句柄
        .参数 标识符, 整数型, , msg,消息的标识符
        .参数 消息1, 整数型, , wparam,由消息决定
        .参数 消息2, 整数型, , lparam,由消息决定
        .参数 类型, 整数型, , fuflags,下述常数的一个或多个SMTO_ABORTIFHUNG如目标进程挂起,则函数立即返回
        .参数 超时值, 整数型, , utimeout,超时值,采用毫秒为单位
        .参数 结果, 整数型, , lpdwresult,用于装载函数结果的一个变量

    易语言前台调用测试

    .版本 2
     
    .程序集 窗口程序集_启动窗口
     
    .子程序 _按钮_测试效果_被单击
     
    信息框 (“测试效果按钮被点击了!, 0, )
     
    .子程序 _按钮_发送消息_被单击
    .局部变量 局部_结果, 整数型
     
    同步发送消息_ (按钮_测试效果.取窗口句柄 (), 245, 0, 0, 0, 500, 局部_结果)
  • 易语言SendMessageCallbackA发送消息并返回

    易语言SendMessageCallbackA发送消息并返回

    SendMessageCallbackA函数原型

    BOOL SendMessageCallbackA(
      HWND          hWnd,
      UINT          Msg,
      WPARAM        wParam,
      LPARAM        lParam,
      SENDASYNCPROC lpResultCallBack,
      ULONG_PTR     dwData
    );

    发送消息返回SendMessageCallbackA

    .版本 2
     
    .DLL命令 发送消息返回_, 整数型, "user32.dll", "SendMessageCallbackA", , SendMessageCallback,该函数最大的特定是可以立即返回。目标窗口函数执行完毕后,会用回调函数的形式将结果返回Long,TRUE表示成功,FALSE表示失败。会设置GetLastError
        .参数 窗口句柄, 整数型, , hwnd,要接收消息的那个窗口的句柄
        .参数 消息标识符, 整数型, , wmsg,消息的标识符
        .参数 消息1, 整数型, , wParam,取决于消息
        .参数 消息2, 整数型, , lParam,取决于消息
        .参数 指定函数地址, 整数型, , lpResultCallBack,指定函数地址。在vb5中可用AddressOf操作符获得
        .参数 自定义值, 整数型, , dwData,用户自定义值

    易语言调用测试

    .版本 2
     
    .程序集 窗口程序集_启动窗口
     
    .子程序 _按钮_测试效果_被单击
     
    信息框 (“测试效果按钮,被点击了!, 0, )
     
    .子程序 _按钮_发送信息_被单击
     
    发送消息返回_ (按钮_测试效果.取窗口句柄 (), 245, 0, 0, 0, 1)
  • 易语言MulDiv乘除运算

    易语言MulDiv乘除运算

    int MulDiv(
                    int nNumber,      //32位数值,作为被乘数,
                    int nNumerator,   //32位数值,作为乘数,
                    int nDenominator, //32位数值,作为被除数
                                      //(分母),nNumber,nNumberator的乘积
                                      //作为除数(分子)
                  );

    如果返回成功,则结果位乘法和除法的结果,如果溢出或分母(nDenominator)为0,则返回-1。

    乘除计算MulDiv

    .版本 2
     
    .DLL命令 乘除计算_, 整数型, "kernel32.dll", "MulDiv"
        .参数 乘数1, 整数型, , nNumber
        .参数 乘数2, 整数型, , nNumerator
        .参数 除数, 整数型, , nDenominator

    易语言调用

    .版本 2
     
    .子程序 _按钮_乘除计算_被单击
     
    编辑框_结果.内容 = 到文本 (乘除计算_ (到数值 (编辑框_乘数1.内容), 到数值 (编辑框_乘数2.内容), 到数值 (编辑框_乘数3.内容)))
  • 易语言GetVersionExA获取windows系统版本

    易语言GetVersionExA获取windows系统版本

    GetVersionExA

    .版本 2
     
    .DLL命令 GetVersionExA, 逻辑型, "kernel32", "GetVersionExA"
        .参数 lpVersionInformation, OSVERSIONINFO, , 0

    数据类型 OSVERSIONINFO

    .版本 2
     
    .数据类型 OSVERSIONINFO
        .成员 dwOSVersionInfoSize, 整数型, , , //初始化为结构的大小
        .成员 dwMajorVersion, 整数型, , , //系统主版本号
        .成员 dwMinorVersion, 整数型, , , //系统次版本号
        .成员 dwBuildNumber, 整数型, , , //系统构建号
        .成员 dwPlatformId, 整数型, , , //系统支持的平台(详见附1)
        .成员 szCSDVersion, 整数型, , "128", //系统补丁包的名称  
        .成员 wServicePackMajor, 整数型, , , //系统补丁包的主版本  
        .成员 wServicePackMinor, 整数型, , , //系统补丁包的次版本  
        .成员 wSuiteMask, 整数型, , , //标识系统上的程序组  
        .成员 wProductType, 整数型, , , //标识系统类型  
        .成员 wReserved, , , , //保留,未使用
    typedef struct {  
        DWORD dwOSVersionInfoSize;       //在使用GetVersionEx之前要将此初始化为结构的大小  
        DWORD dwMajorVersion;            //系统主版本号  
        DWORD dwMinorVersion;            //系统次版本号  
        DWORD dwBuildNumber;             //系统构建号  
        DWORD dwPlatformId;              //系统支持的平台  
        TCHAR szCSDVersion[128];         //系统补丁包的名称  
        WORD wServicePackMajor;          //系统补丁包的主版本  
        WORD wServicePackMinor;          //系统补丁包的次版本  
        WORD wSuiteMask;                 //标识系统上的程序组  
        BYTE wProductType;               //标识系统类型  
        BYTE wReserved;                  //保留,未使用  
    } OSVERSIONINFOEX, *POSVERSIONINFOEX;

    这个结构在Windows 2000后出现,老版本的OSVERSIONINFO结构没有wServicePackMajor、wServicePackMinor、wSuiteMask、wProductType和wReserved这几个成员。

    易语言调用

    .版本 2
    .支持库 spec
     
    .程序集 窗口程序集_启动窗口
     
    .子程序 _按钮1_被单击
    .局部变量 a, OSVERSIONINFO
     
    a.dwOSVersionInfoSize = 156
    GetVersionExA (a)
    调试输出 (a.dwMajorVersion)
    调试输出 (a.dwMinorVersion)

    我们要根据主版本dwMajorVersion和次版本号dwMinorVersion的组合来判断系统版本,参考如下:

    511遇见

    附1:dwPlatformId的值

    VER_PLATFORM_WIN32s (Win32s),

    VER_PLATFORM_WIN32_WINDOWS (Windows 95/Windows 98),

    VER_PLATFORM_WIN32_NT (Windows NT/Windows 2000),

    VER_PLATFORM_WIN32_CEHH (Windows CE).

    附2:wSuiteMask的值:

    VER_SUITE_SMALLBUSINESS,

    VER_SUITE_ENTERPRISE,

    VER_SUITE_BACKOFFICE,

    VER_SUITE_COMMUNICATIONS,

    VER_SUITE_TERMINAL,

    VER_SUITE_SMALLBUSINESS_RESTRICTED,

    VER_SUITE_EMBEDDEDNT,

    VER_SUITE_DATACENTER.

    附3:wProductType的值:

    VER_NT_WORKSTATION,

    VER_NT_SERVER,

    VER_NT_DOMAIN_CONTROLLER.
    MSDN api 链接
    https://docs.microsoft.com/zh-cn/windows/win32/api/sysinfoapi/nf-sysinfoapi-getversionexa

  • 易语言GetUserNameA获取系统当前用户名

    易语言GetUserNameA获取系统当前用户名

    取用户名GetUserNameA

    注意:在易语言中,第二参数nSize需要选中传址

    1. .版本 2
      
    2.  
    3. .DLL命令 取用户名, 逻辑型, "advapi32", "GetUserNameA"
      
    4.     .参数 lpBuffer, 文本型, , 0
      
    5.     .参数 nSize, 整数型, 传址, 255

    参数 类型及说明
    lpBuffer String,一个字串缓冲区,预先初始化成由nSize指定的长度。它将用于容纳用户名,是获取名称缓冲区。
    nSize Long,初始化成lpBuffer的长度。返回以后,它会包含载入lpBuffer的字符数量 ,是缓冲区的大小和返回帐号的大小。

    易语言调用

    1. .版本 2
      
    2. .支持库 spec
      
    3.  
    4. .子程序 _按钮1_被单击
      
    5. .局部变量 用户名, 文本型
      
    6.  
    7.  
    8. 用户名 = 取空白文本 (255)
      
    9. 取用户名 (用户名, 255)
      
    10. 调试输出 (用户名)

    API函数详解:GetUserName函数

    Windows API函数 Visual Basic 语法格式声明
    Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Windows API函数功能说明
    取得当前用户的名字
    Windows API函数出口返回值
    Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
    Windows API函数入口参数表
    Windows API函数入口参数 类型及说明
    lpBuffer String,一个字串缓冲区,预先初始化成由nSize指定的长度。它将用于容纳用户名
    nSize Long,初始化成lpBuffer的长度。返回以后,它会包含载入lpBuffer的字符数量
    示例
    Dim s$, cnt&, dl&
    cnt& = 199
    s$ = String$(200,0)
    dl& = GetUserName(s$, cnt)
    Debug.Print Left$(s$, cnt); cnt
    上页:API函数详解:XFORM函数 下页:API函数详解:AbortPath函数