2010-04-24 25 views
3

我无法找到我应该如何处理我的程序中的文件打开。例如,如果用户使用Open With ... myprogram.exe,那么我该如何处理该问题并使用它进行操作。哪个WM_Message被发送? 谢谢事件处理打开(Win​​Api)

* no我的意思是,如果你有sometext.txt和openwith Notepad.exe,它奇迹般地显示文本,所以我怎么知道是否有人用Open With。

+0

我不一个命令行执行您的应用程序壳项下注册的命令得到它,你的意思是在浏览器中的openwith对话框? 然后你可以检查你的父母。 – evilpie 2010-04-24 23:44:35

回答

2

没有发送消息时,你可能会得到它的命令行,使用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”

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

// (...) 
+0

我正在寻找处理,当用户使用打开,而不是如何实际上做文件 - >负载...我已经 – jmasterx 2010-04-24 23:36:46

+0

对不起,误解了你。我不明白你想在这种情况下做什么。 'Open With'通过查找注册表来调用相应的命令,比如'myprogram.exe%1'(如果绑定了这个命令),然后启动它,所以效果和你从'cmd中调用你的程序一样。 exe'' myprogram.exe filename.txt'(ofc,你必须有命令行解析例程) – 2010-04-24 23:43:37

+0

我认为可能的另一种情况是这个'Open With'操作的一般钩子(所以你想知道是否ANY在你的机器上执行open-with操作),但是这需要放置你自己的钩子,我认为这不是你想要的应用程序。 – 2010-04-24 23:45:13