delphi 关闭IceSword等


本文整理自网络,侵删。

 //网上的思路

procedure TForm1.Timer1Timer(Sender: TObject);

var
hwnd,hwnd1,hwnd2,hwnd3:Thandle;
begin
hwnd:=Getforegroundwindow;
hwnd1:=findwindowEx(hwnd,0,pchar('AfxMDIFrame42s'),nil);
hwnd2:=findwindowEx(hwnd,0,pchar('AfxControlBar42s'),nil);
if hwnd1 <> 0 then
if hwnd2 <>0 then
begin
PostMessage(hwnd,WM_CLOSE,0,0);

timer2.Enabled :=true;
end;

procedure TForm1.Timer2Timer(Sender: TObject);

begin

keybd_event(vk_return,MapVirtualKey(vk_return, 0 ),0,0);
keybd_event(vk_return, MapVirtualKey(vk_return, 0 ), KEYEVENTF_KEYUP , 0 );

end;

==========我的实现=======================
procedure TForm1.Timer1Timer(Sender: TObject);
var
hwnd,hwnd1,hwnd2,hwnd3:Thandle;
begin
timer1.Enabled :=false;
//hwnd:=Getforegroundwindow; //查找当前窗口
hwnd:=GetWindow(Handle,GW_HWNDFIRST);
while hwnd<>0 do
begin
hwnd1:=findwindowEx(hwnd,0,pchar('AfxMDIFrame42s'),nil);
hwnd2:=findwindowEx(hwnd,0,pchar('AfxControlBar42s'),nil);
if hwnd1 <> 0 then
if hwnd2 <>0 then
begin
PostMessage(hwnd,WM_CLOSE,0,0);
hwnd3:=GetFocus;
if hwnd3<> hwnd then
setforegroundwindow(hwnd); //设为激活窗口
//PostMessage(hwnd3, WM_KEYDOWN, VK_RETURN, 0);
keybd_event(vk_return,MapVirtualKey(vk_return, 0 ),0,0);
keybd_event(vk_return, MapVirtualKey(vk_return, 0 ), KEYEVENTF_KEYUP , 0 );
break;
end;
hwnd:=GetWindow(hwnd,GW_HWNDNEXT);
end;
timer1.Enabled :=true;
end;

//////////////////////////////稍微改动////////////////////////////////////////////////////////

//得到指定窗体的焦点子窗体的句柄

function GetActiveControl(ParentWnd: HWND): HWND;
var
OtherThread,
Buffer: DWord;
idCurrThread: DWord;
begin
OtherThread:= GetWindowThreadProcessID(ParentWnd, @Buffer);
idCurrThread:= GetCurrentThreadID;
if AttachThreadInput(idCurrThread, OtherThread, True) then
begin
Result:= GetFocus;
AttachThreadInput(idCurrThread, OtherThread, False);
end
else
Result:= GetFocus;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
hwnd,hwnd1,hwnd2,hwnd3:Thandle;
begin
timer1.Enabled :=false;
hwnd:=GetWindow(Handle,GW_HWNDFIRST);
while hwnd<>0 do
begin
hwnd1:=findwindowEx(hwnd,0,pchar('AfxMDIFrame42s'),nil);
hwnd2:=findwindowEx(hwnd,0,pchar('AfxControlBar42s'),nil);
if hwnd1 <> 0 then
if hwnd2 <>0 then
begin
PostMessage(hwnd,WM_CLOSE,0,0);
hwnd3:=GetActiveControl(hwnd);//得到该窗体的焦点子窗体句柄
PostMessage(hwnd3, WM_KEYDOWN, VK_RETURN, 0);
break;
end;
hwnd:=GetWindow(hwnd,GW_HWNDNEXT);
end;
timer1.Enabled :=true;
end;

相关阅读 >>

Delphi 判断一个数组的长度用 length 还是 sizeof ?

Delphi 动态库里查询是否联接数据库

Delphi中获取当前用户sid

Delphi 用nethttpclient执行post操作遇到的问题

Delphi ddk与wdk

Delphi listview中加载图片

Delphi 去除右边指定字符

Delphi 读取剪粘板内的html格式数据

Delphi打开文件夹并定位到一个文件

Delphi以二进制方式读取图片并显示出来

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...