unit Unit1
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls
type
TForm1 = class(TForm)
Button1: TButton
Timer1: TTimer
procedure Button1Click(Sender: TObject)
procedure Timer1Timer(Sender: TObject)
procedure FormCreate(Sender: TObject)
private
{ Private declarations }
public
{ Public declarations }
end
var
Form1: TForm1
i:integer//模拟按键时间
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject)
begin
if Timer1.Enabled=true then
begin
i:=0//清零
Timer1.Enabled:=false
end
else
begin
i:=0//清零
Timer1.Enabled:=true
end
end
procedure TForm1.Timer1Timer(Sender: TObject)
begin
i:=i+1
if i mod 10=0 then
keybd_event($72,0,0,0)//$72是H键的虚拟键值,若稿逗要h健则是改为$48
end
procedure TForm1.FormCreate(Sender: TObject)
begin
i:=0//初始化i
Timer1.Enabled:=false
end
end.
varhwndwindow:hwnd
begin
hwndwindow:=findwindow(nil,'DELPHI技巧')//DELPHI技艺改成你要最大化的窗口标提.
if hwndwindow<>0 then//不等于0则是找到了这个磨猛茄窗体
postmessage(hwndwindow,WM_SYSCOMMAND,SC_MAXIMIZE,0)//用postmessage发送一条最大化消息(SC_MAXIMIZE)到这个窗体的句柄
//******************************************************
//另外postmessage(hwndwindow,wm_close,0,0)为关闭
//如果需要要自己的程序中使程序动态变最大化则用
form1.windowstate:=wsmaximized//form1为你要最大化的窗口名!
//几个要用到的名词:
1.hwnd是句柄知清的意思,只有先得到了窗体的句柄才能控制它
2.findwindow是找窗体的意思
3.nil是空指针的意思
4.postmessage发送一条瞎察消息给一个已找到的窗口句柄.
对某一个窗口发送鼠标消息
SendMessage(Handle,WM_LBUTTONDBLCLK,0,0)
对系统发消息关闭程序
SendMessage(Handle, WM_CLOSE, 0, 0)
启动开始菜单
Sendmessage(Application.Handle,WM_SYSCOMMAND,SC_TASKLIST,0)
参考楼上说的使用 PostMessage 函数。PostMessage 函数确实可以模拟按键
参考资料:
http://gykthh.blog.163.com/blog/static/6453464201141211314831/
游戏的键盘输入采用的是DirectInput,和GDI的键盘原理是不一样的,所敏哗拆以不能用sendkey之类的三层GDI API。要解决这个问题,必须是直接采用IO拦截。但是IO拦截不能在Ring3下使用,必须是Ring0,也就是必须写驱动(.sys)来拦截。
或者采用提权芦岁手法把自己的Ring3程序提权到Ring0,但是这种方法一般正规程序都不会用,会被系统、杀毒软件等拦截。
所桥枣以唯一的办法就是写驱动。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)