模拟键盘按键 自动输入文字

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);
}
//---------------------------------------------


相关文档
最新文档