C++ 主程序中打开子程序窗口隐藏,操作控件 遍历窗口控件句柄EnumChildWindows();获取其他程序进度条数据 操作选择框 按钮点击

1.线程启动子程序  ShowWindow(hWnd, SW_SHOW)显示 ShowWindow(hwnd, SW_HIDE);隐藏

	system_hide(L"Odin3.exe",SW_SHOW /*SW_HIDE*/); //SHOW是显示 HIDE是隐藏

	unsigned int tid = 0;
	HANDLE handle = (HANDLE)_beginthreadex(NULL, 0, FindWindowsThread, this, 0, &tid);
	CloseHandle(handle);

2.

EnumWindows函数(winuser.h)

通过将句柄传递给每个窗口,依次传递给应用程序定义的回调函数,可以枚举屏幕上所有的顶级窗口。EnumWindows继续,直到枚举最后一个顶级窗口或回调函数返回FALSE为止。

unsigned __stdcall FindWindowsThread(LPVOID lpParam) {

	while (1)
	{
		Sleep(1000);
		EnumWindows(EnumWindowProc, NULL);
	}

	return 0;
}

3.开始操作 使用spy++抓取子程序控件ID

BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
	TCHAR szClass[256] = { 0 };
	TCHAR szString[1024] = { 0 };
	::GetWindowText(hWnd, szString, 255); //获取窗口标题
	::GetClassName(hWnd, szClass, 255); //获取窗口类名称
	if (::IsWindow(hWnd) &&   //判断是否为一个窗口
		::IsWindowVisible(hWnd) &&  //如果指定的窗口及其父窗口具有WS_VISIBLE风格即可见窗口
		(::GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOOLWINDOW) != WS_EX_TOOLWINDOW &&
		::GetWindowLong(hWnd, GWL_HWNDPARENT) == 0)
	{
		int i = wcslen(szClass);
		TCHAR* cFind = NULL;
		//CString str = szWindow;
		cFind = wcsstr(szString, _T("Odin3 v3.1"));  //找到程序的名字
		if (cFind)
		{
			HWND hChild = ::GetDlgItem(hWnd, 0x0412); 
			if (hChild == NULL)
			{
				ASSERT(FALSE);
				return FALSE;
			}
			TCHAR* pBuf = L"M:\\samsung-tblte-smn915f-t5.tar.md5";
			SendMessage(hChild, WM_SETTEXT, lstrlenW(pBuf), (LPARAM)(void*)pBuf); //添加文本到控件

			hChild = ::GetDlgItem(hWnd, 0x0407); //修改控件状态
			if (hChild == NULL)
			{
				ASSERT(FALSE);
				return FALSE;
			}
			::CheckDlgButton(hWnd, 0x0407, TRUE);  //点击复选框
			//SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(0x0407, BN_CLICKED), NULL);
			//SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(0x0404, BN_CLICKED), NULL);

			hChild = ::GetDlgItem(hWnd, 0x0404);
			if (hChild == NULL)
			{
				ASSERT(FALSE);
				return FALSE;
			}


			hChild = ::GetDlgItem(hWnd, 0x0403);
			if (hChild == NULL)
			{
				ASSERT(FALSE);
				return FALSE;
			}
			int iTry = 5;
			while (iTry)
			{
				memset(szString, 0, 1024 * sizeof(TCHAR));
				SendMessage(hChild, WM_GETTEXT, 1024, (LPARAM)(void*)szString);
				i = wcslen(szString);
				if (i > 0)
				{
					break;
				}
				iTry--;
				Sleep(1000);
			}
			if (0 == iTry)
			{
				ASSERT(FALSE);
			}
			return FALSE;
		}
	}

	return TRUE;
}

 

4.获取窗口句柄:

    HWND Hwnd = ::FindWindow(NULL, L"Odin3"); //获取句柄api
    HWND hChild = ::GetDlgItem(Hwnd, 0x02);
    if (hChild == NULL)
    {
        ASSERT(FALSE);
    }
     SendMessage(Hwnd, WM_COMMAND, MAKEWPARAM(0x02, BM_CLICK), NULL);

