Событие для обработки Open With (WinApi) - PullRequest
4 голосов
/ 25 апреля 2010

Я не могу найти, как я должен обрабатывать открытие файлов в моей программе. Например, если пользователь открывает Open With ... myprogram.exe, то как мне с этим справиться и что-то с этим сделать. какое WM_Message отправлено? Спасибо

* нет, я имею в виду, если у вас есть sometext.txt и openwith Notepad.exe, он волшебным образом отображает текст, так как я могу узнать, использовал ли кто-то Open With.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2010

Сообщение не отправлено, вы, вероятно, получите его в командной строке, используйте argc / argv или GetCommandLine ()

Оболочка сначала проверяет значение NoOpenWith в KCR \ Applications \ myprogram.exe, если его там нет, ваше приложение отображается в диалоге открытия с помощью. Если пользователь выберет ваше приложение, оболочка будет использовать команду, указанную в HKCR \ Applications \ myprogram.exe \ shell \ open \ Command, если она существует (вы можете назначить свойства DDE или Droptarget, если это так вы хотите обработать "входящие файлы")

Если вы действительно хотите узнать, использовался ли openwith, я думаю, вы могли бы зарегистрировать команду под ключом оболочки, которая запускает ваше приложение с командной строкой, такой как myprogram.exe / openwith "% 1"

0 голосов
/ 25 апреля 2010
0 голосов
/ 25 апреля 2010

Я думаю, мне лучше выложить здесь код из моего блокнота

  // 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;
        }

// (...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...