2011-03-02 4 views
1

SetWindowText 함수를 사용하여 창 제목의 이름을 바꾸려면 "메모장"과 같은 Windows 프로그램에서 작동하지만 다른 타사 프로그램과는 작동하지 않는 것처럼 보입니다. Process ..MainWindowHandle. 파이어 폭스를 생성하고 창 제목의 이름을 바꿉니다. 이건 내 요구 사항입니다. 프로세스가 시작되고 있지만 창 제목의 이름 바꾸기가 발생하지 않습니다. "오류 보고서 보내기"대화 상자 창이 나타납니다. 아래 코드를 참조하십시오.SetWindowText 함수를 통해 창 제목 텍스트의 이름을 바꿀 수 없습니다.

using System; 
using Microsoft.Win32; 
using System.Runtime.InteropServices; 
using System.Threading; 
using System.Diagnostics; 
namespace SampleNamespace 
{ 
    public class SampleClass 
    { 
     [DllImport("user32.dll")] 
static extern int SetWindowText(IntPtr hWnd, string text); 

    public static void Main() 
     { 

    Process p = Process.Start("C:\\Sham\\pg\\Firefox\\firefox.exe"); 
    Thread.Sleep(1000); 
    SetWindowText(p.MainWindowHandle, "FireFox via Process-Start"); 
     } // End of Main function (program statup) 
    } 
} 
+0

"작동하지 않음"이란 무엇을 의미합니까? 오류가 발생합니까 아니면 창 텍스트가 변경되지 않습니까? 기본 브라우저 UI에 사용되는 창과 다른 창을 변경하는 경우가 많으므로 새 캡션이 예상되는 위치에 반영되지 않습니다. –

+0

오류 (보고서 전송 대화 상자 창)가 표시되고 창 텍스트가 변경되지 않습니다. 내가 원했던 것은 Process.Start를 통해 생성되는 창 제목을 변경하는 것입니다. 어떻게 할 수 있습니까? – user641057

답변

1

많은 프로그램이 실행 중 주 창 제목을 반복해서 설정합니다.

좋은 예는 Firefox가 새 페이지를 탐색 할 때마다 기본 창 제목을 변경합니다. 마찬가지로 메모장은 파일을 열거 나 저장할 때마다 주 파일 제목을 변경하여 최신 파일의 이름을 포함시킵니다.

실제로 이와 같은 제어를 수행 할 수있는 유일한 방법은 폴링하는 것입니다.

+0

일부 샘플 코드를 게시 할 수 있습니까? 와트가 파이어 폭스와 메모장에서 작동하지 않는다면 나 혼란 스럽습니까? 내 대상 프로세스는 Firefox 또는 Chrome 브라우저이며 제목이 변경되기를 원합니다. FindWindow를 사용하고 Setwindowtext를 사용하려면 process.start에 의해 생성 된 최신 윈도우를 어떻게 찾을 수 있습니까? 그게 바로 내가 직면 한 문제입니다. 나는 최신 창에 대한 창 제목 만 바꾸고 싶습니다. – user641057

+1

@user 당신이하려는 것은 제대로 작동하지 않습니다. Firefox는 사용자가 다른 곳을 둘러 본 순간 바로 찌를 수있는 모든 값을 덮어 씁니다. 왜 그렇게하고 싶은지 설명 할 수 있다면 정말 유용 할 것입니다. 다른 프로그램의 윈도우 캡션을 바꾸는 것을 맹공격하는 것은 정상적인 방법이 아닙니다. –

0

Firefox, Google, IE가 서로 다른 페이지를 구분하기 위해 일부 프로세스에서 작동하기 때문에 문제가 발생할 수 있습니다. 따라서 한 탭이 ​​충돌하면 다른 페이지가 여전히 작동합니다. Windows 작업 관리자를 열어 확인하십시오. (오페라는 여전히 존재하지 않지만이 기능은 향후 릴리스에서 이미 계획되어 있습니다.) 가능한 해결책은 예를 들어 'firefox.exe'라는 이름으로 모든 프로세스를 열거하고 일부 기준과 일치하는 창의 제목을 변경하는 것입니다.