문제

내가 노력하고 다음 코드를 사용하여 다음 버튼을 누르면 나는 다른 응용 프로그램:

HWND ButtonHandle;
if( (wnd = FindWindow(0, "Do you want to save?")) )
{   
   ButtonHandle = FindWindowEx(wnd, 0, "SaveButton", "&Save");
   SendMessage(wnd, WM_COMMAND, MAKEWORD(GetDlgCtrlID(ButtonHandle), BN_CLICKED ), (LPARAM)ButtonHandle);

}

그것은 작동하지 않습니다.나도 전달하는 다른 처리를 MAKEWORD 및을 변경하 WPARM 및 LPARAM 지만 아무것도 아니다.

는 방법에 대한 아이디어를 버튼을 클릭에는 다른 응용 프로그램의 창?

코드에 감사드립니다.감사합니다.

편집:그 이유는 그것은 작동하지 않는 것 권한이 있습니다.보냈 PostMessage()결과에 오류가 GetLastError()=5(또는 거부된 액세스).어떤 아이디어가?

EDIT2 내가 의미하지 않는 무례하게 하려 하시다,나는 이미 검색는 모든 API 를 포함하고 설정 지역에 대한 버튼을 누른 후 전송 버튼을 아래로 버튼을 받고,제어 ID 받고,클래스 ID 및 엄청나게 더 있습니다.이 질문에 여기에 첫 번째 장소이기 때문에 나는 이미 지친 내 검색 인터넷에 있습니다.당신이 알고 있는 경우 응답이 게시 코드, 지 않는 것이 좋 API 고,그것을 나에게 어떻게 보는 API 는 문제를 해결합니다.그것은 어렵지 않습니다.감사합니다.

EDIT3:질문의 답변이었다면 자동으로 선택의 현상금을 마쳤다.질문에 여전히 남아 있지 않고 대답합니다.

도움이 되었습니까?

해결책

  1. 당신은"SaveButton"클래스 이름은 유효한가요?당신은 당신을 얻을 버튼 처리하는가?
  2. 시에 메시지를 보내 ButtonHandle 창(직접)이 포함되어 있습니다.

업데이트: 저는 이것을 믿어야 합 작업

SendMessage(ButtonHandle, BM_CLICK, 0, 0);

다른 팁

SendMessage(btnHandle, WM_LBUTTONDOWN, 0, 0);
SendMessage(btnHandle, WM_LBUTTONUP, 0, 0);
SendMessage(btnHandle, WM_LBUTTONDOWN, 0, 0);
SendMessage(btnHandle, WM_LBUTTONUP, 0, 0);

을 보낼 수 있는 버튼을 두 번 클릭합니다.지(아마도 첫번째 클릭만 활성화하는 창의 버튼)이지만,나 이 코드를 사용하여 오랜 시간 그리고 그것은 항상 나를 위해 일했습니다.

어쩌면 이것은 도움이 될 수 있습니다:http://www.cplusplus.com/forum/beginner/8806/

다음과 같은 솔루션을 사용할 수 있도

SendMessage(ButtonHandle, WM_LBUTTONDOWN, 0, 0);
SendMessage(ButtonHandle, WM_LBUTTONUP, 0, 0);

SendMessage(ButtonHandle, BM_CLICK, 0, 0);

HWND buttonHandle = 0;

BOOL CALLBACK GetButtonHandle(HWND handle, LPARAM)
{
 char label[100];
 int size = GetWindowTextA(handle,label,sizeof(label));
 if(strcmp(label,"&Save") == 0)
 {
  buttonHandle = handle;
  return false;
 }
 return true;
}
void main()
{
 HWND windowHandle = FindWindowA(NULL,"Do you want to Save?");
 if(windowHandle != 0)
 {
  BOOL ret = EnumChildWindows(windowHandle,GetButtonHandle,0);

  if(buttonHandle != 0)
  {
   LRESULT res = SendMessage(buttonHandle,BM_CLICK,0,0);
   //SendMessage(buttonHandle,WM_LBUTTONDOWN,0,0); 
   //SendMessage(buttonHandle,WM_LBUTTONUP,0,0);
  }

 }



}

참고:점점 확인 창에서 텍스트,버튼의 텍스트(가 있는지 확인하십시오 끝에 공간을 창의 제목)

