Поместите программу в системном лотке при запуске

Следуя решению @ TaylorWood , вы можете выразить обе свои функции более кратко, хотя я не уверен, что краткие версии так же ясны.

Ваша create-contest функция map проверяет каждое число i, чтобы узнать, является ли оно одним . Лучше просто поменять на напрямую. Для этого нам нужен вектор, который, я думаю, вы все равно захотите найти при моделировании игры:

 (defn create-contest [n]
  (assoc (vec (repeat n :closed)) (rand-int n) :car))

Ваша функция create-doors многократно передает один и тот же аргумент своему map ' с функцией. Вы можете использовать repeatedly на закрытии, чтобы получить тот же эффект:

(defn create-doors [doors contests]
  (repeatedly contests (partial create-contest doors)))

или

(defn create-doors [doors contests]
  (repeatedly contests #(create-contest doors)))

16
задан thomasb 12 November 2008 в 11:29
поделиться

7 ответов

В Вашей основной программе у Вас, вероятно, есть строка формы:

Application.Run(new Form1());

Это вынудит форму быть показанной. Необходимо будет создать форму, но не передача это к Application.Run:

Form1 form = new Form1();
Application.Run();

Примечание, которое теперь не завершит программа, пока Вы не будете звонить Application.ExitThread(). Лучше делать это от обработчика для FormClosed событие.

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.ExitThread();
}
26
ответ дан 30 November 2019 в 16:01
поделиться

это - то, как Вы делаете это

static class Program
{
    [STAThread]
    static void Main()
    {
        NotifyIcon icon = new NotifyIcon();
        icon.Icon = System.Drawing.SystemIcons.Application;
        icon.Click += delegate { MessageBox.Show("Bye!"); icon.Visible = false; Application.Exit(); };
        icon.Visible = true;
        Application.Run();
    }
}
13
ответ дан 30 November 2019 в 16:01
поделиться

Если Вы используете NotifyIcon, попытайтесь изменить ShowInTaskbar на ложь.

Для удаления его из экрана Alt+Tab попытайтесь изменить стиль границы окна; я полагаю, что некоторые стили окна инструментов не появляются...

что-то как:

using System;
using System.Windows.Forms;
class MyForm : Form
{
    NotifyIcon sysTray;

    MyForm()
    {
        sysTray = new NotifyIcon();
        sysTray.Icon = System.Drawing.SystemIcons.Asterisk;
        sysTray.Visible = true;
        sysTray.Text = "Hi there";
        sysTray.MouseClick += delegate { MessageBox.Show("Boo!"); };

        ShowInTaskbar = false;
        FormBorderStyle = FormBorderStyle.SizableToolWindow;
        Opacity = 0;
        WindowState = FormWindowState.Minimized;
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new MyForm());
    }
}

, Если это все еще появляется в Alt+Tab, можно изменить стили окна через p/invoke (немного hackier):

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    IntPtr handle = this.Handle;
    int currentStyle = GetWindowLong(handle, GWL_EXSTYLE);
    SetWindowLong(handle, GWL_EXSTYLE, currentStyle | WS_EX_TOOLWINDOW);
}
private const int GWL_EXSTYLE = -20, WS_EX_TOOLWINDOW = 0x00000080;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr window, int index, int value);
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr window, int index);
3
ответ дан 30 November 2019 в 16:01
поделиться

Как что-то вроде cludge, Вы могли настроить ярлык, который запускает Ваше приложение для "выполнения минимизированный"? Это могло бы дать Вам, в чем Вы нуждаетесь!

Как так: (отобразите просто пример от Google)...

Run Minimized
(источник: unixwiz.net )

2
ответ дан 30 November 2019 в 16:01
поделиться

Так как это было отмечено с vb.net, вот то, что я сделал в службе Windows и Приложении контроллера, которое я только что закончил, Добавьте модуль кода к проекту, Установка NotifyIcon, и это связало Контекстное меню в Основном Sub (), и затем установило Объект Запуска приложения на Основное Sub () вместо Формы.