获取其他软件的界面显示数据:

    //获取其他软件控件文本信息
    HWND hWnd = ::FindWindow(NULL, L"SamFirm");
    if (hWnd)
    {
        //根据窗口句柄获取EDIT控件的ID,但是这个ID是通过VS工具spy++获取的
        HWND h = ::GetDlgItem(hWnd, 0x00030EEE); //获取的是一个主控件里面的子控件需要多层
        HWND h2 = ::GetDlgItem(h, 0x00050CC8); 
        if (h2 != NULL)
        {
            CString str0;
            //要知道SendMessage用法,特别是第三个参数
            //根据EDIT控件的ID获取控件内容,存放到str0中
            ::SendMessage(h2, WM_GETTEXT, 20, (LPARAM)(LPCTSTR)str0);
            //将获得的内容放到本程序指定的EDIT控件中进行显示
            return str0;
        }
    }

遍历窗口句柄::EnumChildWindows(hWnd, HideAllWin, (LPARAM)hWnd);使用



BOOL CALLBACK HideAllWin(HWND hwnd, LPARAM pParam)
{
	HWND phWnd = (HWND)pParam; // 指定窗口的句柄
	if (NULL == hwnd) { return FALSE; } //返回false遍历结束

	if (::IsWindow(hwnd))
	{
		// 对控件进行操作
		//	ShowWindow(hwnd, SW_HIDE);隐藏操作

	}
	return TRUE;
}

::EnumChildWindows(hWnd, HideAllWin, (LPARAM)hWnd);//调用

获取其他程序进度条数据:

UINT   uint = ::SendMessage(控件的ID或句柄, PBM_GETPOS, 0, 0);

操作选择框:

    HWND IDhWnd2 = ::GetDlgItem(RighthWnd, m_vec[23]);  //23 -- Auto选择框
    AA = ::SendMessage(IDhWnd2, WM_KEYDOWN, VK_SPACE, 0);
    AA = ::SendMessage(IDhWnd2, WM_KEYUP, VK_SPACE, NULL);

  按钮点击:

 HWND IDhWnd3 = ::GetDlgItem(RighthWnd, m_vec[28]);  // 28 -- Check Update 下载按钮
    AA = SendMessage(IDhWnd3, WM_LBUTTONDOWN,0, 0);
    AA = SendMessage(IDhWnd3, WM_LBUTTONUP,0, 0);

 

 

消息大全:

 hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

      wMsg 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量.

     wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
     lParam 通常是一个指向内存中数据的指针。由于WParm、lParam和Pointer都是32位的,因此,它们之间可以相互转换

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

