我无法找到我应该如何处理我的程序中的文件打开。例如,如果用户使用Open With ... myprogram.exe,那么我该如何处理该问题并使用它进行操作。哪个WM_Message被发送? 谢谢事件处理打开(WinApi)
* no我的意思是,如果你有sometext.txt和openwith Notepad.exe,它奇迹般地显示文本,所以我怎么知道是否有人用Open With。
我无法找到我应该如何处理我的程序中的文件打开。例如,如果用户使用Open With ... myprogram.exe,那么我该如何处理该问题并使用它进行操作。哪个WM_Message被发送? 谢谢事件处理打开(WinApi)
* no我的意思是,如果你有sometext.txt和openwith Notepad.exe,它奇迹般地显示文本,所以我怎么知道是否有人用Open With。
没有发送消息时,你可能会得到它的命令行,使用argc/argv或GetCommandLine()
shell首先检查NoOpenWith值在KCR \ Applications \ myprogram.exe中,如果它不存在,您的应用程序将在打开的对话框中列出。 如果用户选择你的应用程序,shell将use the command listed under HKCR \ Applications \ myprogram.exe \ shell \ open \ Command(如果它存在的话)(然后可以分配DDE或Droptarget属性,如果这是您想要处理“传入文件” )
如果你真的想知道,如果openwith使用,我想你可以与像myprogram.exe/openwith“%1”
我想,我最好的帖子在这里从我记事本
// Menu commands
case WM_COMMAND:
{
switch(LOWORD(wParam)) {
// (...)
case ID_FILE_OPEN:
{
OPENFILENAME of = {0};
CHAR filename[max_filename_size] = "";
// Init OPENFILENAME structure
of.lStructSize = sizeof(OPENFILENAME);
of.hwndOwner = hwnd;
of.hInstance = GetModuleHandle(NULL);
of.lpstrFilter = "All files (*.*)\0*.*\0";
of.lpstrCustomFilter = NULL;
of.nFilterIndex = 1L;
of.lpstrFile = filename;
of.nMaxFile = MAX_PATH;
of.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
// Invoke open file dialog
if (GetOpenFileName(&of))
{
// My own routine, change to something yours that acts
// with "filename"
OpenExistingFile(handler, reader, filename);
}
break;
}
// (...)
我正在寻找处理,当用户使用打开,而不是如何实际上做文件 - >负载...我已经 – jmasterx 2010-04-24 23:36:46
对不起,误解了你。我不明白你想在这种情况下做什么。 'Open With'通过查找注册表来调用相应的命令,比如'myprogram.exe%1'(如果绑定了这个命令),然后启动它,所以效果和你从'cmd中调用你的程序一样。 exe'' myprogram.exe filename.txt'(ofc,你必须有命令行解析例程) – 2010-04-24 23:43:37
我认为可能的另一种情况是这个'Open With'操作的一般钩子(所以你想知道是否ANY在你的机器上执行open-with操作),但是这需要放置你自己的钩子,我认为这不是你想要的应用程序。 – 2010-04-24 23:45:13
http://msdn.microsoft.com/en-us/library/ms646960%28VS.85%29.aspx
GetOpenFileName &则GetSaveFileName一些代码
我不一个命令行执行您的应用程序壳项下注册的命令得到它,你的意思是在浏览器中的openwith对话框? 然后你可以检查你的父母。 – evilpie 2010-04-24 23:44:35