Public mobNotifyIcon As NotifyIcon
Public WithEvents mobContextMenu As ContextMenu

Public Sub Main()

    mobContextMenu = New ContextMenu
    SetupMenu()
    mobNotifyIcon = New NotifyIcon()
    With mobNotifyIcon
        .Icon = My.Resources.NotifyIcon
        .ContextMenu = mobContextMenu
        .BalloonTipText = String.Concat("Monitor the EDS Transfer Service", vbCrLf, "Right click icon for menu")
        .BalloonTipIcon = ToolTipIcon.Info
        .BalloonTipTitle = "EDS Transfer Monitor"
        .Text = "EDS Transfer Service Monitor"
        AddHandler .MouseClick, AddressOf showBalloon
        .Visible = True
    End With
    Application.Run()
End Sub

Private Sub SetupMenu()
    With mobContextMenu

        .MenuItems.Add(New MenuItem("Configure", New EventHandler(AddressOf Config)))
        .MenuItems.Add("-")
        .MenuItems.Add(New MenuItem("Start", New EventHandler(AddressOf StartService)))
        .MenuItems.Add(New MenuItem("Stop", New EventHandler(AddressOf StopService)))
        .MenuItems.Add("-")
        .MenuItems.Add(New MenuItem("Exit", New EventHandler(AddressOf ExitController)))
    End With
    GetServiceStatus()
End Sub

В Конфигурации (), я создаю экземпляр своей формы и отображаю его.

Private Sub Config(ByVal sender As Object, ByVal e As EventArgs)
    Using cs As New ConfigureService
        cs.Show()
    End Using

End Sub
1
ответ дан 30 November 2019 в 16:01
поделиться

Здесь Вы идете:

Создают 2 класса, 1, который наследовался ApplicationContext. Другое единственное содержит Основную стандартную программу. Я сделал пример, который имеет форму и notifyicon, который, когда дважды щелкнуто поднимает форму и назад снова.

Не забывают устанавливать "Sub, Основной" как Ваш объект запуска в настройках My Project и указывать на реальный *.ico файл вместо f:\TP.ico..:)

Код должен, конечно, быть наполнен надлежащим кодом обработки ошибок.

Class1:

Imports System.threading 
Imports System.Runtime.InteropServices 
Imports System.Windows.Forms


Public Class Class1

    <System.STAThread()> _
        Public Shared Sub Main()

        Try
            System.Windows.Forms.Application.EnableVisualStyles()
            System.Windows.Forms.Application.DoEvents()
            System.Windows.Forms.Application.Run(New Class2)
        Catch invEx As Exception

            Application.Exit()

        End Try


    End Sub 'Main End Class 

Class2:

Imports System.Windows.Forms  
Imports System.drawing

Public Class Class2
    Inherits System.Windows.Forms.ApplicationContext

    Private WithEvents f As New System.Windows.Forms.Form
    Private WithEvents nf As New System.Windows.Forms.NotifyIcon

    Public Sub New()

        f.Size = New Drawing.Size(50, 50)
        f.StartPosition = FormStartPosition.CenterScreen
        f.WindowState = Windows.Forms.FormWindowState.Minimized
        f.ShowInTaskbar = False
        nf.Visible = True
        nf.Icon = New Icon("f:\TP.ico")
    End Sub


    Private Sub nf_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) Handles nf.DoubleClick
        If f.WindowState <> Windows.Forms.FormWindowState.Minimized Then
            f.WindowState = Windows.Forms.FormWindowState.Minimized
            f.Hide()
        Else
            f.WindowState = Windows.Forms.FormWindowState.Normal
            f.Show()
        End If
    End Sub

    Private Sub f_FormClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs) Handles f.FormClosed
        Application.Exit()
    End Sub  End Class
0
ответ дан 30 November 2019 в 16:01
поделиться

Это показывает Вам, как управлять запуском, как минимизировано или нормальный, а также намного больше с NotifyIcon.

Больше здесь: http://code.msdn.microsoft.com/TheNotifyIconExample

0
ответ дан 30 November 2019 в 16:01
поделиться