工作助手VB开发笔记(2)

news2024/11/27 12:37:05

今天继续讲功能

2.功能

2.9开机自启

设置程序随windows系统启动,其实就是就是将程序加载到注册表

    Public Sub StartRunRegHKLM()
        REM HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Run
        'Dim strName As String = Application.StartupPath + "\" + Application.ProductName + ".exe"
        Dim strName As String = "E:\2024\工作助手WPF\工作助手WPF\bin\Debug\net8.0-windows\工作助手WPF.exe"
        Dim strNewName As String = System.IO.Path.GetFileNameWithoutExtension(strName)
        If Not System.IO.File.Exists(strName) Then Return
        Try
            Dim Rkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", True)
            If IsNothing(Rkey) Then
                Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
                Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行.
            Else
                Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行。 
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "StartRun") ' //MessageBox.Show(ex.Message);
        End Try
    End Sub
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

如果发现注册表中有此程序,说明注册成功,重启电脑,开机自启成功

考虑到用户会想要关闭开机自启,引入一个checkbox,同时该控件在弹窗中呈现,弹窗也要时圆角,所以xmal中在button下方添加

                <Popup x:Name="myPopup" Placement="Center" AllowsTransparency="True" StaysOpen="False">
                    <Border x:Name="PopupBorder" Background="White" BorderThickness="1" CornerRadius="10" Margin="5">
                        <StackPanel  Margin="20,0,0,0" Orientation="Vertical">
                            <TextBlock Text="This is a popup window." Margin="2"/>
                            <!--Add more content here if needed-->
                            <CheckBox x:Name="CheckBox1" Content="开机自启" HorizontalAlignment="Left" Margin="2,2,0,0" VerticalAlignment="Top" Checked="CheckBox_Checked" Unchecked="CheckBox_unChecked"/>
                        </StackPanel>
                    </Border>
                </Popup>

在vb.net中添加唤起popup弹窗

    Sub btn_close_Click()
        Debug.WriteLine("hello")
        myPopup.IsOpen = True ' 设置Popup的是否打开
        myPopup.VerticalOffset = -20 ' 设置垂直偏移量
        myPopup.HorizontalOffset = -20 ' 设置水平偏移量
    End Sub

添加checkbox对应的功能

    Private Sub CheckBox_Checked(sender As Object, e As RoutedEventArgs)
        'Debug.WriteLine("checked")
        Dim strName As String = "E:\2024\工作助手WPF\工作助手WPF\bin\Debug\net8.0-windows\工作助手WPF.exe"
        Dim strNewName As String = System.IO.Path.GetFileNameWithoutExtension(strName)
        If Not System.IO.File.Exists(strName) Then Return
        Try
            Dim Rkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", True)
            If IsNothing(Rkey) Then
                Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
            End If
            Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行.
            Rkey.Close() '后加的,关闭注册表
        Catch ex As Exception
            MessageBox.Show(ex.Message, "StartRun") ' //MessageBox.Show(ex.Message);
        End Try
    End Sub
    Private Sub CheckBox_unChecked(sender As Object, e As RoutedEventArgs)
        'Debug.WriteLine("unchecked")
        Dim strName As String = "E:\2024\工作助手WPF\工作助手WPF\bin\Debug\net8.0-windows\工作助手WPF.exe"
        Dim strNewName As String = System.IO.Path.GetFileNameWithoutExtension(strName)
        If Not System.IO.File.Exists(strName) Then Return
        Try
            Dim Rkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", True)
            If IsNothing(Rkey) Then
                Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
            End If
            Rkey.DeleteValue(strNewName) '删除注册表,使程序开机时自动执行.
            Debug.WriteLine(strNewName)
            Rkey.Close() '后加的,关闭注册表
        Catch ex As Exception
            MessageBox.Show(ex.Message, "StartRun") ' //MessageBox.Show(ex.Message);
        End Try
    End Sub

 popup默认以button的底部为起点,偏移以此为基础,下面链接介绍popup的放置行为:

Popup 放置行为 - WPF .NET Framework | Microsoft Learn

