我正在完成一键即时访问声音的程序。
我希望通过单击已保存项目的文件,该文件会在我的程序中打开,但是如何实现它以便程序获取文件的路径?
如果我没有关闭控制台,那将是可能的,这就是答案,
int main(int count, char *arg[])
{
// arg[0] Адрес программы
// arg[1] то что нужно файл через который программа была открыта
// или адрес на то что пытались открыть с помощью этой параграммы
}
但是我关闭了控制台,现在这不是通过参数实现的。
使用以下设置禁用控制台。
因此,我使用禁用控制台的 C++ 窗口库 glfw 来使用我的程序打开文件。
或者至少告诉我这个技术叫什么,比如我之前不知道把文件拖到窗口里叫拖放,所以搜索起来很困难。
如果有人需要它。像这样组织的。感谢你的回答。
std::string arg = GetCommandLineA();
std::vector<std::string> Masiv;
bool tumbler = 0;
std::string Stemp = "";
while(arg.size() > 0)
{
if(arg[0] == '"')
{
tumbler = !tumbler;
if(tumbler == 0)
{
Masiv.push_back(Stemp);
Stemp = "";
}
}
if(tumbler)
{
if(arg[0] != '"')
Stemp+=arg[0];
}
arg.erase(arg.begin()+0);
}
if(Masiv.size()>1)
Open(Masiv[1]);

这里的问题是,当将 Subsystem 参数设置为“Windows”时,入口点的外观会发生变化。Win32 应用程序的默认入口点如下所示:
那些。命令行作为第三个参数传递。如果您设置 Subsystem=Windows 但强制使用主入口点,则无法正确解析参数。最好这样做:
将入口点参数重置为默认值
使用上述原型在项目中创建 WinMain 函数,而不是 main 函数。
然后,您可以通过 lpCmdLine 参数访问传递的命令行参数,该参数是指向 char* 字符串的指针(如果有多个参数,您可以通过 strtok 拆分字符串)。另一种选择是使用GetCommandLine函数,它允许您从任何函数获取命令行。
在 Windows 上,这是通过注册表完成的。简而言之-注册程序的名称,打开文件时必须执行的命令附加到此值。然后注册文件扩展名并将注册的程序与之关联。
以编程方式,这可以通过使用 windows API(或通过库)直接完成,也可以通过某些程序(例如assoc )来完成。
这是通过文件属性手动完成的,或者再次使用regedit直接将值写入注册表。
注册表中的键
扩展名已
HKEY_CURRENT_USER\Software\Classes\<расширение файла>注册。它们有很多,你可以做现有的例子。此注册表项仅对当前用户可用。要为系统的所有用户注册,您需要使用HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER.HKEY_CURRENT_USER\Software\Classes\<название программы>\shell\open\command您需要写入可执行文件的路径并将第一个参数(要打开的文件)传递给它。例如,所以c:\app.exe "%1"。然后创建一个键
HKEY_CURRENT_USER\Software\Classes\<расширение файла>\OpenWithProgIds\<название программы>以将扩展与程序相关联。如果没有键,则需要创建它们。