C++ 一个程序获取另一个程序Edit控件的内容

//一个程序获取另一个程序Edit控件的内容

//根据指定程序的标题名获取改程序窗口的句柄

HWND hWnd=::FindWindow(NULL,"zhang001");

if(hWnd)

{

MessageBox("get windows");

//根据窗口句柄获取EDIT控件的ID,但是这个ID是通过VS工具spy++获取的

HWND h = ::GetDlgItem(hWnd,0x3E9);

if (h!=NULL)

{

CString str0;

//要知道SendMessage用法,特别是第三个参数

//根据EDIT控件的ID获取控件内容,存放到str0中

::SendMessage(h,WM_GETTEXT,20,(LPARAM)(LPCTSTR)str0);

//将获得的内容放到本程序指定的EDIT控件中进行显示

GetDlgItem(IDC_EDIT1)->SetWindowText(str0);

MessageBox(str0);

}

}

else

{

MessageBox("fail!");

}

运行结果如下:

采用以上程序由于采用CString,获取的内容大小不定,当制定的缓存和制定的大小不一样时就会产生一下的错误

整个程序改为一下代码,就好了:

//一个程序获取另一个程序Edit控件的内容

 //根据指定程序的标题名获取改程序窗口的句柄

 CString str;

 GetDlgItemText(IDC_TITLE,str);

 HWND hWnd=::FindWindow(NULL,str);//"zhang001"

 if(hWnd)

 {

 MessageBox("get windows");

 //根据窗口句柄获取EDIT控件的ID,但是这个ID是通过VS工具spy++获取的

 HWND h = ::GetDlgItem(hWnd,0x3E9);

 if (h!=NULL)

 {

 //CString str0;

 char temp[50];

 //要知道SendMessage用法,特别是第三个参数

 //根据EDIT控件的ID获取控件内容,存放到str0中

 ::SendMessage(h,WM_GETTEXT,sizeof(temp)/sizeof(char),(LPARAM)temp);//第三个和第四个参数是缓存大小和缓存指针

 //将获得的内容放到本程序指定的EDIT控件中进行显示

 GetDlgItem(IDC_EDIT1)->SetWindowText(temp);

 //MessageBox(str0);

 }

 }

 else

 {

 MessageBox("fail!");

 }

注:要想获取某控件的位置 可以使用下面的方法

GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件基于全频的位置
 ScreenToClient(rect);//转换为对话框上的相对位置

如何获取控件的ID

MFC::
CWnd *pWnd = GetFocus();
if(pWnd == NULL)
;//no focus
else
UINT nID = pWnd->GetDlgCtrlID();

SDK:
HWND hWnd = ::GetFocus();
if(hWnd == NULL)
;//no focus
else
UINT nID = ::GetDlgCtrlID(hWnd);

GetFocus: The return value is the handle to the window with the keyboard focus. If the calling thread‘s message queue does not have an associated window with the keyboard focus, the return value is NULL. 
时间: 2024-10-10 00:38:36

C++ 一个程序获取另一个程序Edit控件的内容的相关文章

VB.NET自动操作其他程序(4)--读取、设置其他软件listview控件的内容

4.3.读取其他软件listview控件的内容 4.3.0.根据窗口句柄,获取进程Id,打开并插入进程,申请代码的内存区,返回申请到的虚拟内存首地址        Dim processId As Integer         '进程pid           hwnd = FindWindow("#32770", "Windows 任务管理器")       '获取任务管理器窗口句柄,注释By Lyh         hwnd = FindWindowEx(hw

Stimulsoft Reports Designer.Silverlight是一个基于web的报表设计器控件

Stimulsoft Reports Designer.Silverlight是一个基于web的报表设计器控件,通过使用它您可以直接在web浏览器中更改您的报表控件.该产品使用Silverlight技术和ASP.NET开发.它不需要开发人员编写复杂的代码或很长的组件设置.您在服务器上使用的是一个简单的ASP.NET组件.Silverlight组件在客户端上运行.Stimulsoft Reports Designer.Silverlight拥有一个时尚的用户界面,加载迅速,运行速度快,并拥有丰富的

根据获取的窗口句柄遍历窗口Edit控件

网上说遍历窗口控件有两种方法: 1),使用EnumChildWindows,没有深究, 学习网址如下:http://blog.sina.com.cn/s/blog_60ac1c4b010116uj.html 2),使用::FindWindowEx和GetWindow组合 下面只说第二种方法, 首先根据标题获取窗口的句柄, HWND hWnd=::FindWindow(NULL,"zhang001"); findwindow原型: FindWindow(   lpClassName, 

如果写一个android桌面滑动切换屏幕的控件(三)

下面我们把这个控件内嵌到Layout中做一些动画和展示,效果图: 这个子控件可以上下移动,可以左右滑动,如果上下滑动距离大于左右滑动距离,则必须上下滑动 这样来写onTouch事件: @Override public boolean onTouchEvent(MotionEvent ev) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMov

如果写一个android桌面滑动切换屏幕的控件(二)

在viewgroup执行: public void snapToScreen(int whichScreen) { whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1)); boolean changingScreens = whichScreen != mCurrentScreen; mNextScreen = whichScreen; int mScrollX = this.getScrollX(); fin

如果写一个android桌面滑动切换屏幕的控件(一)

首先这个控件应该是继承ViewGroup: 初始化: public class MyGroup extends ViewGroup{ private Scroller mScroller; private float mOriMotionX; private float mLastMotionX; private VelocityTracker mVelocityTracker; private int mTouchState = TOUCH_STATE_REST; private static

一个能接受外部拖拽的控件(文字或文件)

恩....也是这2天写的一个小东西的需求, 可以拖拽外部文本文件, 或者选择的一段文本到Memo里显示 查了一下资料, 主要从2个方面实现: 1.拖拽文件实现WM_DROPFILES就可以了 2.拖拽文本需要实现IDropTarget接口 针对这个功能, 重新封装了一个Memo出来: TDropMemo = class(TMemo, IUnknown, IDropTarget) private FDropAccept: Boolean; FDTDropAccept: HResult; FFE:

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

关于Edit控件focused状态,调用自己编写的键盘

一.涉及编写自己的自己的键盘 由于只使用英文字母跟数字等简单的字符而已,没有包括全角或者中文字符.所以直接使用跟手机的输入密码键盘一样的键盘即可. 遇到的问题:1.使用法keybd_event()的方式进行发送消息,不管发送大小写字母都是显示小写字母 2.键盘不能有焦点状态,否则使用的keybd_event则无法将字符发送给edit框.如果使用有焦点的状态则会导致edit控件跟我自己编写的键盘耦合性太大. 3.由于使用duilib的tilelayout而出现键盘的所有按键无法正常对齐. 解决方案