VC编程控制其他应用程序

    工厂的UKEY生产流水线需要编号,外壳上的编号由激光打标机进行打标,由于编号和打标不在一起,容易造成UKEY内部编号与外壳编号不一致,需要两人工作,

如果打标机打标同时对UKEY进行编号,就解决了以上问题。由于激光打标机软件没有接口,厂家支持也跟不上,我就想到了编写VC软件来控制打标软件。具体步骤如下:

     1、先在网上下载SPY++;

     2、找到主窗口: HWND hWnd = ::FindWindow(NULL,m_strTitle);//m_strTitle是窗口标题

     3、找到子窗口:HWND hWnd1 = ::FindWindowEx(hWnd,NULL,"AfxControlBar42","绘图");

           在SPY++中找到所需子窗口的类和窗口标题

    4、找到多个同类的子窗口(在一个父窗口下有多个无窗口标题的同类,需要第3个子窗口)

          HWND hWnd5 = ::FindWindowEx(hWnd4,NULL,"#32770","");        //第一个子窗口

          HWND   hWnd6 = ::FindWindowEx(hWnd4,hWnd5,"#32770","");     //第二个子窗口

          HWND   hWnd7 = ::FindWindowEx(hWnd4,hWnd6,"#32770","");     //第三个子窗口

     5、找到编辑框:  HWND hEdit = ::GetDlgItem(hWnd7, 0x65C);          //0x65C 是SPY++中此控件的ID

     6、设置焦点:                     

                  ::SendMessage( hWnd , WM_SETFOCUS , NULL , NULL );
                  ::SendMessage( hEdit , WM_SETFOCUS , NULL , NULL );
     7、给编辑框赋值
   
   ::SendMessage(hEdit,WM_SETTEXT,(WPARAM)255,(LPARAM)szText);Sleep(100);

    8、给按钮发送“”点击消息“”

   ::SendMessage( hWndbtn , BM_CLICK , NULL , NULL );Sleep(100);
   ::SendMessage( hWndbtn2 , BM_CLICK , NULL , NULL );

 

一段例子:

void CTestDlg::OnOK()
{
 // TODO: Add extra validation here
   char szText[256];
 //HWND hWnd = ::FindWindow(NULL,"HAN'S LASER Marking Software 5.3.3 - [skp]");
 //if(hWnd) ::MessageBox(NULL,"find","tj",0);
 HWND hWnd = ::FindWindow(NULL,"计算器");//m_strTitle=="计算器",在不同语言的系统上是不同的
   
 /*HWND hEdit1 = ::GetDlgItem(hWnd, 0x193 );
 ::SendMessage( hEdit1 , WM_CHAR , '1' , 0 );
 Sleep(500);
 ::SendMessage( hEdit1 , WM_CHAR , '2' , 0 );
 return;
 */
 HWND hEdit1 = ::GetDlgItem(hWnd, 125 );//按钮1的ID,可在SPY++中观察得到
 HWND hEditMul = ::GetDlgItem(hWnd, 0x5B );//乘号的ID,可在SPY++中观察得到
 HWND hEditEq = ::GetDlgItem(hWnd, 0x70 );//等号的ID,可在SPY++中观察得到
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEditMul , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(500);
 ::SendMessage( hEdit1 , BM_CLICK , NULL , NULL );Sleep(1000);
 ::SendMessage( hEditEq , BM_CLICK , NULL , NULL );Sleep(500);
 HWND hEdit = ::GetDlgItem(hWnd, 0x193 );
 ::SendMessage(hEdit,WM_GETTEXT,(WPARAM)256,(LPARAM)szText);
 strcpy(szText, "12345678");
 ::SendMessage(hEdit,WM_SETTEXT,(WPARAM)256,(LPARAM)szText);
 ::MessageBox(NULL,szText,"tj",0);
}

 

          

        

          

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值