wMsg
WM_CREATE 创建一个窗口
WM_DESTROY 当一个窗口被破坏时发送
WM_MOVE 移动一个窗口
WM_SIZE 改变一个窗口的大小
WM_ACTIVATE 一个窗口被激活或失去激活状态
WM_SETFOCUS 一个窗口获得焦点
WM_KILLFOCUS 一个窗口失去焦点
WM_ENABLE 一个窗口改变成Enable状态
WM_SETREDRAW 设置窗口是否能重画
WM_SETTEXT 应用程序发送此消息来设置一个窗口的文本
WM_GETTEXT 应用程序发送此消息来复制对应窗口的文本到缓冲区
WM_GETTEXTLENGTH 得到与一个窗口有关的文本的长度(不包含空字符)
WM_PAINT 要求一个窗口重画自己
WM_CLOSE 当一个窗口或应用程序要关闭时发送一个信号
WM_QUERYENDSESSION 当用户选择结束对话框或程序自己调用ExitWindows函数
WM_QUIT 用来结束程序运行
WM_QUERYOPEN 当用户窗口恢复以前的大小位置时,把此消息发送给某个图标
WM_ERASEBKGND 当窗口背景必须被擦除时(例在窗口改变大小时)
WM_SYSCOLORCHANGE 当系统颜色改变时,发送此消息给所有顶级窗口
WM_ENDSESSION 当系统进程发出 WM_QUERYENDSESSION消息后,此消息发送给应用程序,通知它对话是否结束
WM_SHOWWINDOW 当隐藏或显示窗口是发送此消息给这个窗口
WM_ACTIVATEAPP 发此消息给应用程序哪个窗口是激活的,哪个是非激活的
WM_FONTCHANGE 当系统的字体资源库变化时发送此消息给所有顶级窗口
WM_TIMECHANGE 当系统的时间变化时发送此消息给所有顶级窗口
WM_CANCELMODE 发送此消息来取消某种正在进行的摸态(操作)
WM_SETCURSOR 如果鼠标引起光标在某个窗口中移动且鼠标输入没有被捕获时,就发消息给某个窗口
WM_MOUSEACTIVATE 当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给当前窗口
WM_CHILDACTIVATE 发送此消息给MDI子窗口当用户点击此窗口的标题栏,或当窗口被激活,移动,改变大小
WM_QUEUESYNC 此消息由基于计算机的训练程序发送,通过WH_JOURNALPALYBACK的hook程序分离出用户输入消息
WM_GETMINMAXINFO 此消息发送给窗口当它将要改变大小或位置
WM_PAINTICON 发送给最小化窗口当它图标将要被重画
WM_ICONERASEBKGND 此消息发送给某个最小化窗口,仅当它在画图标前它的背景必须被重画
WM_NEXTDLGCTL 发送此消息给一个对话框程序去更改焦点位置
WM_SPOOLERSTATUS 每当打印管理列队增加或减少一条作业时发出此消息
WM_DRAWITEM 当button,combobox,listbox,menu的可视外观改变时发送
WM_MEASUREITEM 当button, combo box, list box, list view control, or menu item 被创建时
WM_VKEYTOITEM 此消息有一个LBS_WANTKEYBOARDINPUT风格的发出给它的所有者来响应WM_KEYDOWN消息
WM_CHARTOITEM 此消息由一个LBS_WANTKEYBOARDINPUT风格的列表框发送给他的所有者来响应WM_CHAR消息
WM_SETFONT 当绘制文本时程序发送此消息得到控件要用的颜色
WM_GETFONT 应用程序发送此消息得到当前控件绘制文本的字体
WM_SETHOTKEY 应用程序发送此消息让一个窗口与一个热键相关连
WM_GETHOTKEY 应用程序发送此消息来判断热键与某个窗口是否有关联
WM_QUERYDRAGICON 此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标,应用程序能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标
WM_COMPAREITEM 发送此消息来判定combobox或listbox新增加的项的相对位置
WM_COMPACTING 显示内存已经很少了
WM_WINDOWPOSCHANGING 发送此消息给那个窗口的大小和位置将要被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_WINDOWPOSCHANGED 发送此消息给那个窗口的大小和位置已经被改变时,来调用setwindowpos函数或其它窗口管理函数
WM_POWER 当系统将要进入暂停状态时发送此消息
WM_COPYDATA 当一个应用程序传递数据给另一个应用程序时发送此消息
WM_CANCELJOURNA 当某个用户取消程序日志激活状态,提交此消息给程序
WM_NOTIFY 当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口
WM_INPUTLANGCHANGEREQUEST 当用户选择某种输入语言,或输入语言的热键改变
WM_INPUTLANGCHANGE 当平台现场已经被改变后发送此消息给受影响的最顶级窗口
WM_TCARD 当程序已经初始化windows帮助例程时发送此消息给应用程序
WM_HELP 此消息显示用户按下了F1,如果某个菜单是激活的,就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口,如果当前都没有焦点,就把此消息发送给当前激活的窗口
WM_USERCHANGED 当用户已经登入或退出后发送此消息给所有的窗口,当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息
WM_NOTIFYformAT 公用控件,自定义控件和他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构
WM_CONTEXTMENU 当用户某个窗口中点击了一下右键就发送此消息给这个窗口
WM_styleCHANGING 当调用SETWINDOWLONG函数将要改变一个或多个 窗口的风格时发送此消息给那个窗口
WM_styleCHANGED 当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口
WM_DISPLAYCHANGE 当显示器的分辨率改变后发送此消息给所有的窗口
WM_GETICON 此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄
WM_SETICON 程序发送此消息让一个新的大图标或小图标与某个窗口关联
WM_NCCREATE 当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送
WM_NCDESTROY 此消息通知某个窗口,非客户区正在销毁
WM_NCCALCSIZE 当某个窗口的客户区域必须被核算时发送此消息
WM_NCHITTEST 移动鼠标,按住或释放鼠标时发生
WM_NCPAINT 程序发送此消息给某个窗口当它(窗口)的框架必须被绘制时
WM_NCACTIVATE 此消息发送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态
WM_GETDLGCODE 发送此消息给某个与对话框程序关联的控件,widdows控制方位键和TAB键使输入进入此控件通过应
WM_NCMOUSEMOVE 当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体
WM_NCLBUTTONDOWN 当光标在一个窗口的非客户区同时按下鼠标左键时提交此消息
WM_NCLBUTTONUP 当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息
WM_NCLBUTTONDBLCLK 当用户双击鼠标左键同时光标某个窗口在非客户区十发送此消息
WM_NCRBUTTONDOWN 当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONUP 当用户释放鼠标右键同时光标又在窗口的非客户区时发送此消息
WM_NCRBUTTONDBLCLK 当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息
WM_NCMBUTTONDOWN 当用户按下鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONUP 当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_NCMBUTTONDBLCLK 当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息
WM_KEYFIRST WM_KEYDOWN 按下一个键
WM_KEYUP 释放一个键
WM_CHAR 按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息
WM_DEADCHAR 当用translatemessage函数翻译
WM_KEYUP消息时发送此消息给拥有焦点的窗口
WM_SYSKEYDOWN 当用户按住ALT键同时按下其它键时提交此消息给拥有焦点的窗口
WM_SYSKEYUP 当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口
WM_SYSCHAR 当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后提交此消息给拥有焦点的窗口
WM_SYSDEADCHAR 当WM_SYSKEYDOWN消息被TRANSLATEMESSAGE函数翻译后发送此消息给拥有焦点的窗口
WM_INITDIALOG 在一个对话框程序被显示前发送此消息给它,通常用此消息初始化控件和执行其它任务
WM_COMMAND 当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译
WM_SYSCOMMAND 当用户选择窗口菜单的一条命令或当用户选择最大化或最小化时那个窗口会收到此消息
WM_TIMER 发生了定时器事件
WM_HSCROLL 当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口,也发送给拥有它的控件
WM_VSCROLL 当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件
WM_INITMENU 当一个菜单将要被激活时发送此消息,它发生在用户菜单条中的某项或按下某个菜单键,它允许程序在显示前更改菜单
WM_INITMENUPOPUP 当一个下拉菜单或子菜单将要被激活时发送此消息,它允许程序在它显示前更改菜单,而不要改变全部
WM_MENUSELECT 当用户选择一条菜单项时发送此消息给菜单的所有者(一般是窗口)
WM_MENUCHAR 当菜单已被激活用户按下了某个键(不同于加速键),发送此消息给菜单的所有者
WM_ENTERIDLE 当一个模态对话框或菜单进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列队中等待
WM_CTLCOLORMSGBOX 在windows绘制消息框前发送此消息给消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本和背景颜色
WM_CTLCOLOREDIT 当一个编辑型控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本和背景颜色
WM_CTLCOLORLISTBOX 当一个列表框控件将要被绘制前发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色
WM_CTLCOLORBTN 当一个按钮控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色
WM_CTLCOLORDLG 当一个对话框控件将要被绘制前发送此消息给它的父窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色
WM_CTLCOLORSCROLLBAR 当一个滚动条控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色
WM_CTLCOLORSTATIC 当一个静态控件将要被绘制时发送此消息给它的父窗口 通过响应这条消息,所有者窗口可以 通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色
WM_MOUSEFIRST WM_MOUSEMOVE 移动鼠标
WM_LBUTTONDOWN 按下鼠标左键
WM_LBUTTONUP 释放鼠标左键
WM_LBUTTONDBLCLK 双击鼠标左键
WM_RBUTTONDOWN 按下鼠标右键
WM_RBUTTONUP 释放鼠标右键
WM_RBUTTONDBLCLK 双击鼠标右键
WM_MBUTTONDOWN 按下鼠标中键
WM_MBUTTONUP 释放鼠标中键
WM_MBUTTONDBLCLK 双击鼠标中键
WM_MOUSEWHEEL 当鼠标轮子转动时发送此消息个当前有焦点的控件
WM_PARENTNOTIFY 当MDI子窗口被创建或被销毁,或用户按了一下鼠标键而光标在子窗口上时发送此消息给它的父窗口
WM_ENTERMENULOOP 发送此消息通知应用程序的主窗口that已经进入了菜单循环模式
WM_EXITMENULOOP 发送此消息通知应用程序的主窗口that已退出了菜单循环模式
WM_SIZING 当用户正在调整窗口大小时发送此消息给窗口 通过此消息应用程序可以监视窗口大小和位置也可以修改他们
WM_CAPTURECHANGED 发送此消息 给窗口当它失去捕获的鼠标时
WM_MOVING 当用户在移动窗口时发送此消息,通过此消息应用程序可以监视窗口大小和位置也可以修改他们
WM_POWERBROADCAST 此消息发送给应用程序来通


