2015-01-29 15 views
2
public static string GetActiveProcessFileName() 
    { 
     try 
     { 
      IntPtr hwnd = GetForegroundWindow(); 
      uint pid; 
      GetWindowThreadProcessId(hwnd, out pid); 
      Process p = Process.GetProcessById((int)pid); 
      // return p.MainModule.FileName; 
      CommandLine = GetMainModuleFilepath((int)pid); 
      if (CommandLine != null) 
      { 
       var array = CommandLine.Split('"'); 

       if (array.Length == 3) 
       { 
        if (array[array.Length - 1].Equals(" ")) 
        { 
         return "Application"; 
        } 
        if (!array[array.Length - 1].Equals(" ")) 
        { 
         return array[array.Length - 1]; 
        } 
        return null; 
       } 
       if (array.Length == 5) 
       { 
        return array[array.Length - 2]; 
       } 
       return "Explorer"; 
      } 
      return "Explorer"; 
     } 
     catch (Exception ex) 
     { 
      ErrorLog.ErrorLog.Log(ex); 
      return "Explorer"; 
     } 
} 

내가 실행하는 경우 "[커맨드]".. correnctly 현재 열려있는 파일의 이름을 가져 내 전 abc.txt, aaa.txt, dde.txt 같은 3 개 메모장 파일을 열 successfully..Now application.executed 그 중 하나를 열면 파일이 정상적으로 표시됩니다 ...Windows 양식 응용 프로그램을 사용하여 활성 프로세스 파일 이름을 가져 오는 방법은 무엇입니까? 여기

워드 문서 3 개 파일을 하나씩 열거 나 파일을 Excel.I 열었을 경우에만 처음 열린 파일 이름 만 저장됩니다 ... 어떻게 할 수 있습니까? 나는 열린 문서의 정확한 결과를 얻는다 왜 나는이 문제가 열려있는 단어 또는 엑셀 또는 pdf 파일 열려있는 situage를 얻었 는가 ...

+1

아니 정확히 당신이 찾고 있지만, 많은 응용 프로그램은 메모장과 같은 새로운 문서에 대한 새로운 프로세스를 생성되지 않도록 조심하는 것을 확인합니다. 하나의 프로세스가 하나의 최상위 창을 의미하지 않으며 창 제목이 "문서 파일 이름"과 관련이 없습니다 ... –

+0

첫 번째로 Ex.docx 파일을 연 경우 프로세스 파일 이름이 Ex.docx ... 인 경우 열린 상태 ... 이제 다른 단어 파일을 엽니 다. Ex2.docx 파일처럼 ... 이제 Ex2.docx가 열리고 싶습니다.하지만 처음에는 열렸습니다. Ex.docx 이름이 매번 표시됩니다 ... If i Ex.docx 파일을 닫으면 파일 이름이 Ok입니다. – ramaraog

+0

"프로세스 파일 이름"이란 무엇입니까? (나는 그것이 실행 파일의 이름이 될 것으로 기대하지만, 귀하의 의견은 문서 이름을 보여줍니다) ... –

답변

1

단어 파일을 얻기 위하여 부호를 사용하십시오 tances

private void timer1_Tick(object sender, EventArgs e) 
    { 

     y = GetActiveWindowTitle(); 

     try 
     { 
      Microsoft.Office.Interop.Word.Application WordObj; 
      WordObj = (Microsoft.Office.Interop.Word.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"); 
      var vvv = WordObj.StartupPath; 
       x = ""; 
       for (int i = 0; i < WordObj.Windows.Count; i++) 
       { 
        object idx = i + 1; 
        Microsoft.Office.Interop.Word.Window WinObj = WordObj.Windows.get_Item(ref idx); 

        // doc_list.Add(WinObj.Document.FullName); 


        x = x + "," + WinObj.Document.FullName; 

        //x = WinObj.Document.FullName; 
       }               

     } 
     catch (Exception ex) 
     { 

      // No documents opened 
     } 

     string[] ax=x.Split(','); 
     // string[] ax1 = x1.Split(','); 




     ForAllWordFiles.Text = x; 
     ForWordTitle.Text = y; 
     if (y != null) 
     { 
      ActiveWord.Text = " "; 
      if (y.Contains("- Microsoft Word")) 
      { 
       ForWordTitle.Text = y.Substring(0, y.Length - 17); 


       foreach (var item in ax) 
       { 
        if (item.Contains(ForWordTitle.Text)) 
        { 
         ActiveWord.Text = item; 
         break; 
        } 
        ActiveWord.Text = " "; 
       } 

      } 
     } 


    } 

이 코드는 2010 사무실 유효