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 xe5 firemonkey 手机屏幕自适应程序问题

Delphi 10.4 新变化:定制拖管记录(结构)类型

Delphi 快速删除非空文件夹

Delphi 静态/动态调用dl

Delphi 调用极光推送服务端http api实例

Delphi 禁用本地网络连接/启用本地网络连接

Delphi android实例-录音与回放(播放mp3)(xe8+小米2)

Delphi firemonkey的stylebook皮肤控件的使用

Delphi获取各种编码的识别符

Delphi日期和时间

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



打赏

取消

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

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

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

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

评论

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