4

我有一个使用 Windows 窗体的 f# 脚本,我希望它在不显示控制台窗口 (fsi.exe) 的情况下运行。有可能吗?怎么做?下面是一个脚本示例。控制台窗口截图

#r "mscorlib.dll"
#r "System.dll"

open System.IO
open System.Windows.Forms

let DoUsefulThing() = ()

let form = new Form()
let button = new Button(Text = "Do useful thing")
button.Click.AddHandler(fun _ _ -> DoUsefulThing())

form.Controls.Add(button)
form.ShowDialog()
4

3 回答 3

10

作为一种选择,您可以 PInvoke 并隐藏控制台窗口

#r "mscorlib.dll"
#r "System.dll"

open System.IO
open System.Windows.Forms

module FSI =
    [<System.Runtime.InteropServices.DllImport("user32.dll")>]
    extern bool ShowWindow(nativeint hWnd, int flags)
    let HideConsole() = 
        let proc = System.Diagnostics.Process.GetCurrentProcess()
        ShowWindow(proc.MainWindowHandle, 0)

FSI.HideConsole()

let DoUsefulThing() = ()


let form = new Form()
let button = new Button(Text = "Do useful thing")
button.Click.AddHandler(fun _ _ -> DoUsefulThing())

form.Controls.Add(button)
form.ShowDialog()
于 2012-04-11T07:10:19.097 回答
5

fsc使用并编译成.exe不会显示控制台窗口的此类任务不是真正的答案。

我不认为fsi它是为你想要做的事情而设计的

于 2012-04-11T08:16:09.270 回答
0

我猜你想运行 F# 可执行文件而不是脚本。在这种情况下,使用 Visual Studio(我使用的是 2017)创建 F# 控制台应用程序,并在 Project => Properties 中将输出类型设置为 Windows 应用程序(将编译器目标设置为 winexe)。

于 2017-05-15T19:30:32.103 回答