diff --git a/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project.exe b/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project.exe
index d0ff6b8..33ebf61 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project.exe and b/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project.exe differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project2.exe b/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project2.exe
index ca14880..ef6e5b8 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project2.exe and b/Bin/Debug/CommonControls/.NET4 示例/Itrycn_Project2.exe differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/MyDb.dll b/Bin/Debug/CommonControls/.NET4 示例/MyDb.dll
index ba8dc42..7bca45c 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/MyDb.dll and b/Bin/Debug/CommonControls/.NET4 示例/MyDb.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/MyDb.xml b/Bin/Debug/CommonControls/.NET4 示例/MyDb.xml
index 531f846..71a7e8c 100644
--- a/Bin/Debug/CommonControls/.NET4 示例/MyDb.xml
+++ b/Bin/Debug/CommonControls/.NET4 示例/MyDb.xml
@@ -973,6 +973,13 @@
+
+
+ 判断字符串是否只包含数字
+
+
+
+
判断字符串是否匹配,支持?*通配符
@@ -1133,6 +1140,13 @@
+
+
+ 判断字符串是否是数字(不同于IsInt,本函数是判断字符串是否只含有数字,对字符串长度没有限制)
+
+
+
+
是否在指定范围内
@@ -1176,6 +1190,20 @@
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
将指定类型转换成整型
@@ -1198,6 +1226,20 @@
+
+
+ 转换为Js时间戳
+
+
+
+
+
+
+ 转换为Unix时间戳
+
+
+
+
将指定类型转换成长整型
@@ -2540,6 +2582,209 @@
父窗体居中
+
+
+ 运行库检测类
+
+
+
+
+ 获取产品状态
+
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 安装状态
+
+
+
+
+ 组件禁用
+
+
+
+
+ 配置数据已损坏
+
+
+
+
+ 安装已暂停或正在进行
+
+
+
+
+ 从源运行,源不可用
+
+
+
+
+ 返回缓冲区溢出
+
+
+
+
+ 无效的参数传递给该函数。
+
+
+
+
+ 不公布或者未安装该产品。
+
+
+
+
+ 损坏
+
+
+
+
+ 该产品已公布但尚未安装。
+
+
+
+
+ 正在移除的组件(操作状态,不可设置)
+
+
+
+
+ 不同的用户安装该产品。
+
+
+
+
+ 安装在本地驱动器上
+
+
+
+
+ 从源代码、CD或网络运行
+
+
+
+
+ 为当前用户安装该产品。
+
+
+
+
+ 安装的版本,是x86还是x64,还是全部安装了
+
+
+
+
+ 判断32位和64位运行库是否已安装
+
+
+
+
+ 判断32位运行库是否已安装
+
+
+
+
+ 判断64位运行库是否已安装
+
+
+
+
+ 判断是否已安装VC2005运行库
+
+
+
+
+
+ 判断是否已安装VC2005SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2008运行库
+
+
+
+
+
+ 判断是否已安装VC2008SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2010运行库
+
+
+
+
+
+ 判断是否已安装VC2010SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2012运行库
+
+
+
+
+
+ 判断是否已安装VC2013运行库
+
+
+
+
+
+ 判断是否已安装VC2015或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2017运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2019运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2022运行库或以上运行库
+
+
+
+
+
+ 判断当前系统是否安装了WebView2组件
+
+
+
+
+
+ 判断当前系统是否安装了.NET 4.8
+
+
+
日期时间的操作类
@@ -2868,6 +3113,15 @@
访问的注册表节点
+
+
+ 判断注册表项是否存在
+
+
+
+
+
+
设置是否开机启动
@@ -3109,7 +3363,7 @@
- 获取系统
+ 获取系统名称,注意需要在app.manifest文件中设置兼容win10
@@ -3169,124 +3423,60 @@
是否截取鼠标指针
-
-
- 给控件增加拖放功能的类
-
-
-
-
- 拖放实例
-
-
-
-
- 高级拖放事件
-
-
-
+
-
+
-
+ 根据XPath来获取属性值
-
-
-
-
-
-
-
-
- 使管理员方式运行时支持拖放
-
-
-
-
-
- 使支持拖放属性
-
-
-
-
-
-
-
-
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网络操作类
-
-
-
-
- 通过NetworkInterface读取网卡Mac
+ 根据当前节点生成HtmlDocument
+
-
+
- 通过NetworkInterface读取网卡Mac
+ 根据XPath来获取属性值
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
- 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+ 根据XPath来查找节点
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找符合的第一个节点
-
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找所有符合的节点
-
-
-
+
+
@@ -6404,6 +6594,126 @@
Gets the fragment text.
+
+
+ 给控件增加拖放功能的类
+
+
+
+
+ 拖放实例
+
+
+
+
+ 高级拖放事件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使管理员方式运行时支持拖放
+
+
+
+
+
+ 使支持拖放属性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网络操作类
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
消息客户端类
diff --git a/Bin/Debug/CommonControls/.NET4 示例/MyDb_SQLite.dll b/Bin/Debug/CommonControls/.NET4 示例/MyDb_SQLite.dll
index edcbbf8..0920e03 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/MyDb_SQLite.dll and b/Bin/Debug/CommonControls/.NET4 示例/MyDb_SQLite.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/RyPrint.dll b/Bin/Debug/CommonControls/.NET4 示例/RyPrint.dll
index 384a82e..ee37aa3 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/RyPrint.dll and b/Bin/Debug/CommonControls/.NET4 示例/RyPrint.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/UserDb/Win.dat b/Bin/Debug/CommonControls/.NET4 示例/UserDb/Win.dat
index 9683fa9..de7db3f 100644
--- a/Bin/Debug/CommonControls/.NET4 示例/UserDb/Win.dat
+++ b/Bin/Debug/CommonControls/.NET4 示例/UserDb/Win.dat
@@ -1,2 +1,2 @@
[Money_Op]
-hwnd=2827616
+hwnd=921334
diff --git a/Bin/Debug/CommonControls/.NET4 示例/cUpdate.dat b/Bin/Debug/CommonControls/.NET4 示例/cUpdate.dat
index f96c173..9a9eea1 100644
--- a/Bin/Debug/CommonControls/.NET4 示例/cUpdate.dat
+++ b/Bin/Debug/CommonControls/.NET4 示例/cUpdate.dat
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/Bin/Debug/CommonControls/.NET4 示例/ryControls.dll b/Bin/Debug/CommonControls/.NET4 示例/ryControls.dll
index c21b61e..0d07fdc 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/ryControls.dll and b/Bin/Debug/CommonControls/.NET4 示例/ryControls.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4 示例/ryControls.xml b/Bin/Debug/CommonControls/.NET4 示例/ryControls.xml
index f9105cf..ff15c84 100644
--- a/Bin/Debug/CommonControls/.NET4 示例/ryControls.xml
+++ b/Bin/Debug/CommonControls/.NET4 示例/ryControls.xml
@@ -7084,6 +7084,38 @@
+
+
+ 密码控件
+
+
+
+
+
+
+
+
+
+ 密码
+
+
+
+
+ 必需的设计器变量。
+
+
+
+
+ 清理所有正在使用的资源。
+
+ 如果应释放托管资源,为 true;否则为 false。
+
+
+
+ 设计器支持所需的方法 - 不要
+ 使用代码编辑器修改此方法的内容。
+
+
分页控件
diff --git a/Bin/Debug/CommonControls/.NET4 示例/ryUpdate.dll b/Bin/Debug/CommonControls/.NET4 示例/ryUpdate.dll
index 0b7669c..5090739 100644
Binary files a/Bin/Debug/CommonControls/.NET4 示例/ryUpdate.dll and b/Bin/Debug/CommonControls/.NET4 示例/ryUpdate.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/Google.Protobuf.dll b/Bin/Debug/CommonControls/.NET4/Google.Protobuf.dll
new file mode 100644
index 0000000..2d19737
Binary files /dev/null and b/Bin/Debug/CommonControls/.NET4/Google.Protobuf.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/MyDb.dll b/Bin/Debug/CommonControls/.NET4/MyDb.dll
index ba8dc42..7bca45c 100644
Binary files a/Bin/Debug/CommonControls/.NET4/MyDb.dll and b/Bin/Debug/CommonControls/.NET4/MyDb.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/MyDb.xml b/Bin/Debug/CommonControls/.NET4/MyDb.xml
index 531f846..71a7e8c 100644
--- a/Bin/Debug/CommonControls/.NET4/MyDb.xml
+++ b/Bin/Debug/CommonControls/.NET4/MyDb.xml
@@ -973,6 +973,13 @@
+
+
+ 判断字符串是否只包含数字
+
+
+
+
判断字符串是否匹配,支持?*通配符
@@ -1133,6 +1140,13 @@
+
+
+ 判断字符串是否是数字(不同于IsInt,本函数是判断字符串是否只含有数字,对字符串长度没有限制)
+
+
+
+
是否在指定范围内
@@ -1176,6 +1190,20 @@
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
将指定类型转换成整型
@@ -1198,6 +1226,20 @@
+
+
+ 转换为Js时间戳
+
+
+
+
+
+
+ 转换为Unix时间戳
+
+
+
+
将指定类型转换成长整型
@@ -2540,6 +2582,209 @@
父窗体居中
+
+
+ 运行库检测类
+
+
+
+
+ 获取产品状态
+
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 安装状态
+
+
+
+
+ 组件禁用
+
+
+
+
+ 配置数据已损坏
+
+
+
+
+ 安装已暂停或正在进行
+
+
+
+
+ 从源运行,源不可用
+
+
+
+
+ 返回缓冲区溢出
+
+
+
+
+ 无效的参数传递给该函数。
+
+
+
+
+ 不公布或者未安装该产品。
+
+
+
+
+ 损坏
+
+
+
+
+ 该产品已公布但尚未安装。
+
+
+
+
+ 正在移除的组件(操作状态,不可设置)
+
+
+
+
+ 不同的用户安装该产品。
+
+
+
+
+ 安装在本地驱动器上
+
+
+
+
+ 从源代码、CD或网络运行
+
+
+
+
+ 为当前用户安装该产品。
+
+
+
+
+ 安装的版本,是x86还是x64,还是全部安装了
+
+
+
+
+ 判断32位和64位运行库是否已安装
+
+
+
+
+ 判断32位运行库是否已安装
+
+
+
+
+ 判断64位运行库是否已安装
+
+
+
+
+ 判断是否已安装VC2005运行库
+
+
+
+
+
+ 判断是否已安装VC2005SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2008运行库
+
+
+
+
+
+ 判断是否已安装VC2008SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2010运行库
+
+
+
+
+
+ 判断是否已安装VC2010SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2012运行库
+
+
+
+
+
+ 判断是否已安装VC2013运行库
+
+
+
+
+
+ 判断是否已安装VC2015或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2017运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2019运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2022运行库或以上运行库
+
+
+
+
+
+ 判断当前系统是否安装了WebView2组件
+
+
+
+
+
+ 判断当前系统是否安装了.NET 4.8
+
+
+
日期时间的操作类
@@ -2868,6 +3113,15 @@
访问的注册表节点
+
+
+ 判断注册表项是否存在
+
+
+
+
+
+
设置是否开机启动
@@ -3109,7 +3363,7 @@
- 获取系统
+ 获取系统名称,注意需要在app.manifest文件中设置兼容win10
@@ -3169,124 +3423,60 @@
是否截取鼠标指针
-
-
- 给控件增加拖放功能的类
-
-
-
-
- 拖放实例
-
-
-
-
- 高级拖放事件
-
-
-
+
-
+
-
+ 根据XPath来获取属性值
-
-
-
-
-
-
-
-
- 使管理员方式运行时支持拖放
-
-
-
-
-
- 使支持拖放属性
-
-
-
-
-
-
-
-
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网络操作类
-
-
-
-
- 通过NetworkInterface读取网卡Mac
+ 根据当前节点生成HtmlDocument
+
-
+
- 通过NetworkInterface读取网卡Mac
+ 根据XPath来获取属性值
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
- 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+ 根据XPath来查找节点
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找符合的第一个节点
-
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找所有符合的节点
-
-
-
+
+
@@ -6404,6 +6594,126 @@
Gets the fragment text.
+
+
+ 给控件增加拖放功能的类
+
+
+
+
+ 拖放实例
+
+
+
+
+ 高级拖放事件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使管理员方式运行时支持拖放
+
+
+
+
+
+ 使支持拖放属性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网络操作类
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
消息客户端类
diff --git a/Bin/Debug/CommonControls/.NET4/MyDb_MySQL.dll b/Bin/Debug/CommonControls/.NET4/MyDb_MySQL.dll
index 6fb79f4..9441822 100644
Binary files a/Bin/Debug/CommonControls/.NET4/MyDb_MySQL.dll and b/Bin/Debug/CommonControls/.NET4/MyDb_MySQL.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/MyDb_SQLite.dll b/Bin/Debug/CommonControls/.NET4/MyDb_SQLite.dll
index edcbbf8..0920e03 100644
Binary files a/Bin/Debug/CommonControls/.NET4/MyDb_SQLite.dll and b/Bin/Debug/CommonControls/.NET4/MyDb_SQLite.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/MySql.Data.dll b/Bin/Debug/CommonControls/.NET4/MySql.Data.dll
index b732da4..173f721 100644
Binary files a/Bin/Debug/CommonControls/.NET4/MySql.Data.dll and b/Bin/Debug/CommonControls/.NET4/MySql.Data.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/RyPrint.dll b/Bin/Debug/CommonControls/.NET4/RyPrint.dll
index 384a82e..ee37aa3 100644
Binary files a/Bin/Debug/CommonControls/.NET4/RyPrint.dll and b/Bin/Debug/CommonControls/.NET4/RyPrint.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/ryControls.dll b/Bin/Debug/CommonControls/.NET4/ryControls.dll
index c21b61e..0d07fdc 100644
Binary files a/Bin/Debug/CommonControls/.NET4/ryControls.dll and b/Bin/Debug/CommonControls/.NET4/ryControls.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/ryControls.xml b/Bin/Debug/CommonControls/.NET4/ryControls.xml
index f9105cf..ff15c84 100644
--- a/Bin/Debug/CommonControls/.NET4/ryControls.xml
+++ b/Bin/Debug/CommonControls/.NET4/ryControls.xml
@@ -7084,6 +7084,38 @@
+
+
+ 密码控件
+
+
+
+
+
+
+
+
+
+ 密码
+
+
+
+
+ 必需的设计器变量。
+
+
+
+
+ 清理所有正在使用的资源。
+
+ 如果应释放托管资源,为 true;否则为 false。
+
+
+
+ 设计器支持所需的方法 - 不要
+ 使用代码编辑器修改此方法的内容。
+
+
分页控件
diff --git a/Bin/Debug/CommonControls/.NET4/ryUpdate.dll b/Bin/Debug/CommonControls/.NET4/ryUpdate.dll
index 0b7669c..5090739 100644
Binary files a/Bin/Debug/CommonControls/.NET4/ryUpdate.dll and b/Bin/Debug/CommonControls/.NET4/ryUpdate.dll differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project.exe b/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project.exe
index 26f0ee3..d128806 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project.exe and b/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project.exe differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project2.exe b/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project2.exe
new file mode 100644
index 0000000..18f6e1c
Binary files /dev/null and b/Bin/Release/CommonControls/.NET4 示例/Itrycn_Project2.exe differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/MyDb.dll b/Bin/Release/CommonControls/.NET4 示例/MyDb.dll
index 7b9fa9c..75c5e57 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/MyDb.dll and b/Bin/Release/CommonControls/.NET4 示例/MyDb.dll differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/MyDb.xml b/Bin/Release/CommonControls/.NET4 示例/MyDb.xml
index 65b228e..2f31e49 100644
--- a/Bin/Release/CommonControls/.NET4 示例/MyDb.xml
+++ b/Bin/Release/CommonControls/.NET4 示例/MyDb.xml
@@ -973,6 +973,13 @@
+
+
+ 判断字符串是否只包含数字
+
+
+
+
判断字符串是否匹配,支持?*通配符
@@ -1133,6 +1140,13 @@
+
+
+ 判断字符串是否是数字(不同于IsInt,本函数是判断字符串是否只含有数字,对字符串长度没有限制)
+
+
+
+
是否在指定范围内
@@ -1176,6 +1190,20 @@
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
将指定类型转换成整型
@@ -1198,6 +1226,20 @@
+
+
+ 转换为Js时间戳
+
+
+
+
+
+
+ 转换为Unix时间戳
+
+
+
+
将指定类型转换成长整型
@@ -2540,6 +2582,209 @@
父窗体居中
+
+
+ 运行库检测类
+
+
+
+
+ 获取产品状态
+
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 安装状态
+
+
+
+
+ 组件禁用
+
+
+
+
+ 配置数据已损坏
+
+
+
+
+ 安装已暂停或正在进行
+
+
+
+
+ 从源运行,源不可用
+
+
+
+
+ 返回缓冲区溢出
+
+
+
+
+ 无效的参数传递给该函数。
+
+
+
+
+ 不公布或者未安装该产品。
+
+
+
+
+ 损坏
+
+
+
+
+ 该产品已公布但尚未安装。
+
+
+
+
+ 正在移除的组件(操作状态,不可设置)
+
+
+
+
+ 不同的用户安装该产品。
+
+
+
+
+ 安装在本地驱动器上
+
+
+
+
+ 从源代码、CD或网络运行
+
+
+
+
+ 为当前用户安装该产品。
+
+
+
+
+ 安装的版本,是x86还是x64,还是全部安装了
+
+
+
+
+ 判断32位和64位运行库是否已安装
+
+
+
+
+ 判断32位运行库是否已安装
+
+
+
+
+ 判断64位运行库是否已安装
+
+
+
+
+ 判断是否已安装VC2005运行库
+
+
+
+
+
+ 判断是否已安装VC2005SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2008运行库
+
+
+
+
+
+ 判断是否已安装VC2008SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2010运行库
+
+
+
+
+
+ 判断是否已安装VC2010SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2012运行库
+
+
+
+
+
+ 判断是否已安装VC2013运行库
+
+
+
+
+
+ 判断是否已安装VC2015或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2017运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2019运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2022运行库或以上运行库
+
+
+
+
+
+ 判断当前系统是否安装了WebView2组件
+
+
+
+
+
+ 判断当前系统是否安装了.NET 4.8
+
+
+
日期时间的操作类
@@ -2868,6 +3113,15 @@
访问的注册表节点
+
+
+ 判断注册表项是否存在
+
+
+
+
+
+
设置是否开机启动
@@ -3109,7 +3363,7 @@
- 获取系统
+ 获取系统名称,注意需要在app.manifest文件中设置兼容win10
@@ -3169,124 +3423,60 @@
是否截取鼠标指针
-
-
- 给控件增加拖放功能的类
-
-
-
-
- 拖放实例
-
-
-
-
- 高级拖放事件
-
-
-
+
-
+
-
+ 根据XPath来获取属性值
-
-
-
-
-
-
-
-
- 使管理员方式运行时支持拖放
-
-
-
-
-
- 使支持拖放属性
-
-
-
-
-
-
-
-
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网络操作类
-
-
-
-
- 通过NetworkInterface读取网卡Mac
+ 根据当前节点生成HtmlDocument
+
-
+
- 通过NetworkInterface读取网卡Mac
+ 根据XPath来获取属性值
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
- 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+ 根据XPath来查找节点
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找符合的第一个节点
-
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找所有符合的节点
-
-
-
+
+
@@ -6377,6 +6567,126 @@
Gets the fragment text.
+
+
+ 给控件增加拖放功能的类
+
+
+
+
+ 拖放实例
+
+
+
+
+ 高级拖放事件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使管理员方式运行时支持拖放
+
+
+
+
+
+ 使支持拖放属性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网络操作类
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
消息客户端类
diff --git a/Bin/Release/CommonControls/.NET4 示例/MyDb_SQLite.dll b/Bin/Release/CommonControls/.NET4 示例/MyDb_SQLite.dll
index cbdb59e..e916c71 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/MyDb_SQLite.dll and b/Bin/Release/CommonControls/.NET4 示例/MyDb_SQLite.dll differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/RyPrint.dll b/Bin/Release/CommonControls/.NET4 示例/RyPrint.dll
index dbfeb90..a8958b2 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/RyPrint.dll and b/Bin/Release/CommonControls/.NET4 示例/RyPrint.dll differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/UserDb/Win.dat b/Bin/Release/CommonControls/.NET4 示例/UserDb/Win.dat
index d18abd2..2c2150b 100644
--- a/Bin/Release/CommonControls/.NET4 示例/UserDb/Win.dat
+++ b/Bin/Release/CommonControls/.NET4 示例/UserDb/Win.dat
@@ -1,2 +1,2 @@
[Money_Op]
-hwnd=74558
+hwnd=134850
diff --git a/Bin/Release/CommonControls/.NET4 示例/cUpdate.dat b/Bin/Release/CommonControls/.NET4 示例/cUpdate.dat
index ebae366..5c1f19f 100644
--- a/Bin/Release/CommonControls/.NET4 示例/cUpdate.dat
+++ b/Bin/Release/CommonControls/.NET4 示例/cUpdate.dat
@@ -1,4 +1,4 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/Bin/Release/CommonControls/.NET4 示例/ryControls.dll b/Bin/Release/CommonControls/.NET4 示例/ryControls.dll
index 697a275..e148efa 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/ryControls.dll and b/Bin/Release/CommonControls/.NET4 示例/ryControls.dll differ
diff --git a/Bin/Release/CommonControls/.NET4 示例/ryControls.xml b/Bin/Release/CommonControls/.NET4 示例/ryControls.xml
index f9105cf..ff15c84 100644
--- a/Bin/Release/CommonControls/.NET4 示例/ryControls.xml
+++ b/Bin/Release/CommonControls/.NET4 示例/ryControls.xml
@@ -7084,6 +7084,38 @@
+
+
+ 密码控件
+
+
+
+
+
+
+
+
+
+ 密码
+
+
+
+
+ 必需的设计器变量。
+
+
+
+
+ 清理所有正在使用的资源。
+
+ 如果应释放托管资源,为 true;否则为 false。
+
+
+
+ 设计器支持所需的方法 - 不要
+ 使用代码编辑器修改此方法的内容。
+
+
分页控件
diff --git a/Bin/Release/CommonControls/.NET4 示例/ryUpdate.dll b/Bin/Release/CommonControls/.NET4 示例/ryUpdate.dll
index 2dfc624..1471e1e 100644
Binary files a/Bin/Release/CommonControls/.NET4 示例/ryUpdate.dll and b/Bin/Release/CommonControls/.NET4 示例/ryUpdate.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/Google.Protobuf.dll b/Bin/Release/CommonControls/.NET4/Google.Protobuf.dll
new file mode 100644
index 0000000..2d19737
Binary files /dev/null and b/Bin/Release/CommonControls/.NET4/Google.Protobuf.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/MyDb.dll b/Bin/Release/CommonControls/.NET4/MyDb.dll
index 7b9fa9c..75c5e57 100644
Binary files a/Bin/Release/CommonControls/.NET4/MyDb.dll and b/Bin/Release/CommonControls/.NET4/MyDb.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/MyDb.xml b/Bin/Release/CommonControls/.NET4/MyDb.xml
index 65b228e..2f31e49 100644
--- a/Bin/Release/CommonControls/.NET4/MyDb.xml
+++ b/Bin/Release/CommonControls/.NET4/MyDb.xml
@@ -973,6 +973,13 @@
+
+
+ 判断字符串是否只包含数字
+
+
+
+
判断字符串是否匹配,支持?*通配符
@@ -1133,6 +1140,13 @@
+
+
+ 判断字符串是否是数字(不同于IsInt,本函数是判断字符串是否只含有数字,对字符串长度没有限制)
+
+
+
+
是否在指定范围内
@@ -1176,6 +1190,20 @@
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
+
+
+ 将数字转换成字符串,小数点末尾后面不包含0
+
+
+
+
将指定类型转换成整型
@@ -1198,6 +1226,20 @@
+
+
+ 转换为Js时间戳
+
+
+
+
+
+
+ 转换为Unix时间戳
+
+
+
+
将指定类型转换成长整型
@@ -2540,6 +2582,209 @@
父窗体居中
+
+
+ 运行库检测类
+
+
+
+
+ 获取产品状态
+
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 判断是否已安装VC运行库
+
+
+
+
+
+ 安装状态
+
+
+
+
+ 组件禁用
+
+
+
+
+ 配置数据已损坏
+
+
+
+
+ 安装已暂停或正在进行
+
+
+
+
+ 从源运行,源不可用
+
+
+
+
+ 返回缓冲区溢出
+
+
+
+
+ 无效的参数传递给该函数。
+
+
+
+
+ 不公布或者未安装该产品。
+
+
+
+
+ 损坏
+
+
+
+
+ 该产品已公布但尚未安装。
+
+
+
+
+ 正在移除的组件(操作状态,不可设置)
+
+
+
+
+ 不同的用户安装该产品。
+
+
+
+
+ 安装在本地驱动器上
+
+
+
+
+ 从源代码、CD或网络运行
+
+
+
+
+ 为当前用户安装该产品。
+
+
+
+
+ 安装的版本,是x86还是x64,还是全部安装了
+
+
+
+
+ 判断32位和64位运行库是否已安装
+
+
+
+
+ 判断32位运行库是否已安装
+
+
+
+
+ 判断64位运行库是否已安装
+
+
+
+
+ 判断是否已安装VC2005运行库
+
+
+
+
+
+ 判断是否已安装VC2005SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2008运行库
+
+
+
+
+
+ 判断是否已安装VC2008SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2010运行库
+
+
+
+
+
+ 判断是否已安装VC2010SP1运行库
+
+
+
+
+
+ 判断是否已安装VC2012运行库
+
+
+
+
+
+ 判断是否已安装VC2013运行库
+
+
+
+
+
+ 判断是否已安装VC2015或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2017运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2019运行库或以上运行库
+
+
+
+
+
+ 判断是否已安装VC2022运行库或以上运行库
+
+
+
+
+
+ 判断当前系统是否安装了WebView2组件
+
+
+
+
+
+ 判断当前系统是否安装了.NET 4.8
+
+
+
日期时间的操作类
@@ -2868,6 +3113,15 @@
访问的注册表节点
+
+
+ 判断注册表项是否存在
+
+
+
+
+
+
设置是否开机启动
@@ -3109,7 +3363,7 @@
- 获取系统
+ 获取系统名称,注意需要在app.manifest文件中设置兼容win10
@@ -3169,124 +3423,60 @@
是否截取鼠标指针
-
-
- 给控件增加拖放功能的类
-
-
-
-
- 拖放实例
-
-
-
-
- 高级拖放事件
-
-
-
+
-
+
-
+ 根据XPath来获取属性值
-
-
-
-
-
-
-
-
- 使管理员方式运行时支持拖放
-
-
-
-
-
- 使支持拖放属性
-
-
-
-
-
-
-
-
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 网络操作类
-
-
-
-
- 通过NetworkInterface读取网卡Mac
+ 根据当前节点生成HtmlDocument
+
-
+
- 通过NetworkInterface读取网卡Mac
+ 根据XPath来获取属性值
+
+
+ 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+
-
+
- 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+ 根据XPath来查找节点
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找符合的第一个节点
-
-
+
+
-
+
- 远程唤醒
+ 在当前节点下根据xpath来查找所有符合的节点
-
-
-
+
+
@@ -6377,6 +6567,126 @@
Gets the fragment text.
+
+
+ 给控件增加拖放功能的类
+
+
+
+
+ 拖放实例
+
+
+
+
+ 高级拖放事件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 使管理员方式运行时支持拖放
+
+
+
+
+
+ 使支持拖放属性
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网络操作类
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 通过NetworkInterface读取网卡Mac
+
+
+
+
+
+ 根据mac字符串来获取最终的mac地址,可以是各种MAC地址格式,非法的内容将返回null
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
+
+ 远程唤醒
+
+
+
+
+
+
消息客户端类
diff --git a/Bin/Release/CommonControls/.NET4/MyDb_MySQL.dll b/Bin/Release/CommonControls/.NET4/MyDb_MySQL.dll
index 9732d41..a9c07d5 100644
Binary files a/Bin/Release/CommonControls/.NET4/MyDb_MySQL.dll and b/Bin/Release/CommonControls/.NET4/MyDb_MySQL.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/MyDb_SQLite.dll b/Bin/Release/CommonControls/.NET4/MyDb_SQLite.dll
index cbdb59e..e916c71 100644
Binary files a/Bin/Release/CommonControls/.NET4/MyDb_SQLite.dll and b/Bin/Release/CommonControls/.NET4/MyDb_SQLite.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/MySql.Data.dll b/Bin/Release/CommonControls/.NET4/MySql.Data.dll
index b732da4..173f721 100644
Binary files a/Bin/Release/CommonControls/.NET4/MySql.Data.dll and b/Bin/Release/CommonControls/.NET4/MySql.Data.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/RyPrint.dll b/Bin/Release/CommonControls/.NET4/RyPrint.dll
index dbfeb90..a8958b2 100644
Binary files a/Bin/Release/CommonControls/.NET4/RyPrint.dll and b/Bin/Release/CommonControls/.NET4/RyPrint.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/ryControls.dll b/Bin/Release/CommonControls/.NET4/ryControls.dll
index 697a275..e148efa 100644
Binary files a/Bin/Release/CommonControls/.NET4/ryControls.dll and b/Bin/Release/CommonControls/.NET4/ryControls.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/ryControls.xml b/Bin/Release/CommonControls/.NET4/ryControls.xml
index f9105cf..ff15c84 100644
--- a/Bin/Release/CommonControls/.NET4/ryControls.xml
+++ b/Bin/Release/CommonControls/.NET4/ryControls.xml
@@ -7084,6 +7084,38 @@
+
+
+ 密码控件
+
+
+
+
+
+
+
+
+
+ 密码
+
+
+
+
+ 必需的设计器变量。
+
+
+
+
+ 清理所有正在使用的资源。
+
+ 如果应释放托管资源,为 true;否则为 false。
+
+
+
+ 设计器支持所需的方法 - 不要
+ 使用代码编辑器修改此方法的内容。
+
+
分页控件
diff --git a/Bin/Release/CommonControls/.NET4/ryUpdate.dll b/Bin/Release/CommonControls/.NET4/ryUpdate.dll
index 2dfc624..1471e1e 100644
Binary files a/Bin/Release/CommonControls/.NET4/ryUpdate.dll and b/Bin/Release/CommonControls/.NET4/ryUpdate.dll differ
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 266020f..a61f2c2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,14 @@
-### 2021-12-14更新
+### 2022-02-09更新
+------
+#### MyDbV4 V3.0.2202.0901
+- *.[改进]新增ToNString扩展函数,支持将数字转换成小数点末尾不带0的字符串。
+
+### 2021-12-27更新
+------
+#### MyDbV4 V3.0.2112.2701
+- *.[新增]DateTime类型扩展函数新增ToJsTime、ToUnixTime。
+
+### 2021-12-14更新
------
#### MyDbV4 V3.0.2112.1401
- *.[修复]修复MSSQL的ExecuteNonQuery函数可能因为报错导致软件崩溃的BUG。
diff --git a/Source/.vs/公用控件组V4/FileContentIndex/277c22b4-d272-4e5b-a26d-8707a63f6e06.vsidx b/Source/.vs/公用控件组V4/FileContentIndex/277c22b4-d272-4e5b-a26d-8707a63f6e06.vsidx
new file mode 100644
index 0000000..77ce11b
Binary files /dev/null and b/Source/.vs/公用控件组V4/FileContentIndex/277c22b4-d272-4e5b-a26d-8707a63f6e06.vsidx differ
diff --git a/Source/.vs/公用控件组V4/FileContentIndex/be56b25f-2f31-4fe9-88fc-0d4c800fdb7c.vsidx b/Source/.vs/公用控件组V4/FileContentIndex/be56b25f-2f31-4fe9-88fc-0d4c800fdb7c.vsidx
new file mode 100644
index 0000000..7eaff91
Binary files /dev/null and b/Source/.vs/公用控件组V4/FileContentIndex/be56b25f-2f31-4fe9-88fc-0d4c800fdb7c.vsidx differ
diff --git a/Source/.vs/公用控件组V4/FileContentIndex/read.lock b/Source/.vs/公用控件组V4/FileContentIndex/read.lock
new file mode 100644
index 0000000..e69de29
diff --git a/Source/.vs/公用控件组V4/v17/.suo b/Source/.vs/公用控件组V4/v17/.suo
index 5664427..8485624 100644
Binary files a/Source/.vs/公用控件组V4/v17/.suo and b/Source/.vs/公用控件组V4/v17/.suo differ
diff --git a/Source/.vs/公用控件组V4/v17/fileList.bin b/Source/.vs/公用控件组V4/v17/fileList.bin
index 42f7db5..12ebcba 100644
Binary files a/Source/.vs/公用控件组V4/v17/fileList.bin and b/Source/.vs/公用控件组V4/v17/fileList.bin differ
diff --git a/Source/Itrycn_Project2/FrmStart.Designer.cs b/Source/Itrycn_Project2/FrmStart.Designer.cs
index 9d4ef67..9069dfe 100644
--- a/Source/Itrycn_Project2/FrmStart.Designer.cs
+++ b/Source/Itrycn_Project2/FrmStart.Designer.cs
@@ -43,9 +43,15 @@
this.捐助ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.chromeTabControl1 = new ryControls.ChromeTabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.TabLogs = new System.Windows.Forms.TabPage();
+ this.LvLogs = new BrightIdeasSoftware.ObjectListView();
+ this.OlvLogTime = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
+ this.OlvLogText = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
this.MenuTray.SuspendLayout();
this.menuStrip1.SuspendLayout();
this.chromeTabControl1.SuspendLayout();
+ this.TabLogs.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.LvLogs)).BeginInit();
this.SuspendLayout();
//
// notifyIcon1
@@ -133,6 +139,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.chromeTabControl1.BackTabPageImage = null;
this.chromeTabControl1.Controls.Add(this.tabPage1);
+ this.chromeTabControl1.Controls.Add(this.TabLogs);
this.chromeTabControl1.Cursor = System.Windows.Forms.Cursors.Default;
this.chromeTabControl1.ItemSize = new System.Drawing.Size(100, 25);
this.chromeTabControl1.Location = new System.Drawing.Point(1, 55);
@@ -156,6 +163,49 @@
this.tabPage1.Text = "首页";
this.tabPage1.UseVisualStyleBackColor = true;
//
+ // TabLogs
+ //
+ this.TabLogs.Controls.Add(this.LvLogs);
+ this.TabLogs.Location = new System.Drawing.Point(1, 29);
+ this.TabLogs.Name = "TabLogs";
+ this.TabLogs.Padding = new System.Windows.Forms.Padding(3);
+ this.TabLogs.Size = new System.Drawing.Size(785, 503);
+ this.TabLogs.TabIndex = 1;
+ this.TabLogs.Text = "日志";
+ this.TabLogs.UseVisualStyleBackColor = true;
+ //
+ // LvLogs
+ //
+ this.LvLogs.AllColumns.Add(this.OlvLogTime);
+ this.LvLogs.AllColumns.Add(this.OlvLogText);
+ this.LvLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.LvLogs.CellEditUseWholeCell = false;
+ this.LvLogs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+ this.OlvLogTime,
+ this.OlvLogText});
+ this.LvLogs.Cursor = System.Windows.Forms.Cursors.Default;
+ this.LvLogs.FullRowSelect = true;
+ this.LvLogs.HideSelection = false;
+ this.LvLogs.Location = new System.Drawing.Point(3, 4);
+ this.LvLogs.Name = "LvLogs";
+ this.LvLogs.RowHeight = 25;
+ this.LvLogs.Size = new System.Drawing.Size(780, 494);
+ this.LvLogs.TabIndex = 14;
+ this.LvLogs.UseCompatibleStateImageBehavior = false;
+ this.LvLogs.View = System.Windows.Forms.View.Details;
+ //
+ // OlvLogTime
+ //
+ this.OlvLogTime.Text = "时间";
+ this.OlvLogTime.Width = 200;
+ //
+ // OlvLogText
+ //
+ this.OlvLogText.Text = "日志说明";
+ this.OlvLogText.Width = 500;
+ //
// FrmStart
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -174,6 +224,8 @@
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.chromeTabControl1.ResumeLayout(false);
+ this.TabLogs.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.LvLogs)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -192,5 +244,9 @@
private System.Windows.Forms.ToolStripMenuItem 选项ToolStripMenuItem;
private System.Windows.Forms.TabPage tabPage1;
private ryControls.ChromeTabControl chromeTabControl1;
+ private System.Windows.Forms.TabPage TabLogs;
+ private BrightIdeasSoftware.ObjectListView LvLogs;
+ private BrightIdeasSoftware.OLVColumn OlvLogTime;
+ private BrightIdeasSoftware.OLVColumn OlvLogText;
}
}
\ No newline at end of file
diff --git a/Source/Itrycn_Project2/FrmStart.cs b/Source/Itrycn_Project2/FrmStart.cs
index 58a3af5..c38b99a 100644
--- a/Source/Itrycn_Project2/FrmStart.cs
+++ b/Source/Itrycn_Project2/FrmStart.cs
@@ -14,6 +14,10 @@ namespace Itrycn_Project2
{
public partial class FrmStart : RySkins.SKinForm
{
+ ///
+ /// 最大日志数量
+ ///
+ private int MaxLogsCount { get; set; } = 1000;
readonly string[] prog_args;
public FrmStart(string[] args)
{
@@ -26,8 +30,56 @@ namespace Itrycn_Project2
if (!Soft_ConstInfo.DonateVisabled) { 捐助ToolStripMenuItem.Text = "关于"; }
if (Soft_ConstInfo.Soft_Url.Length == 0) { 打开官网ToolStripMenuItem.PerformClick(); }
notifyIcon1.Icon = Icon;
+ OlvLogTime.AspectGetter = delegate (object x) { return ((LogInfo)x).LogTime.ToDateTimeStr(); };
+ OlvLogText.AspectGetter = delegate (object x) { return ((LogInfo)x).LogText; };
+ LvLogs.FormatRow += delegate (object x, BrightIdeasSoftware.FormatRowEventArgs e) {
+ LogInfo item = (LogInfo)e.Model;
+ if (item.Color != Color.Black)
+ {
+ e.Item.ForeColor = item.Color;
+ }
+ };
+ }
+ ///
+ /// 添加日志
+ ///
+ ///
+ public void AddLog(string log)
+ {
+ AddLog(log, "", Color.Black);
+ }
+ ///
+ /// 添加日志
+ ///
+ ///
+ ///
+ public void AddLog(string log, Color color)
+ {
+ AddLog(log, "", color);
+ }
+ ///
+ /// 添加日志
+ ///
+ ///
+ ///
+ ///
+ public void AddLog(string log, string tag, Color color)
+ {
+ try
+ {
+ this.Invoke(new Action(() =>
+ {
+ var count = LvLogs.GetItemCount();
+ if (count > MaxLogsCount)
+ {
+ LvLogs.RemoveObject(LvLogs.GetModelObject(count-1));
+ }
+ LvLogs.InsertObjects(0, new LogInfo[] { new LogInfo() { LogTime = DateTime.Now, LogText = log,LogTag=tag, Color = color } });
+ OlvLogTime.Text = "时间(" + LvLogs.GetItemCount() + ")";
+ }));
+ }
+ catch { }
}
-
private void 显示主窗体ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
@@ -160,5 +212,27 @@ namespace Itrycn_Project2
}
frm.Dispose();
}
+ ///
+ /// 日志信息
+ ///
+ public class LogInfo
+ {
+ ///
+ /// 日志时间
+ ///
+ public DateTime LogTime { get; set; } = DateTime.Now;
+ ///
+ /// 日志内容
+ ///
+ public string LogText { get; set; }
+ ///
+ /// 日志Tag
+ ///
+ public string LogTag { get; set; }
+ ///
+ /// 日志文字颜色
+ ///
+ public Color Color { get; set; } = Color.Black;
+ }
}
}
diff --git a/Source/Itrycn_Project2/Program.cs b/Source/Itrycn_Project2/Program.cs
index 6625403..38b6401 100644
--- a/Source/Itrycn_Project2/Program.cs
+++ b/Source/Itrycn_Project2/Program.cs
@@ -23,6 +23,10 @@ namespace Itrycn_Project2
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
+ if(ryCommon.RedistCheck.IsInstall_VC2019(RedistCheck.InstallBit.All))
+ {
+
+ }
Config.Init.Show(args);
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
diff --git a/Source/MyDb/DbManage/HtmlVarExtension.cs b/Source/MyDb/DbManage/HtmlVarExtension.cs
new file mode 100644
index 0000000..9c2e370
--- /dev/null
+++ b/Source/MyDb/DbManage/HtmlVarExtension.cs
@@ -0,0 +1,129 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HtmlAgilityPack
+{
+ ///
+ ///
+ ///
+ public static class HtmlVarExtension
+ {
+ ///
+ /// 根据XPath来获取属性值
+ ///
+ ///
+ ///
+ /// 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+ ///
+ ///
+ static public string GetAttr(this HtmlNode original, string xpath,string attr,string defValue)
+ {
+ if (original == null) { return defValue; }
+ HtmlDocument htmlItem = new HtmlDocument();
+ htmlItem.LoadHtml(original.OuterHtml);
+ HtmlNodeCollection anchors = htmlItem.DocumentNode.SelectNodes(xpath);
+ if (anchors != null && anchors.Count >= 0)
+ {
+ if (attr.Length == 0)
+ { return System.Web.HttpUtility.HtmlDecode(anchors[0].InnerText); }
+ else if (attr == "-1")
+ { return anchors[0].InnerHtml; }
+ else if (attr == "-2")
+ { return anchors[0].OuterHtml; }
+ else
+ {
+ return anchors[0].GetAttributeValue(attr, defValue);
+ }
+ }
+ return defValue;
+ }
+ ///
+ /// 根据当前节点生成HtmlDocument
+ ///
+ ///
+ ///
+ static public HtmlDocument GetHtmlDocument(this HtmlNode original)
+ {
+ if (original == null) { return null; }
+ HtmlDocument htmlItem = new HtmlDocument();
+ htmlItem.LoadHtml(original.OuterHtml);
+ return htmlItem;
+ }
+ ///
+ /// 根据XPath来获取属性值
+ ///
+ ///
+ ///
+ /// 属性名,为空则输出InnerText,-1则输出InnerHtml,-2则输出OuterHtml
+ ///
+ ///
+ static public string GetAttr(this HtmlDocument htmlItem, string xpath, string attr, string defValue)
+ {
+ if(htmlItem == null) { return defValue;}
+ HtmlNodeCollection item = htmlItem.DocumentNode.SelectNodes(xpath);
+ if (item != null && item.Count >= 0)
+ {
+ if (attr.Length == 0)
+ { return System.Web.HttpUtility.HtmlDecode(item[0].InnerText); }
+ else if (attr == "-1")
+ { return item[0].InnerHtml; }
+ else if (attr == "-2")
+ { return item[0].OuterHtml; }
+ else
+ {
+ return item[0].GetAttributeValue(attr, defValue);
+ }
+ }
+ return defValue;
+ }
+ ///
+ /// 根据XPath来查找节点
+ ///
+ ///
+ ///
+ ///
+ static public HtmlNode GetHtmlNode(this HtmlDocument htmlDoc, string xpath)
+ {
+ HtmlNodeCollection anchors = htmlDoc.DocumentNode.SelectNodes(xpath);//筛选出网站的链接
+ if (anchors != null)
+ {
+ return anchors[0];
+ }
+ return null;
+ }
+ ///
+ /// 在当前节点下根据xpath来查找符合的第一个节点
+ ///
+ ///
+ ///
+ ///
+ static public HtmlNode GetHtmlNode(this HtmlNode node, string xpath)
+ {
+ if(node == null) { return null; }
+ HtmlDocument htmlItem = new HtmlDocument();
+ htmlItem.LoadHtml(node.OuterHtml);
+ HtmlNodeCollection anchors = htmlItem.DocumentNode.SelectNodes(xpath);//筛选出网站的链接
+ if (anchors != null)
+ {
+ return anchors[0];
+ }
+ return null;
+ }
+ ///
+ /// 在当前节点下根据xpath来查找所有符合的节点
+ ///
+ ///
+ ///
+ ///
+ static public HtmlNodeCollection GetHtmlNodes(this HtmlNode node, string xpath)
+ {
+ if (node == null) { return null; }
+ HtmlDocument htmlItem = new HtmlDocument();
+ htmlItem.LoadHtml(node.OuterHtml);
+ HtmlNodeCollection anchors = htmlItem.DocumentNode.SelectNodes(xpath);//筛选出网站的链接
+ return anchors;
+ }
+ }
+}
diff --git a/Source/MyDb/DbManage/Strings.cs b/Source/MyDb/DbManage/Strings.cs
index 997674b..8bccb2f 100644
--- a/Source/MyDb/DbManage/Strings.cs
+++ b/Source/MyDb/DbManage/Strings.cs
@@ -288,6 +288,15 @@ namespace ryCommon
return !Regex.IsMatch(str, "[^a-zA-Z]");
}
///
+ /// 判断字符串是否只包含数字
+ ///
+ ///
+ ///
+ public static bool IsNum(string str)
+ {
+ return !Regex.IsMatch(str, "[^0-9]");
+ }
+ ///
/// 判断字符串是否匹配,支持?*通配符
///
/// 待匹配的字符串
diff --git a/Source/MyDb/DbManage/VarExtension.cs b/Source/MyDb/DbManage/VarExtension.cs
index 161c8c2..af666df 100644
--- a/Source/MyDb/DbManage/VarExtension.cs
+++ b/Source/MyDb/DbManage/VarExtension.cs
@@ -117,6 +117,15 @@ namespace ryCommon
return Strings.IsEng(input);
}
///
+ /// 判断字符串是否是数字(不同于IsInt,本函数是判断字符串是否只含有数字,对字符串长度没有限制)
+ ///
+ ///
+ ///
+ static public bool IsNum(this string input)
+ {
+ return Strings.IsNum(input);
+ }
+ ///
/// 是否在指定范围内
///
///
@@ -187,6 +196,41 @@ namespace ryCommon
{ return defValue; }
}
///
+ /// 将数字转换成字符串,小数点末尾后面不包含0
+ ///
+ ///
+ ///
+ static public string ToNString(this decimal input)
+ {
+ var str= input.ToString();
+ if (str.IndexOfEx(".") >= 0) {
+ str= str.TrimEnd('0');
+ if(str.EndsWith("."))
+ {
+ str = str.Substring(0, str.Length - 1);
+ }
+ }
+ return str;
+ }
+ ///
+ /// 将数字转换成字符串,小数点末尾后面不包含0
+ ///
+ ///
+ ///
+ static public string ToNString(this double input)
+ {
+ var str = input.ToString();
+ if (str.IndexOfEx(".") >= 0)
+ {
+ str = str.TrimEnd('0');
+ if (str.EndsWith("."))
+ {
+ str = str.Substring(0, str.Length - 1);
+ }
+ }
+ return str;
+ }
+ ///
/// 将指定类型转换成整型
///
///
@@ -195,7 +239,8 @@ namespace ryCommon
{
try
{
- if(input is string)
+ if (input == null) { return 0; }
+ if (input is string)
{
if(input.IsDouble())
{
@@ -213,7 +258,7 @@ namespace ryCommon
///
///
///
- static public Int64 ToInt64(this object input, Int64 defValue)
+ static public long ToInt64(this object input, Int64 defValue)
{
try
{
@@ -237,11 +282,29 @@ namespace ryCommon
return input.ToTimeStamp();
}
///
+ /// 转换为Js时间戳
+ ///
+ ///
+ ///
+ static public long ToJsTime(this DateTime input)
+ {
+ return RyDate.DateTimeToJSTime(input);
+ }
+ ///
+ /// 转换为Unix时间戳
+ ///
+ ///
+ ///
+ static public long ToUnixTime(this DateTime input)
+ {
+ return RyDate.DateTimeToUnixTime(input);
+ }
+ ///
/// 将指定类型转换成长整型
///
///
///
- static public Int64 ToInt64(this object input)
+ static public long ToInt64(this object input)
{
return ToInt64(input,0);
}
@@ -304,7 +367,7 @@ namespace ryCommon
///
///
///
- static public Int64 ToTimeStamp(this DateTime input)
+ static public long ToTimeStamp(this DateTime input)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
long timeStamp = (long)(input - startTime).TotalSeconds; // 相差秒数
@@ -315,7 +378,7 @@ namespace ryCommon
///
///
///
- static public DateTime ToDateTime(this Int64 input)
+ static public DateTime ToDateTime(this long input)
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
return startTime.AddSeconds(input);
diff --git a/Source/MyDb/HtmlAgilityPack.Shared/HtmlNode.Xpath.cs b/Source/MyDb/HtmlAgilityPack.Shared/HtmlNode.Xpath.cs
index a591043..287b484 100644
--- a/Source/MyDb/HtmlAgilityPack.Shared/HtmlNode.Xpath.cs
+++ b/Source/MyDb/HtmlAgilityPack.Shared/HtmlNode.Xpath.cs
@@ -56,7 +56,6 @@ namespace HtmlAgilityPack
return list;
}
-
///
/// Selects a list of nodes matching the expression.
///
diff --git a/Source/MyDb/MyDbV4.csproj b/Source/MyDb/MyDbV4.csproj
index a2d0213..cdfd8d6 100644
--- a/Source/MyDb/MyDbV4.csproj
+++ b/Source/MyDb/MyDbV4.csproj
@@ -65,6 +65,7 @@
+
@@ -147,6 +148,7 @@
+
diff --git a/Source/MyDb/Properties/AssemblyInfo.cs b/Source/MyDb/Properties/AssemblyInfo.cs
index 468d0f6..41cf9a8 100644
--- a/Source/MyDb/Properties/AssemblyInfo.cs
+++ b/Source/MyDb/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.0.2112.1401")]
-[assembly: AssemblyFileVersion("3.0.2112.1401")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.2202.0901")]
+[assembly: AssemblyFileVersion("3.0.2202.0901")]
\ No newline at end of file
diff --git a/Source/MyDb/SysFuns/RedistCheck.cs b/Source/MyDb/SysFuns/RedistCheck.cs
new file mode 100644
index 0000000..b2fc105
--- /dev/null
+++ b/Source/MyDb/SysFuns/RedistCheck.cs
@@ -0,0 +1,411 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace ryCommon
+{
+ ///
+ /// 运行库检测类
+ ///
+ public static class RedistCheck
+ {
+ #region C++运行库判断模块
+ [DllImport("msi.dll")]
+ private static extern INSTALLSTATE MsiQueryProductState(string product);
+ ///
+ /// 获取产品状态
+ ///
+ ///
+ ///
+ private static INSTALLSTATE GetProcuct(string product)
+ {
+ INSTALLSTATE state = MsiQueryProductState(product);
+ return state;
+ }
+ private static bool HaveInstallVc(string GUID)
+ {
+
+ if (MsiQueryProductState(GUID) == INSTALLSTATE.INSTALLSTATE_DEFAULT)
+ { return true; }
+ else
+ {
+ return false;
+ }
+
+ }
+ private static bool HaveInstallVc(InstallBit installBit,string GUID_x86,string GUID_X64)
+ {
+ if (installBit == InstallBit.All)
+ {
+ return HaveInstallVc(GUID_x86) && HaveInstallVc(GUID_X64);
+ }
+ else if (installBit == InstallBit.X86)
+ {
+ return HaveInstallVc(GUID_x86);
+ }
+ else if (installBit == InstallBit.X64)
+ {
+ return HaveInstallVc(GUID_X64);
+ }
+ return false;
+ }
+ private static bool HaveInstallVc(InstallBit installBit, string[] GUID_x86, string[] GUID_X64)
+ {
+ if (installBit == InstallBit.All)
+ {
+ var result_x86 = false;
+ for (int i = 0; i < GUID_x86.Length; i++)
+ {
+ if (HaveInstallVc(GUID_x86[i])) { result_x86 = true;break; }
+ }
+ var result_x64 = false;
+ for (int i = 0; i < GUID_X64.Length; i++)
+ {
+ if (HaveInstallVc(GUID_X64[i])) { result_x64 = true; break; }
+ }
+ return result_x86 && result_x64;
+ }
+ else if (installBit == InstallBit.X86)
+ {
+ var result_x86 = false;
+ for (int i = 0; i < GUID_x86.Length; i++)
+ {
+ if (HaveInstallVc(GUID_x86[i])) { result_x86 = true; break; }
+ }
+ return result_x86;
+ }
+ else if (installBit == InstallBit.X64)
+ {
+ var result_x64 = false;
+ for (int i = 0; i < GUID_X64.Length; i++)
+ {
+ if (HaveInstallVc(GUID_X64[i])) { result_x64 = true; break; }
+ }
+ return result_x64;
+ }
+ return false;
+ }
+ ///
+ /// 判断是否已安装VC运行库
+ ///
+ ///
+ private static bool IsInstall_VC(InstallBit installBit,string vcdll,double min_softver,double min_rever)
+ {
+ if (Environment.Is64BitOperatingSystem)
+ {
+ if (installBit == InstallBit.All)
+ {
+ var path_x64 = RyFiles.GetRealPath(@"\"+ vcdll);
+ var path_x86 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x64) && System.IO.File.Exists(path_x86))
+ {
+ var ver_x64 = RySoft.GetVersionStr(path_x64);
+ RySoft.GetVerByVerStr(ver_x64, out var _softver_x64, out var _rever_x64);
+ var ver_x86 = RySoft.GetVersionStr(path_x86);
+ RySoft.GetVerByVerStr(ver_x86, out var _softver_x86, out var _rever_x86);
+ if (RySoft.CompareVer(min_softver, min_rever,_softver_x64, _rever_x64)>=0 && RySoft.CompareVer(min_softver, min_rever, _softver_x86, _rever_x86) >= 0)
+ {
+ return true;
+ }
+ }
+ }
+ else if (installBit == InstallBit.X86)
+ {
+ var path_x86 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x86))
+ {
+ var ver_x86 = RySoft.GetVersionStr(path_x86);
+ RySoft.GetVerByVerStr(ver_x86, out var _softver_x86, out var _rever_x86);
+ if (RySoft.CompareVer(min_softver, min_rever, _softver_x86, _rever_x86) >= 0)
+ {
+ return true;
+ }
+ }
+ }
+ else if (installBit == InstallBit.X64)
+ {
+ var path_x64 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x64))
+ {
+ var ver_x64 = RySoft.GetVersionStr(path_x64);
+ RySoft.GetVerByVerStr(ver_x64, out var _softver_x64, out var _rever_x64);
+ if (RySoft.CompareVer(min_softver, min_rever, _softver_x64, _rever_x64) >= 0)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ else
+ {
+ var path = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path))
+ {
+ var ver_x86 = RySoft.GetVersionStr(path);
+ RySoft.GetVerByVerStr(ver_x86, out var _softver_x86, out var _rever_x86);
+ if (RySoft.CompareVer(min_softver, min_rever, _softver_x86, _rever_x86) >= 0)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ ///
+ /// 判断是否已安装VC运行库
+ ///
+ ///
+ public static bool IsInstall_VC(InstallBit installBit, string vcdll)
+ {
+ if (Environment.Is64BitOperatingSystem)
+ {
+ if (installBit == InstallBit.All)
+ {
+ var path_x64 = RyFiles.GetRealPath(@"\"+ vcdll);
+ var path_x86 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x64) && System.IO.File.Exists(path_x86))
+ {
+ return true;
+ }
+ }
+ else if (installBit == InstallBit.X86)
+ {
+ var path_x86 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x86)) { return true; }
+ }
+ else if (installBit == InstallBit.X64)
+ {
+ var path_x64 = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path_x64)) { return true; }
+ }
+ }
+ else
+ {
+ var path = RyFiles.GetRealPath(@"\"+ vcdll);
+ if (System.IO.File.Exists(path)) { return true; }
+ }
+ return false;
+ }
+ ///
+ /// 安装状态
+ ///
+ private enum INSTALLSTATE
+ {
+ ///
+ /// 组件禁用
+ ///
+ INSTALLSTATE_NOTUSED = -7, // component disabled
+ ///
+ /// 配置数据已损坏
+ ///
+ INSTALLSTATE_BADCONFIG = -6, // configuration data corrupt
+ ///
+ /// 安装已暂停或正在进行
+ ///
+ INSTALLSTATE_INCOMPLETE = -5, // installation suspended or in progress
+ ///
+ /// 从源运行,源不可用
+ ///
+ INSTALLSTATE_SOURCEABSENT = -4, // run from source, source is unavailable
+ ///
+ /// 返回缓冲区溢出
+ ///
+ INSTALLSTATE_MOREDATA = -3, // return buffer overflow
+ ///
+ /// 无效的参数传递给该函数。
+ ///
+ INSTALLSTATE_INVALIDARG = -2, // invalid function argument
+ ///
+ /// 不公布或者未安装该产品。
+ ///
+ INSTALLSTATE_UNKNOWN = -1, // unrecognized product or feature
+ ///
+ /// 损坏
+ ///
+ INSTALLSTATE_BROKEN = 0, // broken
+ ///
+ /// 该产品已公布但尚未安装。
+ ///
+ INSTALLSTATE_ADVERTISED = 1, // advertised feature
+ ///
+ /// 正在移除的组件(操作状态,不可设置)
+ ///
+ INSTALLSTATE_REMOVED = 1, // component being removed (action state, not settable)
+ ///
+ /// 不同的用户安装该产品。
+ ///
+ INSTALLSTATE_ABSENT = 2, // uninstalled (or action state absent but clients remain)
+ ///
+ /// 安装在本地驱动器上
+ ///
+ INSTALLSTATE_LOCAL = 3, // installed on local drive
+ ///
+ /// 从源代码、CD或网络运行
+ ///
+ INSTALLSTATE_SOURCE = 4, // run from source, CD or net
+ ///
+ /// 为当前用户安装该产品。
+ ///
+ INSTALLSTATE_DEFAULT = 5, // use default, local or source
+ }
+ ///
+ /// 安装的版本,是x86还是x64,还是全部安装了
+ ///
+ public enum InstallBit
+ {
+ ///
+ /// 判断32位和64位运行库是否已安装
+ ///
+ All=0,
+ ///
+ ///判断32位运行库是否已安装
+ ///
+ X86 = 1,
+ ///
+ /// 判断64位运行库是否已安装
+ ///
+ X64 = 2
+ }
+ #endregion
+ ///
+ /// 判断是否已安装VC2005运行库
+ ///
+ ///
+ public static bool IsInstall_VC2005(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit,new string[] { "{A49F249F-0C91-497F-86DF-B2585E8E76B7}" },
+ new string[] { "{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}", "{ad8a2fa1-06e7-4b0d-927d-6e54b3d31028}" });
+ }
+ ///
+ /// 判断是否已安装VC2005SP1运行库
+ ///
+ ///
+ public static bool IsInstall_VC2005SP1(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit, "{7299052B-02A4-4627-81F2-1818DA5D550D}", "{071C9B48-7C32-4621-A0AC-3F809523288F}");
+ }
+ ///
+ /// 判断是否已安装VC2008运行库
+ ///
+ ///
+ public static bool IsInstall_VC2008(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit,new string[] { "{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}" },
+ new string[] { "{350AA351-21FA-3270-8B7A-835434E766AD}", "{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}" });
+ }
+ ///
+ /// 判断是否已安装VC2008SP1运行库
+ ///
+ ///
+ public static bool IsInstall_VC2008SP1(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit,new string[] { "{9A25302D-30C0-39D9-BD6F-21E6EC160475}", "{9BE518E6-ECC6-35A9-88E4-87755C07200F}" },new string[] { "{8220EEFE-38CD-377E-8595-13398D740ACE}" });
+ }
+ ///
+ /// 判断是否已安装VC2010运行库
+ ///
+ ///
+ public static bool IsInstall_VC2010(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit, "{196BB40D-1578-3D01-B289-BEFC77A11A1E}", "{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}");
+ }
+ ///
+ /// 判断是否已安装VC2010SP1运行库
+ ///
+ ///
+ public static bool IsInstall_VC2010SP1(InstallBit installBit)
+ {
+ return HaveInstallVc(installBit, "{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}", "{1D8E6291-B0D5-35EC-8441-6616F567A0F7}");
+ }
+ ///
+ /// 判断是否已安装VC2012运行库
+ ///
+ ///
+ public static bool IsInstall_VC2012(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "mfc110.dll");
+ }
+ ///
+ /// 判断是否已安装VC2013运行库
+ ///
+ ///
+ public static bool IsInstall_VC2013(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "mfc120.dll");
+ }
+ ///
+ /// 判断是否已安装VC2015或以上运行库
+ ///
+ ///
+ public static bool IsInstall_VC2015(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "vcruntime140.dll");
+ }
+ ///
+ /// 判断是否已安装VC2017运行库或以上运行库
+ ///
+ ///
+ public static bool IsInstall_VC2017(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "vcruntime140.dll", 14.16, 27024);
+ }
+ ///
+ /// 判断是否已安装VC2019运行库或以上运行库
+ ///
+ ///
+ public static bool IsInstall_VC2019(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "vcruntime140.dll", 14.22, 27821);
+ }
+ ///
+ /// 判断是否已安装VC2022运行库或以上运行库
+ ///
+ ///
+ public static bool IsInstall_VC2022(InstallBit installBit)
+ {
+ return IsInstall_VC(installBit, "vcruntime140.dll", 14.30, 30708);
+ }
+ ///
+ /// 判断当前系统是否安装了WebView2组件
+ ///
+ ///
+ public static bool IsInstall_WebView2()
+ {
+ if (Environment.Is64BitOperatingSystem)
+ {
+ var result1 = RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.LocalMachine,
+ Microsoft.Win32.RegistryView.Registry64, @"SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}");
+ var result2 = RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.CurrentUser,
+ Microsoft.Win32.RegistryView.Registry64, @"Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}");
+ return result1 || result2;
+ }
+ else
+ {
+ var result1 = RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.LocalMachine,
+ Microsoft.Win32.RegistryView.Registry32, @"SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}");
+ var result2 = RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.CurrentUser,
+ Microsoft.Win32.RegistryView.Registry32, @"Software\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}");
+ return result1 || result2;
+ }
+ }
+ ///
+ /// 判断当前系统是否安装了.NET 4.8
+ ///
+ ///
+ public static bool IsInstall_NET48()
+ {
+ if (Environment.Is64BitOperatingSystem)
+ {
+ return RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.LocalMachine,
+ Microsoft.Win32.RegistryView.Registry64, @"SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.8");
+ }
+ else
+ {
+ return RyRegedit.ExistKey(Microsoft.Win32.RegistryHive.LocalMachine,
+ Microsoft.Win32.RegistryView.Default, @"SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.8");
+ }
+ }
+ }
+}
diff --git a/Source/MyDb/SysFuns/RyRegedit.cs b/Source/MyDb/SysFuns/RyRegedit.cs
index 5af3caf..0049100 100644
--- a/Source/MyDb/SysFuns/RyRegedit.cs
+++ b/Source/MyDb/SysFuns/RyRegedit.cs
@@ -20,6 +20,33 @@ namespace ryCommon
///
public static RegistryHive RegRoot = RegistryHive.LocalMachine;
///
+ /// 判断注册表项是否存在
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static bool ExistKey(RegistryHive _RegRoot, RegistryView _UseSystemBit, string Path)
+ {
+ var result = false;
+ try
+ {
+ RegistryKey LMach = RegistryKey.OpenBaseKey(_RegRoot, _UseSystemBit);
+ RegistryKey softwareRun = LMach.OpenSubKey(Path, false);
+ if (softwareRun != null)
+ {
+ result = true;
+ }
+ softwareRun.Close();
+ LMach.Close();
+ return result;
+ }
+ catch
+ {
+ return result;
+ }
+ }
+ ///
/// 设置是否开机启动
///
/// 是否开机启动
diff --git a/Source/MyDb/SysFuns/RySystem.cs b/Source/MyDb/SysFuns/RySystem.cs
index 4bbce65..0bd4651 100644
--- a/Source/MyDb/SysFuns/RySystem.cs
+++ b/Source/MyDb/SysFuns/RySystem.cs
@@ -146,7 +146,7 @@ namespace ryCommon
return retVal;
}
///
- /// 获取系统
+ /// 获取系统名称,注意需要在app.manifest文件中设置兼容win10
///
///
public static string GetOSystemVer()
@@ -168,9 +168,11 @@ namespace ryCommon
case "6.3":
return "Windows8.1";
case "10.0":
- return "Windows10";
- case "10.1":
- return "Windows11";
+ if (System.Environment.OSVersion.Version.Build < 22000)
+ {
+ return "Windows10";
+ }
+ else { return "Windows11"; }
default:
return "未知";
}
diff --git a/Source/MyDb_MySQL/MyDb_MySQLV4.csproj b/Source/MyDb_MySQL/MyDb_MySQLV4.csproj
index 5cb9956..75a79ae 100644
--- a/Source/MyDb_MySQL/MyDb_MySQLV4.csproj
+++ b/Source/MyDb_MySQL/MyDb_MySQLV4.csproj
@@ -9,7 +9,7 @@
Properties
MyDb_MySQL
MyDb_MySQL
- v4.0
+ v4.5.2
512
@@ -23,6 +23,7 @@
4
AnyCPU
..\..\Bin\Debug\CommonControls\.NET4\MyDb_MySQL.xml
+ false
none
@@ -32,6 +33,7 @@
prompt
4
..\..\Bin\Release\CommonControls\.NET4\MyDb_MySQL.xml
+ false
diff --git a/Source/MyDb_MySQL/Properties/AssemblyInfo.cs b/Source/MyDb_MySQL/Properties/AssemblyInfo.cs
index 8ae7937..f0c4788 100644
--- a/Source/MyDb_MySQL/Properties/AssemblyInfo.cs
+++ b/Source/MyDb_MySQL/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("3.0.2109.1601")]
-[assembly: AssemblyFileVersion("3.0.2109.1601")]
\ No newline at end of file
+[assembly: AssemblyVersion("3.0.2201.1101")]
+[assembly: AssemblyFileVersion("3.0.2201.1101")]
\ No newline at end of file
diff --git a/Source/MyDb_MySQL/mySqlDataProvider.cs b/Source/MyDb_MySQL/mySqlDataProvider.cs
index 9e5e237..c2a25d7 100644
--- a/Source/MyDb_MySQL/mySqlDataProvider.cs
+++ b/Source/MyDb_MySQL/mySqlDataProvider.cs
@@ -15,7 +15,7 @@ namespace ryCommonDb
///
public class MySqlDataProvider:IDbInterface
{
- ClsMySQLDb myDb = new ClsMySQLDb();
+ readonly ClsMySQLDb myDb = new ClsMySQLDb();
///
///
///
@@ -195,7 +195,13 @@ namespace ryCommonDb
DataCommand cmd = myDb.SQL_cn.CreateCommand();
cmd.Parameters.Clear();
if (Parameter != null)
- cmd.Parameters.AddRange(Parameter);
+ {
+ for (int i = 0; i < Parameter.Length; i++)
+ {
+ cmd.Parameters.Add(Parameter[i]);
+ }
+ }
+ //cmd.Parameters.AddRange(Parameter);
cmd.CommandText = sql;
DataAdapter ad = new DataAdapter(cmd);
System.Data.DataSet ds=new System.Data.DataSet();
diff --git a/Source/MyDb_SQLite/MyDb_SQLiteV4.csproj b/Source/MyDb_SQLite/MyDb_SQLiteV4.csproj
index 294ca39..c2aa3e6 100644
--- a/Source/MyDb_SQLite/MyDb_SQLiteV4.csproj
+++ b/Source/MyDb_SQLite/MyDb_SQLiteV4.csproj
@@ -23,6 +23,7 @@
4
AnyCPU
..\..\Bin\Debug\CommonControls\.NET4\MyDb_SQLite.xml
+ false
none
@@ -34,6 +35,7 @@
AnyCPU
Auto
..\..\Bin\Release\CommonControls\.NET4\MyDb_SQLite.xml
+ false
diff --git a/Source/ryControls/Controls/PassWordText.Designer.cs b/Source/ryControls/Controls/PassWordText.Designer.cs
new file mode 100644
index 0000000..9950e47
--- /dev/null
+++ b/Source/ryControls/Controls/PassWordText.Designer.cs
@@ -0,0 +1,82 @@
+namespace PassWordManager
+{
+ partial class PassWordText
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // textBox1
+ //
+ this.textBox1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.textBox1.Location = new System.Drawing.Point(24, 1);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.PasswordChar = '*';
+ this.textBox1.Size = new System.Drawing.Size(155, 23);
+ this.textBox1.TabIndex = 0;
+ this.textBox1.Visible = false;
+ this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);
+ this.textBox1.Leave += new System.EventHandler(this.textBox1_Leave);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.label1.Location = new System.Drawing.Point(4, 4);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(14, 14);
+ this.label1.TabIndex = 1;
+ this.label1.Text = " ";
+ this.label1.Click += new System.EventHandler(this.label1_Click);
+ //
+ // PassWordText
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.Color.White;
+ this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label1);
+ this.Name = "PassWordText";
+ this.Size = new System.Drawing.Size(182, 25);
+ this.Load += new System.EventHandler(this.PassWordText_Load);
+ this.Click += new System.EventHandler(this.PassWordText_Click);
+ this.Leave += new System.EventHandler(this.PassWordText_Leave);
+ this.Resize += new System.EventHandler(this.PassWordText_Resize);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label1;
+ }
+}
diff --git a/Source/ryControls/Controls/PassWordText.cs b/Source/ryControls/Controls/PassWordText.cs
new file mode 100644
index 0000000..898fad5
--- /dev/null
+++ b/Source/ryControls/Controls/PassWordText.cs
@@ -0,0 +1,134 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace PassWordManager
+{
+ ///
+ /// 密码控件
+ ///
+ public partial class PassWordText : UserControl
+ {
+ ///
+ ///
+ ///
+ public PassWordText()
+ {
+ InitializeComponent();
+ }
+ private int isProUse = 0;
+ private string m_PassWord = "";
+ ///
+ /// 密码
+ ///
+ [Description("密码")]
+ public string PassWord
+ {
+ get { return m_PassWord; }
+ set
+ {
+ m_PassWord = value;
+ label1.Text = "";
+ for (int i = 0; i < m_PassWord.Length; i++)
+ {
+ label1.Text += "*";
+ }
+ }
+ }
+
+ private void label1_Click(object sender, EventArgs e)
+ {
+ EnterEditText();
+ }
+
+ private void textBox1_Leave(object sender, EventArgs e)
+ {
+
+ }
+
+ private void textBox1_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.KeyCode == Keys.Escape)
+ {
+ isProUse = 1;
+ textBox1.Visible = false;
+ }
+ else if (e.KeyCode == Keys.Enter)
+ {
+ isProUse = 1;
+ m_PassWord = textBox1.Text;
+ label1.Text = "";
+ for (int i = 0; i < m_PassWord.Length; i++)
+ {
+ label1.Text += "*";
+ }
+ textBox1.Visible = false;
+ }
+ }
+
+ private void PassWordText_Click(object sender, EventArgs e)
+ {
+ EnterEditText();
+ }
+
+ private void PassWordText_Load(object sender, EventArgs e)
+ {
+ textBox1.Width = Width;
+ textBox1.Left = 0;
+ textBox1.Top = 0;
+ Height = textBox1.Height;
+ label1.Top = (Height - label1.Height) / 2;
+ }
+ private void EnterEditText() //进入编辑框
+ {
+ textBox1.Clear();
+ textBox1.Visible = true;
+ try
+ {
+ textBox1.Focus();
+ }
+ catch { }
+ }
+ private void LeaveEditText() //离开编辑框
+ {
+ if (textBox1.Text == "")
+ {
+ }
+ else
+ {
+ m_PassWord = textBox1.Text;
+ label1.Text = "";
+ for (int i = 0; i < m_PassWord.Length; i++)
+ {
+ label1.Text += "*";
+ }
+ }
+ textBox1.Visible = false;
+ }
+ private void PassWordText_Resize(object sender, EventArgs e)
+ {
+ textBox1.Width = Width;
+ textBox1.Left = 0;
+ textBox1.Top = 0;
+ Height = textBox1.Height;
+ label1.Top = (Height - label1.Height) / 2;
+ }
+
+ private void PassWordText_Leave(object sender, EventArgs e)
+ {
+ if (isProUse == 0)
+ {
+ LeaveEditText();
+ }
+ else
+ {
+ isProUse = 0;
+ }
+ }
+
+ }
+}
diff --git a/Source/ryControls/Controls/PassWordText.resx b/Source/ryControls/Controls/PassWordText.resx
new file mode 100644
index 0000000..c7e0d4b
--- /dev/null
+++ b/Source/ryControls/Controls/PassWordText.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Source/ryControls/Controls/ctlMyPage.cs b/Source/ryControls/Controls/ctlMyPage.cs
index 8c4cdef..0bb9aaa 100644
--- a/Source/ryControls/Controls/ctlMyPage.cs
+++ b/Source/ryControls/Controls/ctlMyPage.cs
@@ -412,7 +412,9 @@ namespace MyPage
{
get
{
+ if (m_CurrPageIndex == 0) { m_CurrPageIndex = 1; }
int recordnum = m_PageSize * (m_CurrPageIndex - 1);
+ if (recordnum < 0) { recordnum = 0; }
string sxText;
if ((recordnum > 0) || (m_SQLText2 == ""))
{
@@ -428,6 +430,7 @@ namespace MyPage
}
else
{
+
sxText = m_SQLText2.Replace("{pagecount}", m_PageCount.ToString());
sxText = sxText.Replace("{recordcount}", m_RecordCount.ToString());
sxText = sxText.Replace("{pagesize}", m_PageSize.ToString());
diff --git a/Source/ryControls/Properties/Resources.Designer.cs b/Source/ryControls/Properties/Resources.Designer.cs
index 3908b51..ef01c5d 100644
--- a/Source/ryControls/Properties/Resources.Designer.cs
+++ b/Source/ryControls/Properties/Resources.Designer.cs
@@ -19,7 +19,7 @@ namespace ryControls.Properties {
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
diff --git a/Source/ryControls/ryControlsV4.csproj b/Source/ryControls/ryControlsV4.csproj
index 4a4f956..f3a1304 100644
--- a/Source/ryControls/ryControlsV4.csproj
+++ b/Source/ryControls/ryControlsV4.csproj
@@ -24,6 +24,7 @@
AnyCPU
..\..\Bin\Debug\CommonControls\.NET4\ryControls.xml
true
+ false
none
@@ -34,6 +35,7 @@
4
..\..\Bin\Release\CommonControls\.NET4\ryControls.xml
true
+ false
true
@@ -43,6 +45,7 @@
x86
prompt
MinimumRecommendedRules.ruleset
+ false
bin\x86\Release\
@@ -52,6 +55,7 @@
x86
prompt
MinimumRecommendedRules.ruleset
+ false
@@ -108,6 +112,12 @@
ContextMenuStripRichText.cs
+
+ UserControl
+
+
+ PassWordText.cs
+
UserControl
@@ -621,6 +631,9 @@
ctlMyPage.cs
+
+ PassWordText.cs
+
ctMsgList.cs