知它有关电源管理事件
WM_DEVICECHANGE 当设备的硬件配置改变时发送此消息给应用程序或设备驱动程序
WM_MDIDESTROY 应用程序发送此消息给多文档的客户窗口来关闭一个MDI 子窗口
WM_MDIACTIVATE 应用程序发送此消息给多文档的客户窗口通知客户窗口激活另一个MDI子窗口,当客户窗口收到此消息后,它发出WM_MDIACTIVE消息给MDI子窗口(未激活)激活它
WM_MDIRESTORE 程序 发送此消息给MDI客户窗口让子窗口从最大最小化恢复到原来大小
WM_MDINEXT 程序 发送此消息给MDI客户窗口激活下一个或前一个窗口
WM_MDIMAXIMIZE 程序发送此消息给MDI客户窗口来最大化一个MDI子窗口
WM_MDITILE 程序 发送此消息给MDI客户窗口以平铺方式重新排列所有MDI子窗口
WM_MDICASCADE 程序 发送此消息给MDI客户窗口以层叠方式重新排列所有MDI子窗口
WM_MDIICONARRANGE 程序 发送此消息给MDI客户窗口重新排列所有最小化的MDI子窗口
WM_MDIGETACTIVE 程序 发送此消息给MDI客户窗口来找到激活的子窗口的句柄
WM_MDISETMENU 程序 发送此消息给MDI客户窗口用MDI菜单代替子窗口的菜单
WM_CUT 程序发送此消息给一个编辑框或combobox来删除当前选择的文本
WM_COPY 程序发送此消息给一个编辑框或combobox来复制当前选择的文本到剪贴板
WM_PASTE 程序发送此消息给editcontrol或combobox从剪贴板中得到数据
WM_CLEAR 程序发送此消息给editcontrol或combobox清除当前选择的内容
WM_UNDO 程序发送此消息给editcontrol或combobox撤消最后一次操作
WM_DESTROYCLIPBOARD 当调用ENPTYCLIPBOARD函数时 发送此消息给剪贴板的所有者
WM_DRAWCLIPBOARD 当剪贴板的内容变化时发送此消息给剪贴板观察链的第一个窗口 它允许用剪贴板观察窗口来显示剪贴板的新内容
WM_PAINTCLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区需要重画
WM_SIZECLIPBOARD 当剪贴板包含CF_OWNERDIPLAY格式的数据并且剪贴板观察窗口的客户区域的大小已经改变是此消息通过剪贴板观察窗口发送给剪贴板的所有者
WM_ASKCBformATNAME 通过剪贴板观察窗口发送此消息给剪贴板的所有者来请求一个CF_OWNERDISPLAY格式的剪贴板的名字
WM_CHANGECBCHAIN 当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的第一个窗口
WM_HSCROLLCLIPBOARD 此消息通过一个剪贴板观察窗口发送给剪贴板的所有者 它发生在当剪贴板包含CFOWNERDISPALY格式的数据并且有个事件在剪贴板观察窗的水平滚动条上 所有者应滚动剪贴板图象并更新滚动条的值
WM_QUERYNEWPALETTE 此消息发送给将要收到焦点的窗口,此消息能使窗口在收到焦点时同时有机会实现他的逻辑调色板
WM_PALETTEISCHANGING 当一个应用程序正要实现它的逻辑调色板时发此消息通知所有的应用程序
WM_PALETTECHANGED 此消息在一个拥有焦点的窗口实现它的逻辑调色板后发送此消息给所有顶级并重叠的窗口,以此来改变系统调色板
WM_HOTKEY 当用户按下由REGISTERHOTKEY函数注册的热键时提交此消息
WM_PRINT 应用程序发送此消息仅当WINDOWS或其它应用程序发出一个请求要求绘制一个应用程序的一部分