对样式进行以下修改

如果margin只有一个值,表示上右下左的margin同为这个值。例如:margin:10px; 就等于 margin:10px 10px 10px 10px;

如果 margin 只有两个值,第一个值表示上下margin值,第二个值为左右margin的值。例如:margin:10px 20px; 就等于 margin:10px 20px 10px 20px;

如果margin有三个值,第一个值表示上margin值,第二个值表示左右margin的值,第三个值表示下margin的值。例如:margin:10px 20px 30px; 就等于 margin:10px 20px 30px 20px;

如果margin有四个值,那这四个值分别对应左上右下这四个margin值。例如:margin:10px 20px 30px 40px;

2.10由于由于要保存checkbox的状态,所以引入数据库,由于以前用过access数据库

添加引用Imports System.Data.OleDb

    Sub Main()
        ' 连接字符串
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\2024\工作助手WPF\工作助手WPF\自动BOM数据库.accdb;"
        ' 创建连接对象
        Dim connection As New OleDbConnection(connectionString)
        Try
            ' 打开数据库连接
            connection.Open()
            ' 连接成功,可以执行其他操作
            ' ...
        Catch ex As Exception
            ' 连接失败,处理异常
            Console.WriteLine("连接数据库失败:" + ex.Message)

        Finally
            ' 关闭数据库连接
            connection.Close()
        End Try
    End Sub

Dim connection As New OleDbConnection(connectionString)此处一直报错:未定义类型“OleDbConnection”

改为Dim connection As  OleDbConnection后VS提示安装System.Data.OleDb,原来时这个包没有安装,安装后错误解除。以下是操作数据库的

    Sub InsertAccess()
        ' 定义连接字符串,指向你的Access数据库文件
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\database.accdb"
        Dim query As String = "INSERT INTO 参数设置 (参数名, 值) VALUES (@value1, @value2)"
        Using connection As New OleDbConnection(connectionString)
            Dim command As New OleDbCommand(query, connection)
            ' 添加参数到命令
            command.Parameters.AddWithValue("@value1", "YourValue1")
            command.Parameters.AddWithValue("@value2", "YourValue2")

            ' 打开连接,执行命令,关闭连接
            connection.Open()
            command.ExecuteNonQuery()
            connection.Close()
        End Using
    End Sub
    Public Sub ModifyDataInAccess()
        ' 定义连接字符串,指向你的Access数据库文件
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\database.accdb"
        Using connection As New OleDbConnection(connectionString) ' 创建连接对象
            connection.Open() ' 打开连接
            Dim commandText As String = "UPDATE yourTable SET ColumnName = @value WHERE ConditionColumn = @conditionValue" ' 创建SQL修改命令
            Using command As New OleDbCommand(commandText, connection) ' 添加参数到命令
                command.Parameters.AddWithValue("@value", "newValue") ' 新值
                command.Parameters.AddWithValue("@conditionValue", "conditionValue") ' 条件值
                Dim rowsAffected As Integer = command.ExecuteNonQuery() ' 执行命令
                Console.WriteLine("Rows Affected: " & rowsAffected) ' 输出影响的行数
            End Using
            connection.Close() ' 关闭连接
        End Using
    End Sub

    Public Sub ReadDataFromAccess()
        'C:\database.accdb
        './database.accdb
        Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\database.accdb"
        Dim query As String = "SELECT * FROM 参数设置"
        Using connection As New OleDbConnection(connectionString)
            Dim command As New OleDbCommand(query, connection)
            connection.Open()
            Using reader As OleDbDataReader = command.ExecuteReader()
                While reader.Read()
                    ' 处理每一行数据
                    ' 例如:
                    MsgBox(reader(1).ToString())
                End While
            End Using
            connection.Close()
        End Using
    End Sub

3.exe打包,如何把数据库打包进exe,先参考第三节VS 程序打包成一个独立的exe - Enigma Virtual Box-CSDN博客

 想要把数据库打包进exe,参考以下设置

