我用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正确的使用方法。
最好有源代码。
最重要的就是解决给Date time Picker 控件(VC里的标准时间日期控件,VB,dephi相类似的控件)发送时间
//--
你直接使用它的SetTime()函数不就可以了吗?
CTime timeTime(2003, 10, 23, 0, 0, 0);
TimeCtrl.SetTime(&timeTime));
Date time Picker 控件进行设置时间时使用的是以下消息:
DTM_SETSYSTEMTIME
wParam = (WPARAM) flag;
lParam = (LPARAM) lpSysTime;另外在进行发送消息时最好不要用PostMessage而改用SendMessage
应为有可能在进行发送到达时你的str内存已经无效了!对于坐标可以使用ClientToScreen 函数进行转换.
我试过。没有用,不知道为什么,句柄的返回值是0
我不是这个消息不能在进程之间发送。好像msdn里没有说有这个限制。
我是想用这个消息把一个指定的时间或日期从进程A发送到进程B