我无法找到我应该如何处理程序中的文件打开。例如,如果用户执行Open With ... myprogram.exe,那么我该如何处理它并对其执行某些操作。哪个WM_Message被发送? 感谢
*不,我的意思是,如果您有sometext.txt并使用Notepad.exe打开,它会神奇地显示文本,那么我怎么知道是否有人使用了Open With。
答案 0 :(得分:2)
没有发送消息,您可能会在命令行上获取它,使用argc / argv或GetCommandLine()
shell首先检查KCR \ Applications \ myprogram.exe中的NoOpenWith值(如果不存在),您的应用程序将在打开的对话框中列出。 如果用户选择了您的应用程序,那么shell将use the command listed under HKCR \ Applications \ myprogram.exe \ shell \ open \ Command(如果存在)(如果这是您想要处理的方式,则可以指定DDE或Droptarget属性)传入文件“)
如果你真的想知道是否使用了openwith,我想你可以在shell键下注册一个命令,用命令行执行你的应用程序,如myprogram.exe / openwith“%1”
答案 1 :(得分:0)
我想,我最好在这里发一些记事本中的代码
// 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;
}
// (...)
答案 2 :(得分:0)
http://msdn.microsoft.com/en-us/library/ms646960%28VS.85%29.aspx
GetOpenFileName&则GetSaveFileName