我正在尝试学习如何使用原始的Win32 API,并按照这里的教程进行学习,但是我弄不清楚如何传递 int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
函数签名。我确实理解 int WINAPI
不需要...但是如何将所有这些参数传递给WinAPI调用呢?特别是hInstance和nCmdShow?
我的目标
从中获取hInstance和nShowCmd。
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {}
将其嵌入到Rust程序中,可能类似于以下内容:
fn main(/* args, such as hInstance, nShowCmd here /*) {
}
或者,更有可能的方法:
fn main() {
std::env::/* hopefully something like args() /*;
}
我尝试过的方法
我尝试获取参数,但这只是传递了我用于启动程序的命令行参数,args[0] 是程序的名称,这是预期行为。同时调用 args_os() 也会得到同样的结果。
我还尝试设置窗口子系统,但之前的行为仍然相同,不是期望的行为...
#![windows_subsystem = "windows"]
我可以通过手动调用 GetModuleHandle()
并传入 null 指针来获取 hInstance 句柄,但不知道如何手动获取 nShowCmd。
重要提示
我正在使用 windows crate,这是我想要使用的内容。
任何对这个问题的帮助都将不胜感激!
P.S. 我的窗口确实打开了,并且一切正常,包括与 FFI 一起工作和所有涉及其中的疯狂操作,哈哈。但我只是想了解这是如何完成的。没有 nShowCmd 也可以过得去,但我真的很想能够理解如何在 Rust 中完成这些操作。我还不能重写 fn main()
函数签名,因此不确定该怎么做。
nCmdShow
的一种有用方式是在创建exe
的快捷方式时,您可以选择窗口的启动方式,如最小化、正常等。 - Jose QuesadaShowWindow()
时,忽略传递的标志,并使用STARTUPINFO
中的标志。您只需传递SW_SHOW
即可,仍然可以让系统应用存储在快捷方式中的设置。 - IInspectable