2013-10-07 1 views
0

과 비슷한 문제가 있지만 여전히 해결할 수 없습니다.sendmessage 및 WM_SETTEXT를 사용하는 동안 textchanged 이벤트를 트리거 할 수 없습니다. 그러나 PostMessage는

내 wpf 프로그램에서 이미지 뷰어 프로그램 내에서 대비를위한 텍스트 상자와 밝기를 편집하려고합니다. 이 두 텍스트 상자 안의 값을 변경하면 이미지가 즉시 변경됩니다. Spy ++를 사용하면 해당 텍스트 상자에 대한 정확한 창 핸들을 얻을 수 있으며 다음 방법을 시도했지만 여전히 C# 프로그램에서 필요한 것을 얻을 수 없습니다.

방법 1 : 이 방법은 나에게 즉시 텍스트 상자의 전체 텍스트를 변경할 수 있지만, 변경 사항이 자동으로 트리거하고 이미지 뷰어에서 이미지의 명암/밝기 변화를 반영하지 않습니다.

IntPtr text = Marshal.StringToCoTaskMemUni(value.ToString()); 
SendMessage(window, WM_SETTEXT, 0, text); 
Marshal.FreeCoTaskMem(text); 

방법 2 :. 이 방법은 수동으로 텍스트 상자를 클릭하여 마우스를 설정하고 지속적으로 (특정 번호 키를 보내는 예를 들어 100의 대비 값이 보내드립니다, 텍스트 상자의 RECT의 위치를 ​​가져옵니다 keydown 3 번, 1 번은 vk, 2 번은 0 번). 이 방법은 텍스트 상자의 텍스트를 성공적으로 변경하고 각 숫자가 입력 될 때 대비 이벤트를 트리거합니다. 문제는 숫자의 각 입력과 함께 이미지가 변경된다는 것입니다. 이미지는 key1의 첫 번째 입력 (1에서의 명암)과 key0 (10에서의 명암) 그리고 마지막으로 또 다른 key0 (100의 명암, 우리가 원하는 실제 대비)에 반영됩니다.

RECT hwnd_loc = new RECT(); 
    GetWindowRect(w_hwnd, ref hwnd_loc); 

    IntPtr lParam = (IntPtr)(((hwnd_loc.Top + 2) << 16) | (hwnd_loc.Left + 2)); 

    PostMessage(w_hwnd, WM_LBUTTONDOWN, 0, (int)lParam); 
    PostMessage(w_hwnd, WM_LBUTTONUP, 0, (int)lParam); 

    for (int i = index.Count - 1; i >= 0; i--) 
    { 
     PostMessage(w_hwnd, WM_KEYDOWN, key[index.ElementAt(i)], 0); 
    } 

그래서 WM_KEYDOWN를 사용하지 않는 번호의 전체 세트를 PostMessage를 할 수있는 방법이 나 이미지 뷰어 프로그램이 변경 사항을 확인하고 대비 이벤트를 트리거 할 수 있도록 어떻게 든 sendMessage 첨부를 사용하지만 할 수있는 방법이 있는지? 어떤 도움이라도 대단히 감사하겠습니다!

답변

0

이것은 대부분 손에서 벗어납니다. 미리보기를 업데이트하기 위해 호출 할 때 문제의 응용 프로그램이 WM_KEYDOWN 이벤트에 반응하는 것처럼 보입니다.

WM_SETTEXT를 사용하여 텍스트를 설정 한 다음 WM_KEYDOWN을 노우트 정렬로 보낼 수 있습니다 (예 : 화살표 오른쪽 키 또는 그와 비슷한 것). 이것은 문제의 코드가 "WM_KEYDOWN 이벤트를 기다린 다음 텍스트 상자의 텍스트를 구문 분석"으로 작성되었다고 가정합니다.

관련 문제