比如说有一个程序的窗口,内含一个文本框和一个确定按钮,我在自己的程序中如何能改变其该文本框内的内容并且点击确定按钮?

解决方案 »

  1.   

    你要是在别的程序中调用的话,获得指针后,通过指针->你的控件变量.("改变的内容"),最后UpdateData(FALSE)就可以了
      

  2.   

    错了,应该这样:指针->你的控件变量.SetWindowText("改变的内容"),最后UpdateData(FALSE)
      

  3.   

    GetDlgItem(文本框ID/按钮ID)->SetWindowText("你想改变的内容");也可以在向导中直接添加一个控件变量,用这个控件变量来进行设置.
    如:你的控件变量.SetWindowText("你想改变的内容");
      

  4.   

    比如你在B中想改变A中的文本框,首先你要在A中设置一个变量(成员变量或者全局变量都可以,最好是成员变量A *a;),现在就可以用以上的方法了,如下:a->A中的控件变量.SetWindowText("你想改变的内容");
      

  5.   

    Function SendMessage Lib "user32" (ByVal hwnd As IntPtr, _
                                              ByVal wMsg As Integer, _
                                              ByVal wParam As Integer, _
                                              ByVal lParam As Integer) As Integer
      

  6.   

    哈哈,我也碰到过类似情况,后来我写了个遍历程序,对你这个问题,这样试下:
    外部程序窗口->GetDlgItem(文本框ID/按钮ID)->SetWindowText("你想改变的内容");
    中的“文本框ID”你不是不知道吗,反正它是整数,我的做法就是从100开始一直遍历到50000(范围随你了),执行SetWindowText后再GetWindowText,如果发现更改后内容和你的预期一致,大概就找对了,把这个ID记录下来吧。文本框的ID是固定的,找到了就是你的了。你要注意遍历过程中会发生非法访问,那就分段遍历ID吧。我以前用这方法的时候,找到了好几个ID,我也分不清是哪个,但是都能达到预期目的,奶奶的给我玩真假美猴王!看你的了,搞定了回来说一声,我也想知道怎么分辨到底是哪个ID。
      

  7.   

    BOOL   CALLBACK   EnumChildProc(   HWND   hwnd,LPARAM   lParam)     
      {     
      char   sChildName[MAX_LINELENGTH];     
      ::GetClassName(hwnd,sChildName,MAX_LINELENGTH-1);     
      file://处理编辑控件,登录窗口中一般只有两个编辑框,可用MicroSoft   Spy++查看窗口的     
      file://各个子窗口     
      //   的属性。通过对比各控件的风格或名字来区别各控件。     
      if(strcmp(sChildName,"Edit")==0)     
      {     
      DWORD   dWinSty=::GetWindowLong(hwnd,GWL_STYLE);     
      if((dWinSty&ES_PASSWORD)==ES_PASSWORD)//这是密码输入编辑控件     
      {     
      gEventNextPass.SetEvent();//发送“新密码”事件     
      WaitForSingleObject(gEventPassOk,   INFINITE);   file://等待“密码完成”事件     
      gEventPassOk.ResetEvent();   file://复位     
      ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);     
      file://把新密码填到密码输入框,也可用SetWindowText()     
      bPass=TRUE;//记录密码已填入     
      if(bUser&&(hOk!=NULL))//如果用户名已填入,“确定”按钮已找到。     
      {     
      ::SendMessage(::GetParent(hOk),WM_COMMAND,     
      (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));     
      file://向“确定”按钮送消息,参照ClassWizard的消息映射     
      bUser=FALSE;bPass=FALSE;hOk=NULL;     
      file://完成一次登录,初始化     
      return   FALSE;     
      }     
      return   TRUE;     
      }     
      file://非此即彼,这是用户名输入编辑控件     
      if((dWinSty&ES_READONLY)!=ES_READONLY)     
      {     
      ::SetDlgItemText(::GetWindowLong(hwnd,GWL_ID),cCurrentPass);     
      file://把新用户名填到用户名输入框,也可用SetWindowText()     
      bUser=TRUE;//   新用户名已填入用户名输入框     
      if(bPass&&(hOk!=NULL))   如果密码已填入,“确定”按钮已找到。     
      {     
      ::SendMessage(::GetParent(hOk),WM_COMMAND,     
      (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));     
      file://向“确定”按钮送消息,参照ClassWizard的消息映射     
      bUser=FALSE;bPass=FALSE;hOk=NULL;     
      file://完成一次登录,初始化     
      return   FALSE;     
      }     
      }     
      return   TRUE;     
      }     
      file://如果是按钮控件     
      if(strcmp(sChildName,"Button")==0)     
      {     
      char   sChildTitle[MAX_LINELENGTH];     
      ::GetWindowText(hwnd,sChildTitle,MAX_LINELENGTH-1);     
      if(strcmp(sChildTitle,sButtonOk)!=0)   return   TRUE;     
      //   sButtonOk:登录窗口中“OK”按钮的标题     
      hOk=hwnd;//记录“OK”窗口句柄     
      if(bUser&&bPass)     
      {     
      ::SendMessage(::GetParent(hOk),WM_COMMAND,     
      (WPARAM)::GetWindowLong(hOk,GWL_ID),(LPARAM)(hOk));     
      file://向“确定”按钮送消息,参照ClassWizard的消息映射     
      bUser=FALSE;bPass=FALSE;hOk=NULL;     
      file://完成一次登录,初始化     
      return   FALSE;     
      }     
      return   TRUE;     
      }     
      return   TRUE;     
      }
      

  8.   

    现在已经能获得 文本框 的句柄 hwndEdit了
    但通过 PostMessage( hwndEdit, "new content" ) 设置其内容时没有反应
      

  9.   

    用 
    ::SetDlgItemText( ::GetParent(hwndChild),::GetWindowLong(hwndChild,GWL_ID), "hello" ); 

    ::SetWindowText( hwndChild, "hello" );
    都不行
      

  10.   

    用没有用UpdateData(FALSE),应该是对的
      

  11.   

    搞定  用的是
    ::SendMessage( hwndChild, WM_SETTEXT, 0, (LONG)content );
      

  12.   

    WinExec("notepad.exe",SW_SHOWNORMAL);
    hwnd = ::FindWindow(NULL,"无标题-记事本");
    hEdit = ::GetDlgItem(hwnd , 0x0F);
    ::SendMessage( hEdit, WM_SETTEXT, 0, (LONG)"1111" );
    我也遇到了同样的问题,但是如上编成在记事本的编辑框中并没有显示1111,求问答案。
      

  13.   

    WinExec("notepad.exe",SW_SHOWNORMAL);
    hwnd = ::FindWindow(NULL,"无标题-记事本");
    hEdit = ::GetDlgItem(hwnd , 0x0F);
    ::SendMessage( hEdit, WM_SETTEXT, 0, (LONG)"1111" );
    我也遇到了同样的问题,但是如上编成在记事本的编辑框中并没有显示1111,求问答案。