模拟键盘按键 自动输入文字
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《模拟键盘按键 自动输入文字》相关程序代码
__________________________________________________________________________________________
BOOL AttachThreadInput(
DWORD idAttach, // 需要附加的线程ID
DWORD idAttachTo, // 附加到的线程ID
BOOL fAttach // true 附加 false 取消
);
______函数使用的过程大致如下:__________________________________________________________
HWND hWnd;
hWnd = GetForegroundWindow(); // 得到当前窗口
if (hWnd == Form1->Handle) return; // 排除程序本身的窗口
DWORD FormThreadID = GetCurrentThreadId(); // 本程序的线程ID
// 当前窗口的线程ID
DWORD CWndThreadID = GetWindowThreadProcessId(hWnd, NULL);
// 附加输入线程
AttachThreadInput(CWndThreadID, FormThreadID, true);
// 得到当前键盘光标所在的窗口
hWnd = GetFocus();
// 取消附加的输入线程
AttachThreadInput(CWndThreadID, FormThreadID, false);
__________________________________________________________________________________________
//--------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int nTotalTimes, // 发送本文的总次数
nTimes; // 已经发送的次数
TForm1 *Form1;
//--------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender) // 开始刷屏
{ if (SS_Text->Text.IsEmpty())
{
// 文本不能为空
ShowMessage("请输入刷刷文本!");
SS_Text->SetFocus();
return;
}
__try
{
// Timer1->Interval取值为n秒(最小为50毫秒)
int Interval = StrToInt(txtDelay->Text);
Timer1->Interval = (Interval > 0) ? Interval * 1000 : 50;
// nTotalTimes取值为n次(最小为0次)
nTotalTimes = StrToInt(txtTimes->Text);
if (nTotalTimes < 0)
nTotalTimes = 0;
nTimes = 0;
Timer1->Enabled = true;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
ShowMessage("请输入数值类型数据!");
return;
}
btnStart->Enabled = false;
btnStop->Enabled = true;
Panel1->Enabled = false;
Application->Minimize(); // 最小化刷刷窗口
}
//--------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)// 停止刷屏
{
Timer1->Enabled = false;
btnStart->Enabled = true;
btnStop->Enabled = false;
Panel1->Enabled = true;
}
//--------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
// 现刷屏nTimes次,到nTotalTimes次后完成。
if (nTimes == nTotalTimes)
{
btnStopClick(Sen
der);
return;
}
HWND hWnd;
hWnd = GetForegroundWindow(); // 得到当前窗口
if (hWnd == Form1->Handle) return; // 不需要程序本身的窗口
DWORD FormThreadID = GetCurrentThreadId();
DWORD CWndThreadID = GetWindowThreadProcessId(hWnd, NULL);
// 附加输入线程
AttachThreadInput(CWndThreadID, FormThreadID, true);
hWnd = GetFocus(); // 得到当前键盘光标所在的窗口
AttachThreadInput(CWndThreadID, FormThreadID, false); // 取消
if (hWnd == NULL) return;
nTimes++;
for (int i = 1; i <= SS_Text->Text.Length(); i++)
{ // 模拟键盘按键输入文本
PostMessage(hWnd, WM_CHAR, (WPARAM)(SS_Text->Text[i] & 0xFF), 0);
}
if (chkAutoNumber->Checked)
{ // 自动编号
AnsiString Lines = IntToStr(nTimes);
for (int j = 1; j <= Lines.Length(); j++)
PostMessage(hWnd, WM_CHAR, (WPARAM)(Lines[j]), 0);
}
if (chkAutoWrap->Checked) // 自动回车
PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
}
//---------------------------------------------