将一个线程的输入处理机制附加到或分离另一个线程的输入处理机制。
通过使用 attach_thread_input 函数,线程可以共享其输入状态 (例如键盘状态,当前焦点窗口) 另一个线程。 通过再次调用 attach_thread_input 并为 attach 参数指定 FALSE,将按照两个线程接收的顺序处理这两个线程接收的键盘和鼠标事件,直到这些线程被分离。
如果任一指定的线程没有消息队列, 则此函数将失败。当线程首次调用 USER 或 GDI 函数之一时,系统会创建线程的消息队列。
如果安装了日志记录挂钩, attach_thread_input 函数也会失败。日志记录挂钩将所有输入队列附加到一起。
请注意,键状态(可通过调用 get_key_state 或 get_keyboard_state 函数确定)在调用 attach_thread_input 后重置。
不能将线程附加到另一个桌面中的线程。
id_attach 要附加到另一个线程的线程的标识符。要附加的线程不能是系统线程。
id_attach_to 将附加到的线程的标识符。此线程不能是系统线程。线程无法附加到自身。因此, id_attach_to 不能等于 id_attach。
attach 如果此参数为 TRUE,则附加两个线程。如果参数为 FALSE,则分离线程。
播放一个声音。
freq 声音频率(Hz)
duration 持续时间(毫秒)
调用下一个钩子函数。
code 传递给当前挂钩过程的挂钩代码。 下一个挂钩过程使用此代码来确定如何处理挂钩信息。
w_param 传递给当前挂钩过程的 wParam 值。 此参数的含义取决于与当前挂钩链关联的挂钩类型。
l_param 传递给当前挂钩过程的 lParam 值。 此参数的含义取决于与当前挂钩链关联的挂钩类型。
关闭打开的对象句柄。
h_object 打开对象的有效句柄。
创建具有扩展窗口样式的重叠窗口、弹出窗口或子窗口。
create_window_ex 函数将WM_NCCREATE、WM_NCCALCSIZE和WM_CREATE消息发送到正在创建的窗口。
如果创建的窗口是子窗口,则其默认位置位于 Z 顺序的底部。 如果创建的窗口是顶级窗口,则其默认位置位于 Z 顺序 (的顶部,但位于所有最顶层窗口下方,除非创建的窗口本身是最顶层) 。
有关控制任务栏是否显示已创建窗口按钮的信息,请参阅 管理任务栏按钮。
有关删除窗口的信息,请参阅 destroy_window 函数。
可以在 class_name 参数中指定以下预定义控件类。 请注意可在 style 参数中使用的相应控件样式。
类 | 含义
BUTTON | 指定一个小矩形子窗口,该窗口表示用户可以单击以将其打开或关闭的按钮。 按钮控件可以单独使用,也可以成组使用,并且可以不带文本标记或显示。 当用户单击按钮控件时,按钮控件通常会更改外观。 有关详细信息,请参阅 按钮。有关可在 style 参数中指定的按钮样式表,请参阅 按钮样式。
COMBOBOX | 指定由列表框和类似于编辑控件的选择字段组成的控件。 使用此样式时,应用程序应随时显示列表框或启用下拉列表框。 如果列表框可见,在选择字段中键入字符会突出显示与键入的字符匹配的第一个列表框条目。 相反,选择列表框中的项会在选择字段中显示所选文本。 有关详细信息,请参阅 组合框。有关可以在 style 参数中指定的组合框样式表,请参阅 组合框样式。
EDIT | 指定一个矩形子窗口,用户可以从键盘键入文本。 用户选择控件,并通过单击控件或通过按 TAB 键移动到控件来为它提供键盘焦点。 编辑控件显示闪烁的插入点时,用户可以键入文本;使用鼠标移动光标,选择要替换的字符,或定位光标以插入字符:或使用 键删除字符。 有关详细信息,请参阅 编辑控件。有关可在 style 参数中指定的编辑控件样式的表,请参阅 编辑控件样式。
LISTBOX | 指定字符串列表。 每当应用程序必须提供用户可从中选择的名称列表(如文件名)时,请指定此控件。 用户可以通过单击来选择字符串。 突出显示所选字符串,并将通知消息传递到父窗口。 有关详细信息,请参阅 列表框。有关可在 style 参数中指定的列表框样式表,请参阅 列表框样式。
MDICLIENT | 指定 MDI 客户端窗口。 此窗口接收控制 MDI 应用程序的子窗口的消息。 建议的样式位是 WS_CLIPCHILDREN 和 WS_CHILD。 指定 WS_HSCROLL 和 WS_VSCROLL 样式以创建允许用户将 MDI 子窗口滚动到视图中的 MDI 客户端窗口。 有关详细信息,请参阅 多文档接口。
RichEdit | 指定 Microsoft Rich Edit 1.0 控件。 此窗口允许用户使用字符和段落格式查看和编辑文本,并且可以将嵌入式组件对象模型 (COM) 对象。 有关详细信息,请参阅 Rich Edit 控件。有关可以在 style 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。
RICHEDIT_CLASS | 指定 Microsoft Rich Edit 2.0 控件。 此控件允许用户使用字符和段落格式查看和编辑文本,并且可以包含嵌入的 COM 对象。 有关详细信息,请参阅 Rich Edit 控件。有关可以在 style 参数中指定的丰富编辑控件样式的表,请参阅 Rich Edit 控件样式。
SCROLLBAR | 指定一个矩形,该矩形包含一个滚动框,两端都有方向箭头。 每当用户单击控件时,滚动条就会向其父窗口发送通知消息。 如有必要,父窗口负责更新滚动框的位置。 有关详细信息,请参阅 滚动条。有关可在 style 参数中指定的滚动条控件样式的表,请参阅 滚动条控件样式。
STATIC | 指定用于标记、框或分隔其他控件的简单文本字段、框或矩形。 静态控件不采用任何输入,也不提供任何输出。 有关详细信息,请参阅 静态控件。有关可在 style 参数中指定的静态控件样式表,请参阅 静态控件样式。
ex_style的WS_EX_NOACTIVATE值阻止系统进行前台激活。 若要防止在用户单击窗口时激活队列,必须正确处理 WM_MOUSEACTIVATE 消息。 若要将窗口带到前台或以编程方式激活它,请使用 set_foreground_window 或 set_active_window。 将 FALSE 返回到 WM_NCACTIVATE 可防止窗口丢失队列激活。 但是,在激活时将忽略返回值。
设置 WS_EX_COMPOSITED 后,窗口的所有后代使用双缓冲获取从下到上绘制顺序。 从下到上绘制顺序允许后代窗口具有半透明 (alpha) 和透明度 (颜色键) 效果,但前提是后代窗口还设置了 WS_EX_TRANSPARENT 位。 通过双重缓冲,可以在不闪烁的情况下绘制窗口及其后代。
ex_style 正在创建的窗口的扩展窗口样式。 有关可能值的列表,请参阅 扩展窗口样式。
class_name 指定窗口类名称。 类名可以是使用 register_class 或 register_class_ex 注册的任何名称,前提是注册该类的模块也是创建窗口的模块。 类名也可以是任何预定义 的系统类 名称。
window_name 窗口名称。 如果窗口样式指定标题栏,则 window_name 指向的窗口标题将显示在标题栏中。 使用 create_window 创建控件(如按钮、检查框和静态控件)时,请使用 window_name 指定控件的文本。 使用 SS_ICON 样式创建静态控件时,请使用 window_name 指定图标名称或标识符。 若要指定标识符,请使用语法“#num”。
style 正在创建的窗口的样式。 此参数可以是 窗口样式值以及“备注”部分中指示的控件样式的组合。
x 窗口的初始水平位置。 对于重叠或弹出窗口, x 参数是窗口左上角的初始 x 坐标(以屏幕坐标表示)。 对于子窗口, x 是窗口左上角相对于父窗口工作区左上角的 x 坐标。 如果 x 设置为 CW_USEDEFAULT,则系统会选择窗口左上角的默认位置,并忽略 y 参数。 CW_USEDEFAULT 仅对重叠窗口有效;如果为弹出窗口或子窗口指定,则 x 和 y 参数设置为零。
y 窗口的初始垂直位置。 对于重叠或弹出窗口, y 参数是窗口左上角的初始 y 坐标(以屏幕坐标表示)。 对于子窗口, y 是子窗口左上角相对于父窗口工作区左上角的初始 y 坐标。 对于列表框 ,y 是列表框工作区左上角相对于父窗口工作区左上角的初始 y 坐标。如果使用 WS_VISIBLE 样式位创建重叠窗口,并且 x 参数设置为 CW_USEDEFAULT,则 y 参数确定窗口的显示方式。 如果 y 参数CW_USEDEFAULT,则窗口管理器在创建窗口后使用SW_SHOW标志调用 show_window。 如果 y 参数是其他某个值,则窗口管理器调用 show_window ,该值作为 cmd_show 参数。
width 窗口的宽度(以设备单位为单位)。 对于重叠窗口, width 是窗口的宽度、屏幕坐标或 CW_USEDEFAULT。 如果 width=CW_USEDEFAULT,系统将为窗口选择默认宽度和高度;默认宽度从初始 x 坐标扩展到屏幕的右边缘;默认高度从初始 y 坐标扩展到图标区域的顶部。 CW_USEDEFAULT 仅对重叠窗口有效;如果为弹出窗口或子窗口指定 了CW_USEDEFAULT ,则 width 和 height 参数设置为零。
height 窗口的高度(以设备单位为单位)。 对于重叠窗口, height 是窗口的高度(以屏幕坐标为单位)。 如果 width 参数设置为 CW_USEDEFAULT,则系统将忽略 height。
h_wnd_parent 正在创建的窗口的父窗口或所有者窗口的句柄。 若要创建子窗口或拥有的窗口,请提供有效的窗口句柄。 此参数对于弹出窗口是可选的。若要创建 仅消息窗口,请向现有仅消息窗口提供 HWND_MESSAGE 或句柄。
h_menu 菜单句柄,或指定子窗口标识符,具体取决于窗口样式。 对于重叠或弹出窗口, h_menu 标识要与窗口一起使用的菜单;如果要使用类菜单,则它可以为 NULL 。 对于子窗口, h_menu 指定子窗口标识符,即对话框控件用于通知其父级事件的整数值。 应用程序确定子窗口标识符;对于具有相同父窗口的所有子窗口,它必须是唯一的。
h_instance 要与窗口关联的模块实例的句柄。
param 指向要通过 CREATESTRUCT 结构传递到窗口的值的指针, (WM_CREATE消息的 lParam 参数指向的 lpCreateParams 成员) 。 此消息在返回之前由此函数发送到创建的窗口。如果应用程序调用 create_window 来创建 MDI 客户端窗口, lpParam 应指向 CLIENTCREATESTRUCT 结构。 如果 MDI 客户端窗口调用 create_window 来创建 MDI 子窗口, lpParam 应指向 MDICREATESTRUCT 结构。 如果不需要其他数据,lpParam 可能为 NULL。
销毁指定的窗口。 函数将 WM_DESTROY 和 WM_NCDESTROY 消息发送到窗口,以将其停用,并从窗口中删除键盘焦点。 函数还会销毁窗口菜单、刷新线程消息队列、销毁计时器、删除剪贴板所有权,并中断剪贴板查看器链 (如果窗口位于查看器链的顶部)。
如果指定的窗口是父窗口或所有者窗口, 则 destroy_window 会在销毁父窗口或所有者窗口时自动销毁关联的子窗口或拥有窗口。 函数首先销毁子窗口或拥有的窗口,然后销毁父窗口或所有者窗口。
destroy_window 还会销毁 create_dialog 函数创建的无模式对话框。
线程不能使用 destroy_window 来销毁由其他线程创建的窗口。
如果要销毁的窗口是没有 WS_EX_NOPARENTNOTIFY 样式的子窗口,则会向父窗口发送 WM_PARENTNOTIFY 消息。
h_wnd 要销毁的窗口的句柄。
查询处理顶级窗口的类名和窗口名称匹配指定的字符串。这个函数不搜索子窗口。
class_name 用来指定类名的字符串或一个可以确定类名字符串的原子。如果这个参数是一个原子,那么它必须是一个在调用此函数前已经通过GlobalAddAtom函数创建好的全局原子。这个原子(一个16bit的值),必须被放置在class_name的低位字节中,class_name的高位字节置零。如果该参数为null时,将会寻找任何与window_name参数匹配的窗口。
window_name 用来指定窗口名(即窗口标题)的字符串。如果此参数为NULL,则匹配所有窗口名。
查询其类名和窗口名称与指定字符串匹配的窗口的句柄。 函数搜索子窗口,从指定子窗口后面的子窗口开始。 此函数不执行区分大小写的搜索。
find_window_ex 函数仅搜索直接子窗口。 它不搜索其他后代。
如果 window_name 参数不为 NULL,find_window_ex 将调用 get_window_text 函数以检索窗口名称进行比较。 有关可能出现的潜在问题的说明,请参阅 get_window_text。
h_wnd_parent 要搜索其子窗口的父窗口的句柄。如果 h_wnd_parent 为 NULL,则该函数使用桌面窗口作为父窗口。 函数在桌面子窗口的窗口之间搜索。如果 h_wnd_parent=HWND_MESSAGE,该函数将搜索所有 仅消息窗口。
h_wnd_child_after 子窗口的句柄。搜索从Z顺序中的下一个子窗口开始。子窗口必须是h_wnd_parent的直接子窗口,而不仅仅是后代窗口。如果h_wnd_child_after为NULL,则搜索从h_wnd_parent的第一个子窗口开始。
请注意,如果 h_wnd_parent 和 h_wnd_child_after 均为 NULL,则该函数将搜索所有顶级窗口和仅消息窗口。
class_name 上一次调用 register_class 或 register_class_ex 函数创建的类名或类原子。 原子必须放置在 class_name 的低序字中;高序字必须为零。如果 class_name 是字符串,则指定窗口类名称。 类名可以是使用 register_class 或 register_class_ex 注册的任何名称,也可以是任何预定义的控件类名称,也可以是 MAKEINTATOM(0x8000)。 在后一种情况下,0x8000是菜单类的原子。
window_name (窗口名称窗口标题)。 如果此参数为 NULL,则所有窗口名称都匹配。
释放加载的动态链接库 (DLL) 模块,并在必要时递减其引用计数。
当引用计数达到零时,模块将从调用进程的地址空间中卸载,句柄不再有效。
h_lib_module 已加载的库模块的句柄。load_library、load_library_ex、get_module_handle 或 get_module_handle_ex 函数返回此句柄。
查询指定窗口所属的类的名称。
h_wnd 窗口的句柄,以及窗口所属的类的间接句柄。
查询桌面窗口的句柄。
桌面窗口覆盖整个屏幕。
桌面窗口是在上面绘制其他窗口的区域。
查询用户当前窗口(前台窗口的句柄)。
系统为创建前台窗口的线程分配的优先级略高于其他线程。
返回值是前台窗口的句柄。
在某些情况下,前台窗口可以为
NULL
,例如,当窗口失去激活时。
查询调用线程的最后错误代码值。 最后一个错误代码按线程进行维护。多个线程不会覆盖彼此的最后错误代码。
获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。
如果想要获取另一个已加载模块的文件路径,可以使用get_module_file_name_ex函数。
h_module 一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL,该函数返回该应用程序全路径。
提取指定模块的模块句柄。调用进程必须已加载模块。
若要避免一节中所述的竞争条件,请使用 get_module_handle_ex 函数。
module_name 装入的模块名(.dll或.exe文件)。如果省略扩展名,则会附加预设库副文件名.dll。文件名串可以包含尾端点字符(.),表示模块名称没有扩展名。字符串不需要指定路径。指定路径时,请务必使用反斜线(\),而不是正斜线(/)。名称会独立比较(大小写)目前对应至呼叫进程的地址空间的模块名称。如果此参数为 Null, get_module_handle 将返回用来创建调用进程(.exe文件的文件的句柄)。get_module_handle函数不会撷取使用LOAD_LIBRARY_AS_DATAFILE旗标加载之模组的句柄。
从指定的动态链接库 (DLL) 查询导出函数(也称为过程)或变量的地址。
h_module 包含函数或变量的DLL模块的句柄。load_library、load_library_ex、load_packaged_library 或 get_module_handle函数返回此句柄。get_proc_address函数不会从使用LOAD_LIBRARY_AS_DATAFILE标志加载的模块中检索地址。有关详细信息,请参阅load_library_ex。
proc_name 函数或变量名称,或函数的序号值。如果此参数是序号值,则它必须在低序位字中;高序位字必须为零。
查询用户默认 区域设置名称。
注意 如果设计为仅在 Windows Vista 及更高版本上运行,应用程序应优先调用此函数,而不是 get_user_default_lc_id 。
如果目标窗口由当前进程拥有,则get_window_text将会把WM_GETTEXT消息发送到指定的窗口或控件。
如果目标窗口由另一个进程拥有,并且具有描述文字,则get_window_text将查询描述文字文本的窗口。
如果窗口没有描述文字,则返回值为 null 字符串。此行为是设计使然。
如果拥有目标窗口的进程没有响应,它允许应用程序调用 get_window_text ,而不会变得无响应。
但是,如果目标窗口没有响应,并且它属于调用应用程序, 则 get_window_text 将导致调用应用程序变得无响应。
若要在另一个进程中检索控件的文本,请直接发送 WM_GETTEXT 消息,而不是调用 get_window_text。
h_wnd 包含文本的窗口或控件的句柄。
将指定的模块加载到调用进程的地址空间中。指定的模块可能会导致加载其他模块。有关其他加载选项,请使用 load_library_ex 函数。
lib_file_name 模块的名称。这可以是库模块 (.dll 文件),也可以是可执行模块 (.exe 文件)。如果指定的模块是可执行模块,则不会加载静态导入;相反,模块就像使用标志的 load_library_ex DONT_RESOLVE_DLL_REFERENCES 加载一样。指定的名称是模块的文件名,与库模块本身中存储的名称无关,该名称由 module-definition (.def) 文件中的 LIBRARY 关键字 (keyword) 指定。如果字符串指定完整路径,则函数仅搜索模块的该路径。如果字符串指定相对路径或模块名称而不指定路径,则函数使用标准搜索策略来查找模块;如果函数找不到模块,该函数将失败。指定路径时,请务必使用反斜杠 () ,而不是使用 /) (正斜杠。如果字符串指定模块名称而不指定路径,并且省略文件扩展名,则该函数会将默认库扩展“.DLL”追加到模块名称。若要防止函数将“.DLL”追加到模块名称中,请在模块名称字符串中包含尾随点字符 (.)。
显示一个模态对话框,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。消息框中返回一个整数值,该值指示用户单击了哪个按钮。
h_wnd 此参数代表消息框拥有的窗口。如果为NULL,则消息框没有拥有窗口。
text 消息框的内容。
caption 消息框的标题。
type 指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。指定下列标志中的一个来显示消息框中的按钮以及图标。
按钮:
将创建指定窗口的线程引入前台并激活窗口。
键盘输入将定向到窗口,并为用户更改各种视觉提示。
系统为创建前台窗口的线程分配的优先级略高于其他线程的优先级。
h_wnd 应激活并带到前台的窗口的句柄。
将应用程序定义的拦截程序安装到钩子链中。您将安装拦截程序,以监视系统是否有特定类型的事件。这些事件与特定线程或与呼叫线程位于相同桌面中的所有线程相关联。
id_hook 要安装的拦截程序类型。
func 钩子程序的地址。如果 id_thread 参数为零,或指定不同进程所建立线程的识别码,func参数必须指向 DLL 中的拦截程序。否则,func可以在与目前进程相关联的代码中指向拦截程序。
h_mod DLL 的实例句柄,其中包含 func参数所指向的拦截程序。如果id_thread参数指定目前进程所建立的执行绪,而且拦截程序位于与目前进程相关联的代码内,则必须将h_mod参数设定为Null。
设置指定窗口的显示状态。
h_wnd 窗口的句柄。
cmd_show 控制窗口的显示方式。 如果启动应用程序的程序提供 STARTUPINFO 结构,则应用程序首次调用 ShowWindow 时将忽略此参数。 否则,首次调用 ShowWindow 时,该值应为 WinMain 函数在其 nCmdShow 参数中获取的值。 在后续调用中,此参数可以是以下值之一。
删除 SetWindowsHookEx 函数安装在钩子链中的挂钩过程。
h_hook 要移除的钩子的句柄。此参数是由先前调用 set_windows_hook_ex 获取的钩子句柄。