Buttons

BM_CLICK button被点击 消息

BM_GETCHECK 用于check boxes 或radio boxes 。查看 是否 checked 了。

BM_GETSTATE 发送此消息,可返回 button 的状态,如 是否被 checked;是否 可用(不可用就 变灰了)

BM_SETCHECK 如果 已经 checked 了,发送此消息后,变为 unchecked,就是 那个钩钩 没被 选上。ok?

BM_SETSTATE 设置 button被 点击 状态。

====================

Combo Boxes

CB_ADDSTRING 添加 字符串到 Combo Boxes 。

CB_DELETESTRING 删除 Combo Boxes 中的 条目,既 item

CB_GETCOUNT 得到 Combo Boxes 条目 item 的 数目

CB_GETCURSEL 返回 Combo Boxes 中被选 条目 在 Combo Boxes 中 的位置,第一条为0 。

如果 没有 条目或出错,则返回 -1

CB_GETDROPPEDSTATE 发送此消息,可判断 Combo Boxes 的list box 是否被 放下,如果 是,返回 非零值,不是,则 返回 0

CB_GETLBTEXT 得到 combo box 的 条目 的text。 返回值 是 这个text 的长度。

CB_GETLBTEXTLEN 返回值 是 条目的 text 的长度。

CB_INSERTSTRING 插入 字符串 条目到 combo box 中

