2013-04-26 2 views
1

프로그램 A가 다른 프로그램 B를 열고 프로그램 B가 지정된 파일을 열도록하려는 경우가 있습니다. 현재 CreateProcess를 사용하고 명령 줄 인수에 파일 경로를 전달하여이 작업을 수행하려고합니다. 여기 내 코드 :파일을로드하는 프로그램을 여는 CreateProcess

STARTUPINFO si; 
PROCESS_INFORMATION pi; 

ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 
CreateProcess("C:\\ProgramB.exe", "C:\\MyFile.txt", NULL, NULL, 
       FALSE, 0, NULL, NULL, &si, &pi); 

내가 뭘 잘못하고 있니? 프로그램 B의 DragAndDrop이 true이고 창으로 파일을 드래그 앤 드롭하면 성공합니다 (WM_DROPFILES 메시지도 성공없이 보냈습니다). 프로그램 B는 열린 파일 대화 상자에서 파일을 열 수 있지만이 명령에 문제가 있습니다. 파일을 찾을 수 없다고 말했습니다. 명령 프롬프트에서

"C:\ProgramB.exe" "C:\MyFile.txt" 

을 실행하는 의견에

+0

코드에서 사용중인 경로가 정확한 경로입니까? 또는 파일 시스템 리디렉션이 너와 어지럽 혔습니까? 커맨드 라인 인수에 공백이 있습니까? 어떻게 오류를 감지하고 있습니까? –

+0

@DavidHeffernan 그 사람이 정확한 경로를 사용하고 있지 않지만, 어떤 경로로든 작동하도록하고 싶습니다. (실제 경로는 "C : \\ Users \\ Paul \\ Desktop \\ MyFolder \ \ MyFile.txt "). 예, 폴더 이름에는 공백이 있으므로 명령 줄 인수에 공백이 있으므로 내 견적이 필요합니다. 프로그램 B에는 try/catch 블록이 있지만 실제로 어떤 정보도 제공하지 않습니다. 어쩌면 프로그램 B를 더 자세히 살펴야 할 것입니다. – CincinnatiProgrammer

+0

Windows API는 예외를 발생시키지 않습니다. try/catch는 아무 것도하지 않습니다. 오류가 있는지 올바른 방법으로 확인해야합니다. 설명서에 설명 된대로 CreateProcess의 반환 값을 확인하십시오. 명령 창 cmd.exe에서 매개 변수를 전달하는 실행 파일을 호출하면 어떻게됩니까? 그게 효과가 있다면 가능하다는 것을 알게 될 것입니다. 그렇지 않으면 지금 포기하십시오. –

답변

1

당신의 상태는 프로그램이 시작되지만 파일을 열지 않습니다. 즉, 실행 파일은 파일 이름을 인수로 전달하는 것을 지원하지 않습니다. 이것은 CreateProcess에 대한 귀하의 전화가 실패한 이유를 설명합니다. 이것은 cmd.exe와 똑같이하고 있습니다. 하나가 실패하면 다른 하나는 실패합니다.

시도하고있는 것처럼 보일 수도 있습니다.

또한 WM_DROPFILES을 보내 주셨습니다. 그것은 당신이 그렇게 할 수있는 것이 아닙니다. 응용 프로그램이 끌어서 놓기를 지원하면 파일 열기를 자동화 할 수 있지만 다른 프로세스에서 WM_DROPFILES을 보내는 것보다 더 복잡합니다. 첫 번째 단계는 응용 프로그램이 대화식으로 수행 된 드래그/드롭을 허용할지 여부를 확인하는 것입니다.

+0

프로그램 B는 드래그 앤 드롭을 받아 들일 수 있지만 프로그램이 WM_DROPFILES로 PostMessage를 보내고있는 것처럼 행동하는 것은 매우 복잡합니다. 그래서 나는 그 접근법을 포기했습니다. 더 나은 접근 방법이 있다면 무엇을 제안합니까? 특정 위치에서 항상로드하는 것이 훨씬 쉽지만 프로그램 B에게 파일을 가져올 위치를 알려주고 싶습니다. – CincinnatiProgrammer

+0

명령 줄 인수로 파일 이름을 전달하는 것은 끌어서 놓기로 파일 이름을 전달하는 것과 매우 다릅니다. ProgramB가 명령 행 인수를 지원하도록 코딩되지 않은 경우 SOL입니다. 인수없이 실행하고 'WM_DROPFILES' 윈도우 메시지를 시뮬레이트 할 수 있습니다 (문제가있는 경우 다른 질문을하고 그 코드를 보여줄 수 있습니다). 앱이'IDropTarget' 인터페이스를 지원하지 않는다면 이상적인 대안이 될 것입니다. –

+1

@Paul 죄송합니다, 지금까지 귀하의 의견을 볼 수 없었습니다. Remy가 맞다고 생각합니다. 드래그/드롭은 웹 검색에서 해결할 수 없다면 새로운 질문에 가치가 있습니다. 나는 Raymond Chen이 그것에 관한 몇 가지 기사를 썼을 것이라고 확신한다. 예, 여기 있습니다 : http://blogs.msdn.com/b/oldnewthing/archive/2008/07/24/8768095.aspx –

관련 문제