액세스 거부에서 오류를 SendMessage 또는 PostMessage 들에게 의미가 없지 않는 프로세스를 보내는 메시지가 낮은 수준의 무결성을 보다는 대상 프로세스.

이것은 일어나지 않는 프로세스를 소유하는 대상을 창이 실행되는"asAdministrator"또는 서비스입니다.그런 하드에 대한 서비스를 만들 windows 에 대화형 데스크톱으로 윈도우 6 니다.

당신이 할 수 있는 일부에 대해 읽기 무결성 수준은 여기 에 적용되는 경우에도 원격으로 이 상황입니다.Internet Explorer 에 대한 유일한 다른 응용 프로그램을'선택'에서의 무결성을 보안 모델이 의도적으로 낮추고 수준의 무결성을의 자체하기 위해 샌드박스 자체보다 효율적으로

는 경우에 당신을 올릴 수 있습 창을 포함하는 버튼을 보낼 수 있습니다 원 마우스 이벤트의 위치 내에서의 경계를 버튼입니다.

두 가지 기능을 시뮬레이션을 마우스 이벤트 SendInputmouse_event.내가 사용하는 것이 좋습니다 mouse_event 기능입니다.하기 창을 사용할 수 있는 쇼 윈도우.지 않을 얻는 방법을 알고 핸들의 버튼을,하지만 당신은 그것의 hWnd 쉽게 찾을 절대 사용하여 위치 GetWindowRect 기능입니다.도를 사용하여 이러한 경우,당신은 어떤 문제로 실행하게 될 것이 기꺼이 도움을 제공합니다.

을 정의하거나 사용자 지정 WM 내에서의 응용 프로그램 를 핸들을 저장을 요청합니다. WM_CUSTOMWM_USER (를 기억하지 못하는)시작을 표시의 사용자 정의 창에 메시지입니다.

이 있을 때는 이런 종류의 것을 내가 사용하는 SendKeys.그것은 VB-틱 및 C#을 제공하는 좋은 인터페이스을 사용하지만 for C/C++당신이해야 할 것이다 그것은 <이 방법>.무엇이 좋은것으로는 쓸 수 있는 스크립트를 실행하는 대신 그들의 하드 코딩에서 당신의 코드입니다.

마이크로소프트는 지금 추진 Active Accessibility(컴퓨) 에 대한 UI 를 자동화 (이름을 바꾼의 수년간) 보

죄송하지 않는 어떤 간단한 코드를 시작합니다.로"SendMessage()"보이지 않는 작동하는 것은 당신을 위해,내가 알지 못하의 또 다른 옵션에서 떨어져"UI 자동화"

나는 가정이 있으로 확인 스파이++(에 설치된 MsDev)는 메시지가 전송되는 정확한 버튼을 등–그리고 그의 버튼은 표준 windows 버튼이 있습니다.내가 먼저 즉시 사용하여 말할 것"SendMessage()"또는"PostMessage()"그러나 주어진 숫자의 답변에 대해"SendMessage()"그리고 사실 그것은 당신을 위해 노력하고 있습니다.내가 기대하는 사람에...

당신이 사용할 수 있습 sendkeys(로 tr3 말했)을 보내 마우스 클릭으로,다른 사용하여 SendMessage.그것은 또한 직접적이고 더 많은 해킹 틱지만,유용한 자동화(에 VBS).

또한,다만 추측하지만 문제가 될 수 있다는 당신의 메시지 처리가 깨진 곳으로 부르지 않는 기본 클래스 구성원입니다.예제:

void CMyClass::OnMessageY(CWnd *cwnd)
{
    CBaseClass::OnMessageY(cwnd);
    //... my code
}

는 경우에 당신은 확실 ButtonHandle 유효한 손잡이를 사용할 수 있습 쌍 WM_LBUTTONDOWN 및 WM_LBUTTONUP 메시지는 대신 BN_CLICKED

HWND ButtonHandle;
if( (wnd = FindWindow(0, "Do you want to save?")) )
{   
    SendMessage(ButtonHandle, WM_LBUTTONDOWN, MK_LBUTTON, 0);
    SendMessage(ButtonHandle, WM_LBUTTONUP, MK_LBUTTON, 0);
}

Non-C 방식:사용 Java,java.awt.로봇 등을 이동하는 마우스를 수행하는 실제 클릭이(나 무언가가 세계에서 이를 위해,도).문제:당신이 알고 있는 버튼이:D

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top