CB_RESETCONTENT 清空 combo box 所有条目

CB_SETCURSEL 设置 combo box 被选 条目。

CB_SHOWDROPDOWN 让 combo box 的listbox 下拉。 既 显出 所有 条目

===================

Edit Controls

EM_CANUNDO 决定 上一次操作 是否可以 undo (撤消操作)。如果可以,则可发送 EM_undo

EM_GETFIRSTVISIBLELINE 在 multi-line 控件中,找到 最上层的 可见的 行号。次行号是相对于 所有行的。

EM_GETPASSWORDCHAR 返回 密码框的 字符集。既 是查看密码。

EM_GETSEL 返回在 可编辑 控件中 ,被选择(HIGHLIGHT高量选择)的字符集 的 起点 和终点的 位置。

用 sendmessage 的wParam 参数 返回 起点位置,lParam 返回 终点位置

EM_REPLACESEL 用不同的字符串 替换 可编辑 控件 中的 字符串,如果 可编辑 控件中 没有 字符串,则 此消息变为 添加 字符串

EM_SETPASSWORDCHAR 在可编辑 控件中 设置 密码字符集 ,既 用* 代替

EM_UNDO 发送 操作 撤消 消息。

======================

IP Address Control

===================

IPM_CLEARADDRESS 清除 IP 地址控件(IP Address control)的内容

IPM_GETADDRESS 从IP 地址控件 获得 存储在 它中的 IP 地址 信息/

IPM_ISBLANK 决定 IP 地址控件 是否可以为 空值。既 127.0.0.1 之类的地址 为 空。

IPM_SETADDRESS 在 IP 地址控件中设置 IP 地址。

IPM_SETFOCUS 在 IP 地址控件中,当需要输入 IP 地址时, 使之获得 键盘输入 焦点

IPM_SETRANGE 设置 输入IP 地址的有效范围

=====================

Media Control Interface (MCI)

=============================

MM_MCINOTIFY 告诉 窗体 MCI 命令 完成的状态. 这个 状态包括 success, failure, 或 其它事件

Menus

=============================

WM_COMMAND 当 用户 选择 菜单中的 项目后,将向 窗体 发送此消息. 窗体 受到 此消息后,再 决定 下一个 行为

WM_INITMENU 当 菜单 准备 显示 前,向 窗体发送 此消息, 窗体 将 初始化 菜单 项.

WM_SYSCOMMAND 向 窗体 发送 用户点击 系统菜单 消息. 窗体将 响应 这个消息 ,决定 下个 行为.

================

Windows

=====================

WM_CLOSE 发送 让窗体关闭的消息,有些窗体会 在此时 弹出个 关闭对话框。

WM_GETTEXT 返回 窗体 标题栏 (caption 属性)。 需要先 用WM_GETTEXTLENGTH 获得 字符串长度

WM_GETTEXTLENGTH 见上!

WM_HELP 发送此 消息后,将 显示 指定的 HELP 文件

WM_SETTEXT 设置 窗体 标题栏 。

==============================

List Boxes

===============

LB_ADDSTRING 在条目中添加 字符串

LB_DELETESTRING 删除一个 条目. 条目 序号是从 0 开始的.

LB_GETCOUNT 得到 条目总数.

LB_GETCURSEL 得到 单选 的list box 的 选项条目的 序号

LB_GETSEL 判断 list 的 条目 是否被选上, 如果 选上了,则返回 >0 的值.否则 返回 0 ,表示 用户没选择条目

