处理Open With(WinApi)的事件

时间:2010-04-24 23:19:39

标签: c++ winapi

我无法找到我应该如何处理程序中的文件打开。例如,如果用户执行Open With ... myprogram.exe,那么我该如何处理它并对其执行某些操作。哪个WM_Message被发送? 感谢

*不,我的意思是,如果您有sometext.txt并使用Notepad.exe打开,它会神奇地显示文本,那么我怎么知道是否有人使用了Open With。

3 个答案:

答案 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