至此,一个exe文件就能实现:无锯齿无边框窗口,贴边隐藏,开机自启,自带数据库。在下面一段时间里,将做一些设置中的一些功能,比如开机自启后,打开客户自定义的一些文件,登录网页,代办事项等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1897345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效任务分配的常见7步法

高效的任务分配有助于优化资源配置&#xff0c;提升开发效率与质量&#xff0c;降低成本和项目风险&#xff0c;最终提高客户满意度。如果任务分配不合理&#xff0c;可能导致资源浪费&#xff0c;造成项目延期和成本超支&#xff0c;影响工作质量&#xff0c;增加项目风险。 因…

内核错误定位

内核打印出如下&#xff1a; 在代码目录输入&#xff1a; ./prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb kernel/vmlinux 进入gdb 命令模式 输入 l *(rk628_csi_probe0xf0) 能定位到出现问题地方。 最后就…

Netty学习(Netty入门)

概述 Netty是什么 Netty的地位 Netty的优势 HelloWorld public class HelloClient {public static void main(String[] args) throws InterruptedException {// 1. 启动类new Bootstrap()// 2. 添加 EventLoop.group(new NioEventLoopGroup())// 3. 选择客户端 channel 实现.…

lua入门(1) - 基本语法

本文参考自&#xff1a; Lua 基本语法 | 菜鸟教程 (runoob.com) 需要更加详细了解的还请参看lua 上方链接 交互式编程 Lua 提供了交互式编程模式。我们可以在命令行中输入程序并立即查看效果。 Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用&#xff1a; 如下图: 按…

【车载开发系列】J-Link/JFlash 简介与驱动安装方法

【车载开发系列】J-Link/JFlash 简介与驱动安装方法 【车载开发系列】J-Link/JFlash 简介与驱动安装方法 【车载开发系列】J-Link/JFlash 简介与驱动安装方法一. 软件介绍二. 下载安装包二. 开始安装三. 确认安装四. J-Flash的使用 一. 软件介绍 J-Link是SEGGER公司为支持仿真…

springboot校园安全通事件报告小程序-计算机毕业设计源码02445

Springboot 校园安全通事件报告小程序系统 摘 要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;校园安全通事件报告小程序系统更是深得消费者的喜爱&#xff0c;它的出现极大…

Debug-017-elementUI-el-cascader组件首次选择选项不触发表单的自定义校验

前情提要&#xff1a; 今天维护一个表单校验的时候发现一件事情&#xff0c;就是在表单中使用了 el-cascader组件&#xff0c;希望根据接口返回数据去动态校验一下这里面的选项&#xff0c;符合逻辑就通过自定义的表单校验&#xff0c;不符合就在这一项的下面标红提示。做的时候…

Mean teacher are better role models-论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/pdf/1703.01780 3.数据集地址 CIFAR-10 https://www.cs.utoronto.ca/~kriz/cifar.html 论文摘要的翻译 最近提出的Temporal Ensembling方法在几个半监督学习基准中取得了最先进的结果。它维护每个训练样本的标签…

C语言图书馆管理系统(管理员版)

案例&#xff1a;图书馆管理系统&#xff08;管理员版&#xff09; 背景&#xff1a; 随着信息技术的发展和普及&#xff0c;传统的图书馆管理方式已经无法满足现代图书馆高效、便捷、智能化的管理需求。传统的手工登记、纸质档案管理不仅耗时耗力&#xff0c;而且容易出现错…

RT-Thread Studio与CubeMX联合编程之rtthread启动

看到了好多文章&#xff0c;在rtthread studio中启用mx&#xff0c;后总是复制mx相关msp函数到rt的board.c文件下&#xff0c;实际使用过程中发现并不需要&#xff0c;这里我们看下rt启动流程&#xff0c;看下到底需要不。 1.打开startup_stm32h743xx.S文件&#xff0c;看下芯片…

区块链技术如何改变供应链管理?

引言 供应链管理在现代商业中扮演着至关重要的角色&#xff0c;确保产品和服务从原材料到最终消费者的顺利流转。然而&#xff0c;当前的供应链管理面临诸多挑战&#xff0c;如信息不透明、数据篡改和效率低下等问题&#xff0c;这些问题严重制约了供应链的整体效能和可信度&am…

用kimi和claude自动生成时间轴图表

做时间轴图表并不难&#xff0c;但是很麻烦&#xff0c;先要大量收集相关事件&#xff0c;然后在一些图表软件中反复调整操作。现在借助AI工具&#xff0c;可以自动生成了。 首先&#xff0c;在kimi中输入提示词来获取某个企业的大事记&#xff1a; 联网检索&#xff0c;元语…

【专业指南】移动硬盘坏道下的数据恢复之道

移动硬盘坏道揭秘&#xff1a;数据安全的隐形挑战 在数据日益成为核心资产的今天&#xff0c;移动硬盘作为便携存储的代名词&#xff0c;承载着无数用户的重要信息。然而&#xff0c;随着使用时间的增长和不当操作的影响&#xff0c;移动硬盘可能会遭遇“坏道”这一棘手问题。…

14-30 剑和诗人4 – 具有长上下文窗口的微调 LLM 的数据设计

LLM 中的长上下文窗口的挑战 微调大型语言模型 (LLM) 面临的最大挑战之一在于处理较长的上下文窗口。LLM 经过大量文本数据训练&#xff0c;能够理解和生成类似人类的语言。然而&#xff0c;在推理过程中&#xff0c;这些模型的上下文窗口有限&#xff0c;通常约为 2,048 个标…

基于MCU平台的HMI开发的性能优化与实战(下)

继上篇《基于MCU平台的HMI开发的性能优化与实战&#xff08;上&#xff09;》深入探讨了提升MCU平台HMI开发效率和应用性能的策略后&#xff0c;本文将专注于NXP i.MX RT1170 MCU平台的仪表盘开发实践。我们将重点介绍Qt for MCUs的优化技巧&#xff0c;展示如何通过实际案例应…

三、分布式软总线的架构设计

软总线的主要架构如下&#xff1a; 软总线主体功能分为发现、组网、连接和传输四个基本模块&#xff0c;实现&#xff1a; 即插即用&#xff1a;快速便捷发现周边设备。 自由流转&#xff1a;各设备间自组网&#xff0c;任意建立业务连接&#xff0c;实现自由通信。 高效传…

Ubuntu 22.04远程自动登录桌面环境

如果需要远程自动登录桌面环境&#xff0c;首先需要将Ubuntu的自动登录打开&#xff0c;在【settings】-【user】下面 然后要设置【Sharing】进行桌面共享&#xff0c;Ubuntu有自带的桌面共享功能&#xff0c;不需要另外去安装xrdp或者vnc之类的工具了 点开【Remote Desktop】…

Zerotier+Parsec五分钟实现外网远程访问校园或公司内网

0 需求 校园网或公司内网是不能直接通过远程控制桌面软件访问的&#xff0c;想要实现&#xff0c;就必须通过三方的服务来实现穿透内网。但是这样的缺点就是存在延迟。 1 安装软件 &#xff08;1&#xff09;Zerotier 是内网穿透软件&#xff0c;在两台设备上都要安装&#…

LabVIEW图像分段线性映射

介绍了如何使用LabVIEW对图像进行分段线性映射处理&#xff0c;通过对特定灰度值区间进行不同的线性映射调整&#xff0c;以优化图像的显示效果。案例中详细展示了如何配置和使用LabVIEW中的图像处理工具&#xff0c;包括设置分段区间、计算映射参数和应用映射函数等步骤。 实…

我独立开发生涯的第一个商业化产品 - 微寻

2024 年 04 月 27 日晚八点&#xff0c;微寻 终于正式上线了。时隔一周&#xff0c;我在五一假期的最后一天写下此文&#xff0c;以纪念这款我独立开发生涯的第一个商业化产品。 1. 何为微寻 微寻 为个人网站提供微信码登录 能力。 没错&#xff0c;微寻 是一个小型 SaaS&am…