LB_GETSELCOUNT 获得 可多选 的list , 被用户选择的条目的个数.

LB_GETSELITEMS 返回 可多选的list 的 被选条目的 序号. 可返回 数组.

LB_GETTEXT 得到 list中的 一个 条目的 text 值

LB_GETTEXTLEN 得到 list中的 一个 条目的 text 值的长度

LB_INSERTSTRING 在list 中,插入 一个条目。如果成功,将返回 插入后,此条目的序号。

LB_RESETCONTENT 清空 所有的 list 中的 条目。

LB_SETCURSEL 对单选 的list box, 设定 用户 选择条目的 具体值

LB_SETSEL 对多选 的list box, 设定 用户 选择条目的 具体值

=======================================================

Mouse

==================

WM_LBUTTONDBLCLK 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已双击 。返回值 0

WM_LBUTTONDOWN 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已点击,返回值 0

WM_LBUTTONUP 当鼠标在一个窗体范围内时,告诉此窗体 鼠标左键 已释放,返回值 0

WM_MBUTTONDBLCLK 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已双击 。返回值 0

WM_MBUTTONDOWN 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已点击,返回值 0

WM_MBUTTONUP 当鼠标在一个窗体范围内时,告诉此窗体 鼠标中键 已释放,返回值 0


SendMessage用例

SendMessage(hWnd,WM_SETFOCUS,0,0);
SendMessage(hWnd,WM_ACTIVATE,1,0);

SendMessage(hWnd,WM_KEYDOWN,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_CHAR,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_KEYUP,VK_TAB,0xc00f0001);
SendMessage(hWnd,WM_KEYDOWN,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_CHAR,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_KEYUP,VK_TAB,0xc00f0001);
SendMessage(hWnd,WM_KEYDOWN,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_CHAR,VK_TAB,0x000f0001);
SendMessage(hWnd,WM_KEYUP,VK_TAB,0xc00f0001);
SendMessage(hWnd,WM_KEYDOWN,VK_RETURN,0x001c0001);
SendMessage(hWnd,WM_CHAR,VK_RETURN,0x001c0001);
SendMessage(HWND, WM_SYSCOMMAND, SC_MAXIMIZE, ByVal 0&)    '最大化

SendMessage HWND, WM_SHOWWINDOW, SW_HIDE, vbNull '隐藏窗体
SendMessage HWND, WM_SHOWWINDOW, SW_NORMAL, vbNull '显示窗体

SendMessage(HWND, CB_SHOWDROPDOWN, -1, -1) '显示Combo1.hwnd下拉列表

SendMessage (Combo1.hWnd, CB_SHOWDROPDOWN, 0, 0 )    '不下拉

SendMessage(HWND, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)   '关闭
SendMessage(HWND, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0&) '最小化
SendMessage(HWND, WM_PASTE, 0, 0) '粘贴
SendMessage(HWND, WM_COPY, 0, 0)   '复制
SendMessage(HWND, WM_UNDO, 0, 0)    '撤消
SendMessage(HWND, WM_SETTEXT, 0, ByVal new_caption)     'f发文本信息
SendMessage(HWND, WM_KEYDOWN, Asc("b"), 0&)    '发送按键 只能用于 控件 不能用与整个窗体或进程
SendMessage(HWND, WM_LBUTTONDOWN, MK_LBUTTON, ByVal &H10001) '鼠标模拟
WindowFromPoint(Cursor.x, Cursor.y) '获得鼠标当前句柄
GetPixel(dc, Cursor.x, Cursor.y) '获取鼠标点颜色
SendMessage(HWND, WM_CUT, 0, 0)    '剪切 但单击按钮会使其失去焦点 这里不做演示

获得光标位置和字符个数.
Cpos = SendMessage(Text1.hwnd, 187, -1, 0) '光标所在行的首字符在文本中的位置
Lpos = SendMessage(Text1.hwnd, 201, Cpos, 0) '光标所在的行号
Line = SendMessage(Text1.hwnd, 193, Cpos, 0) '这行的字符数.
SendMessage (Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0 )'关闭显示器.
SendMessage Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1 ')打开显示器
SendMessage(mText.hwnd, EM_GETRECT, 0, rc) '获得窗口区域的边界

