有一进销存程序,由于开发时间早,其开票时的单价只可手输,没有价格跟踪功能。我受命给他加上价格跟踪功能。从一个窗口(PB的窗口)的一个文本输入框中取得商品代码,从这个窗口的上一级(或更上一级)中一个文本框中取得客户代码,以此来决定此商品的价格。因我一直只对数据库感兴趣,所以系统的知识知道得相当少。请求各位帮忙。如何取得如上所述的客户代码和商品代码?

解决方案 »

  1.   

    你是不是没有它的源码 是吧.一般是 
    HWND FindWindow(
      LPCTSTR lpClassName,  // pointer to class name
      LPCTSTR lpWindowName  // pointer to window name
    );
    HWND FindWindowEx(
      HWND hwndParent,      // handle to parent window
      HWND hwndChildAfter,  // handle to a child window
      LPCTSTR lpszClass,    // pointer to class name
      LPCTSTR lpszWindow    // pointer to window name
    );
    获得你的目标句柄 然后 SendMessage(TheHandle, WM_GETTEXT, MaxLength, YourBuffer).不过具体的我没做过... 如果有问题 再商讨...
      

  2.   

    那,谢谢  beyondtkl(大龙驹<逝追>) 有空一定看看系统方面的东西。
      

  3.   

    又发现一个问题,忘记说了,那个包含商品代码的窗口是另一个窗口的子窗口,而包含商品代码窗口的上级窗口(也就是包含客户代码的窗口),其标题中前三个字不变,后面几个会变化,而且我不知道他的规律。还有,由于操作员的习惯性,操作员喜欢同时开着三个或三个以上的程序进行操作,
    问他,他还说,一个查询,一个开单,另一个随便干什么,NND,什么逻辑。
      

  4.   

    给你代码... VC的 刚写..HWND h1,h2;
    char szBuf[255];

    h1 = ::FindWindow(NULL, "ShowAllProcess"); // 获得主窗口句柄
    if ( h1 != NULL )
    {
    ::SendMessage(h1, WM_GETTEXT, 255, (LPARAM)szBuf);
    GetDlgItem(IDC_EDIT1)->SetWindowText(szBuf);
    memset(szBuf, 0, 255);

    h2 = ::FindWindowEx(h1, NULL,  "Button", "取消"); 
                      // 获得该 主窗口下类型为 Button Caption为"取消"的控件的句柄
    if (h2 != NULL)
    {
    ::SendMessage(h2, WM_GETTEXT, 255, (LPARAM)szBuf);
    GetDlgItem(IDC_EDIT2)->SetWindowText(szBuf);
    }
    }// 建议 你在查找之前最后用类似 SPY++之类的工具查看 你所查找的控件/窗口的类型 就是
    查找到::FindWindowEx(h1, NULL,  "Button", "取消");  里面那个"Button"的类型就是属于Button类型...
    请再去看看 MSDN关于这两个函数的说明...还有,由于操作员的习惯性,操作员喜欢同时开着三个或三个以上的程序进行操作,
    问他,他还说,一个查询,一个开单,另一个随便干什么,NND,什么逻辑。
    // 这也照样可以查找的....你先一个问题一个解决掉
      

  5.   

    SPY++ 是MS VS.STUDIO自带的工具.... 偶就是用它的
    很好用...
      

  6.   

    用SPY++看找EDIT的句柄和窗口类,做个程序判断它窗口是否存在,存在检测这个EDIT的值就可以,不是太难./
      

  7.   

    能说清楚一些吗,最好弄个例子,做系统我一无所知。用spy++看到的。0056D032 这样的是什么呀,一个控件的hadle应该是不会一成不变的吧。
      

  8.   

    up
    像这样的代码能不能给我一点
    EMIAL:
    [email protected]
      

  9.   

    用spy++看到的。0056D032 这样的是什么呀,一个控件的hadle应该是不会一成不变的吧。当然是变化的 我叫你是去看它的类型 就是classname 靠这个来查找匹配的...
    handle是可以通过查找获取的不太喜欢写DELPHI代码...VC代码要么...