attachthreadinput(WindowsAPI—-AttachThreadInput使用「终于解决」)

发布时间:2025-12-10 20:03:06 浏览次数:3

WindowsAPI—-AttachThreadInput使用「终于解决」-attachthreadinput false

WindowsAPI—-AttachThreadInput使用「终于解决」AttachThreadInput函数说明如下:WINUSERAPIBOOLWINAPIAttachThreadInput(__inDWORDidAttach,__inDWORDidAttachTo,__inBOOLfAttach);简单来说,就是让两个线程,拥有共同的焦点,可以进行处理输入等信息简要的来说就是如此,接下来是简单的使用:…_attachthreadinput

AttachThreadInput函数说明如下:
WINUSERAPIBOOLWINAPIAttachThreadInput(    __in DWORD idAttach,    __in DWORD idAttachTo,    __in BOOL fAttach);

希望我今天分享的这篇文章可以帮到您。

简单来说,就是让两个线程,拥有共同的焦点,可以进行处理输入等信息

简要的来说就是如此,接下来是简单的使用:

首先创建一个win32的项目,并且添加一个按钮
添加按钮的代码如下:
//创建按钮 CreateWindow(L"Button", L"测试按钮", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,  35, 10, 120, 60, hWnd, (HMENU)IDB_FRONTBUTTON,hInst , NULL); 

然后按钮点击事件中逻辑处理的代码如下:

HWND QQ_HWND=FindWindow(NULL,L"本周.txt - 记事本");DWORD cur_threadid = GetWindowThreadProcessId(QQ_HWND,NULL);DWORD iss = GetCurrentThreadId();DWORD ForegroundThreadID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);if (cur_threadid == ForegroundThreadID){    MessageBox(nullptr,L"重复id",L"退出",0);break;}else{    //测试后台窗口激活到前台AttachThreadInput(ForegroundThreadID,cur_threadid,TRUE);::SetForegroundWindow(QQ_HWND);HWND hFocus = GetFocus(); AttachThreadInput(ForegroundThreadID,cur_threadid,FALSE);PostMessage(hFocus, WM_KEYDOWN, VK_TAB, 0); //空格输入//}

这段代码的含义是 先获取到窗口名为本周.txt - 记事本的句柄,

然后获取前置窗体的线程id和原先打开的记事本的线程id
然后使用AttachThreadInput(),当最后一个参数为True时,即连接两个线程id,使其拥有相同的焦点,然后再获取焦点句柄,并发送tab的消息,即空格键。
**关键点:**使用之后必须要关闭,即AttachThreadInput()最后一个参数设为False时候关闭,接下来看演示效果。

现在可以看出,点击按钮时,产生tab消息,发送到记事本句柄当中,可以简单的学会使用AttachThreadInput消息,要灵活使用的话还是得结合实例。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477