SendMessage hWnd, WM_KEYDOWN, VK_CONTROL, ByVal 0& )
SendMessage hWnd, WM_KEYDOWN, VK_X, ByVal 0&)
SendMessage hWnd, WM_KEYUP, VK_X, ByVal 0& )
SendMessage hWnd, WM_KEYUP, VK_CONTROL, ByVal 0&)
 

 

 

 

 

 

 

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 获取窗口句柄是指在 Windows 系统,每个窗口都有一个唯一的标识符,称为窗口句柄。使用窗口句柄,可以通过编程的方式来访问和操作窗口控件。 在获取窗口句柄之后,需要先通过函数 EnumChildWindows()来查找窗口的所有子控件,以便获取它们的句柄。然后可以使用这些子控件句柄操作它们,如获取它们的文本内容、设置它们的属性、发送消息等。 在 Windows 系统编程,常用的操作窗口控件的函数包括 SendMessage()、GetDlgItem()、SetDlgItemText() 等。 sendMessage()是向窗口控件发送消息的函数; GetDlgItem() 是用来获取指定窗口控件句柄的函数; SetDlgItemText() 则是用来在一个对话获取或设置控件的文本内容。 需要注意的是,在操作窗口控件时,可能会遇到控件没有被正确注册或者不可见、不可用等问题。因此,需要先检查控件的状态,在保证控件可用之后再进行操作才是安全可靠的。 总之,获取窗口句柄以后,可以通过编程的方式来访问和操作窗口控件,这些操作对于 Windows 系统编程非常重要。 ### 回答2: 在获取窗口句柄后,我们可以通过窗口句柄操作窗口内的控件操作方式的具体实现方法取决于控件的类型。不同类型的控件有不同的操作方法,比如文本按钮、列表等等。下面以文本按钮为例,介绍如何操作窗口内的控件操作文本: 1. 获取文本句柄:我们可以使用 FindWindowEx 函数来获取窗口内的文本句柄。该函数需要传入窗口句柄控件类型和控件类名(可选)三个参数,通过这些参数,函数会返回指定类型和类名的控件句柄。 2. 设置文本内容:获取文本句柄后,我们可以使用 SendMessage 函数来向文本发送消息,从而改变其内容。SendMessage 函数需要传入文本句柄、消息类型和消息参数,其消息类型和参数需根据实际情况而定。例如,如果要设置文本的文本内容,我们可以使用 WM_SETTEXT 消息来发送文本内容参数给文本操作按钮: 1. 获取按钮句柄:我们可以使用 FindWindowEx 函数来获取窗口内的按钮句柄。该函数需要传入窗口句柄控件类型和控件类名(可选)三个参数,通过这些参数,函数会返回指定类型和类名的控件句柄。 2. 点击按钮获取按钮句柄后,我们可以使用 SendMessage 函数来向按钮发送点击消息,从而模拟用户点击按钮操作。SendMessage 函数需要传入按钮句柄、消息类型和消息参数,其消息类型需使用 BM_CLICK 来模拟按钮点击操作。 总之,获取窗口句柄后,我们可以使用不同的函数和消息来对窗口内的控件进行操作,实现对程序的自动化控制。但是,需要注意的是,这些操作需要有足够的权限才能进行,否则会出现访问被拒绝等错误。同时,这种自动化控制也需要谨慎使用,避免对其他程序造成影响或不必要的损害。 ### 回答3: 获取窗口句柄是进行Windows编程时的基本操作,它可以让我们在程序获得对特定窗口句柄,从而操作窗口内的控件(如按钮、文本等)。 在Windows编程,要通过API函数获取窗口句柄,常用的API函数有FindWindow、FindWindowEx、GetDlgItem等。FindWindow函数是用于查找顶层窗口的,它需要传入窗口类名和窗口标题作为参数,如果找到符合条件的窗口,则返回窗口句柄。FindWindowEx函数则是用于查找子窗口的,除了类名和标题外,还需要传入父窗口句柄。GetDlgItem函数用于获取特定窗口句柄内的控件句柄,它需要传入窗口句柄控件ID作为参数。 获取窗口句柄之后,就可以使用API函数或者SendMessage、PostMessage等函数操作窗口内的控件。例如,可以使用SendMessage函数向某个控件发送消息,弹出一个对话,或者改变控件的状态等。 总之,获取窗口句柄可以让我们在Windows编程更灵活地操作窗口内的控件,但需要注意的是,在操作控件时,要确保句柄控件的ID等参数正确无误,以免产生意外的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值