Kyle_Forward Ответов: 1

Запустите форму в трее приложения из ярлыка рабочего стола


Я довольно новичок в VB и программировании в целом, и мне бы не помешало небольшое руководство. Я смог построить свое приложение так, как я хочу, но мне просто нужна еще одна часть.

Есть ли способ запустить определенную форму в моем проекте из ярлыка на рабочем столе?
В приложении Трея есть 5 форм, и я хотел бы иметь возможность запустить одну из них, в частности, из ярлыка на рабочем столе.
Разве это возможно? Если да, то с чего мне начать?

Заранее спасибо!

Что я уже пробовал:

Я не смог найти ничего конкретного по своему вопросу, и это может быть связано с неправильной формулировкой...

Я нашел некоторый код (по-моему, на CodeProject), как показано ниже. Это бесформенное приложение для лотка, которое, как мне кажется, я и хотел. Что касается таймера, я не был уверен, что он мне нужен, и он прекрасно работает без него.
Вот код модуля, который я использую. Как бы я вписал этот ответ в свой код? [Помнить... Я же нуб! (как бы мне ни было неприятно это признавать)]

<pre>Imports Microsoft.Win32

Module Module1
    Private MyNotifyIcon As NotifyIcon          'ICON IN SYSTEM TRAY COMPONENT
    Private MyContextMenu As ContextMenu        'CONTEXT MENU WHEN ITEM IS CLICKED ON
    'Private MyTimer As Timer
    Private WithEvents Tray As NotifyIcon

    Public Sub Main()

        Registry.SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", Application.ProductName, Application.ExecutablePath, RegistryValueKind.String)


        'CREATE INSTANCES OF OBJECTS WE NEED
        MyNotifyIcon = New NotifyIcon
        MyContextMenu = New ContextMenu
        'MyTimer = New Timer

        MyNotifyIcon.Icon = My.Resources.ecmsi       'SET AN ICON (ICON IS A RESOURCE IN THE PROJECT)
        MyNotifyIcon.Visible = True                 'SET VISIBLE

        'ADD CAPTIONS AND EVENT HANDLERS FOR ITEMS IN CONTEXT MENU
        MyContextMenu.MenuItems.Add("&Support Ticket", AddressOf Ticket)
        MyContextMenu.MenuItems.Add("Quick Self-Help", AddressOf SelfHelp)
        MyContextMenu.MenuItems.Add("Instant Support", AddressOf Support)
        MyContextMenu.MenuItems.Add("System Information", AddressOf SysInfo)
        MyContextMenu.MenuItems.Add("-")
        MyContextMenu.MenuItems.Add("About", AddressOf About)
        'MyContextMenu.MenuItems.Add("-")
        'MyContextMenu.MenuItems.Add("Exit", AddressOf ExitApplication)
        If (Control.ModifierKeys = Keys.Shift) Then
            MyContextMenu.MenuItems.Add("Tools", AddressOf Tools)
        End If

        MyNotifyIcon.ContextMenu = MyContextMenu        'ASSIGN CONTEXT MENU TO ICON

        'SETUP TIMER
        'MyTimer = New Timer
        'MyTimer.Interval = 10000 '10 seconds
        'MyTimer.Start()
        'AddHandler MyTimer.Tick, AddressOf Timer_Tick

        'CREATE A MESSAGE LOOP WITH NO FORM, OTHERWISE THE APPLICATION WOULD EXIT RIGHT AWAY
        Application.Run()

    End Sub

    'DELEGATE SUB TO EXIT APPLICATION
    Private Sub ExitApplication(ByVal sender As Object, ByVal e As EventArgs)
        'CLEAN UP YOUR OBJECTS
        'MyTimer.Stop()
        'MyTimer.Dispose()
        MyContextMenu.Dispose()
        MyNotifyIcon.Dispose()

        'EXIT APPLICATION LOOP
        Application.Exit()
    End Sub

    'SysInfo form
    Private Sub SysInfo(ByVal sender As Object, ByVal e As EventArgs)
        Dim SysInfo As New formSysInfo
        SysInfo.Show()
    End Sub

    'Self Help form
    Private Sub SelfHelp(ByVal sender As Object, ByVal e As EventArgs)
        Dim Tools As New formTools
        formTools.Show()
    End Sub

    'Support form
    Private Sub Support(ByVal sender As Object, ByVal e As EventArgs)
        Process.Start("https://weblink.com")
    End Sub

    'Ticket form
    Private Sub Ticket(ByVal sender As Object, ByVal e As EventArgs)
        Dim Ticket As New formTicket
        formTicket.Show()
    End Sub

    'Double Click Action
    Private Sub Tray_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseButtons)
        formTicket.Show()
    End Sub

    Private Sub ECMSI_Tray_DBLClk(sender As Object, e As EventArgs) Handles ECMSI_Tray.DoubleClick
        'Private Sub Tray_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ECMSI_Tray.DoubleClick
        formTicket.Show()
    End Sub

    'About form
    Private Sub About(ByVal sender As Object, ByVal e As EventArgs)
        Dim About As New formAbout
        formAbout.Show()
    End Sub

    'Hidden Tools Menu
    Private Sub Tools(ByVal sender As Object, ByVal e As EventArgs)
        Process.Start("C:\DIR1\DIR2\App.exe")
    End Sub


    'DELEGATE TO HANDLE TIMER TICKING
    'Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
    'MyTimer.Stop()
    'MessageBox.Show("Timer Ticked")
    'MyTimer.Start()
    'End Sub
End Module

1 Ответов

Рейтинг:
0

Richard MacCutchan

Если вы создадите ярлык на рабочем столе, вы можете отредактировать его, чтобы добавить параметры, которые передаются приложению при его запуске. Вам нужно, чтобы ваше приложение проверяло любые параметры и обращалось с ними соответствующим образом. Видеть Окружающая среда.Метод GetCommandLineArgs (Система) | Microsoft Docs[^] о том, как получить параметры в вашем стартапе.


Maciej Los

5ed!