我用VC6.0写了一个这样的程序A(模拟键盘消息):
1.创建新进程CreateProcess(0,exePath,....)启动一个已有的应用程序B(任一个应用程序)。
2.查找窗口hFWnd=FindWindow(wndclassname,wndname)得到这个应用程序的父窗口句柄。
3.获得指定点的子窗口hChild=ChildWindowFromPoint(hFWnd,point)得到子窗口句柄。
4.激活这个窗口::SetForegroundWindow(hFWnd);
5. 把m_1中的字符发送到这个程序的子窗口(编辑框,组合框,时间控件)上.
   CStirng m_1;
   char str[20];
   strcpy(str,m_1);
   int len=strlen(str);
   for(int i=0;i<len;i++)
   {
   ::PostMessage(hChild,WM_CHAR,(WPARAM)(str[i]&0xff),0);
   }现在有这样几个问题:
1.CEDIT 可以发送字符(包括汉字),CComboBox(组合框)可以发送英文和数字,但不能发送汉字.
2.怎样按标准的格式发送字符(时间,日期)给Date time Picker 控件.
3.ChildWindowFromPoint(hFWnd,point)中的point是一个相对坐标,有没有好的方法可以得到它.我用的是
VC6.0中的spy++通过计算得到的.但有时会有误差(可以是因为要除去窗体的标题栏高度,不大清楚)
5.有没有更好的方法可以控制更多类型的控件.
6.有没有好的资料,或e_mail给我. [email protected]
谢谢.最重要的就是解决给Date time Picker 控件(VC里的标准时间日期控件,VB,dephi相类似的控件)发送时间和日期。我还试过WM_SETTEXT消息,但没有成功。请问WM_SETTEXT正确的使用方法。
最好有源代码。  

解决方案 »

  1.   

    得到子窗口可以用EnumChildWindows
      

  2.   

    可不可以给我一个demo我挺感兴趣的[email protected]
      

  3.   

    模拟键盘和鼠标,在timer控件上输入字
      

  4.   

    WM_SETTEXT只对本进程的CEdit有用,对其它窗口的CEdit是不能设置的
      

  5.   

    //--
    最重要的就是解决给Date time Picker 控件(VC里的标准时间日期控件,VB,dephi相类似的控件)发送时间
    //--
    你直接使用它的SetTime()函数不就可以了吗?
      CTime timeTime(2003, 10, 23, 0, 0, 0);
      TimeCtrl.SetTime(&timeTime));
      

  6.   

    有理,同意楼上。还以为是在MasterEdit控件上设置几时触发。
      

  7.   

    在两个进程中发送消息进行赋值我没有试过,但是对于
    Date time Picker 控件进行设置时间时使用的是以下消息:
    DTM_SETSYSTEMTIME
        wParam = (WPARAM) flag;
        lParam = (LPARAM) lpSysTime;另外在进行发送消息时最好不要用PostMessage而改用SendMessage 
    应为有可能在进行发送到达时你的str内存已经无效了!对于坐标可以使用ClientToScreen 函数进行转换.
      

  8.   

    DTM_SETSYSTEMTIME
    我试过。没有用,不知道为什么,句柄的返回值是0
    我不是这个消息不能在进程之间发送。好像msdn里没有说有这个限制。
    我是想用这个消息把一个指定的时间或日期从进程A发送到进程B