看流星社区

 找回密码
 注册账号
查看: 3358|回复: 5

[Delphi] 我想实现枚举武林的窗口,并可以一一隐藏窗口怎么实现?

[复制链接]

该用户从未签到

发表于 2011-3-29 08:51:43 | 显示全部楼层 |阅读模式
我想实现枚举武林的窗口,并可以一一隐藏窗口怎么实现?delphi

该用户从未签到

发表于 2011-3-29 08:51:54 | 显示全部楼层
我也想学 可就是没跟踪出来 跟踪游戏的MOUSEMOVE事件应该可以的,鼠标移动的时候 游戏不停地判断窗口

该用户从未签到

发表于 2011-3-29 08:52:04 | 显示全部楼层
GameHwnd:=findwindow(nil,'Element Client');

GameHwnd:=GetNextWindow(GameHwnd,GW_HWNDNEXT);  //找下个窗口

该用户从未签到

 楼主| 发表于 2011-3-29 08:52:35 | 显示全部楼层
我自己写了一段代码,为什么只对一个窗口有效,当双开以上就不好使呢?窗口标题不样的时候好使
var
  Form1: TForm1;
  Nhwnd:HWND;

implementation

{$R *.dfm}


function EnumWinProc(Wnd : HWND; form1 : TForm1) : Boolean; Export; {$IFDEF Win32}StdCall;{$ENDIF}
var
WinText : Array[0..255] of Char;
begin
GetWindowText(Wnd, WinText, 255);
Result := True;
if (StrPas(WinText) = 'Element Client') then
Form1.CheckListBox1.Items.Add(StrPas(WinText));
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
EnumWindows(@EnumWinProc, LongInt(Self));
end;

procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
begin
  if checklistbox1.Checked[checklistbox1.ItemIndex]=true then
    begin
      Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items[Checklistbox1.ItemIndex]));    //转到选中窗口
      ShowWindow(Nhwnd,Sw_Hide);
    end else
    begin
      Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items[Checklistbox1.ItemIndex]));    //转到选中窗口
      ShowWindow(Nhwnd,sw_SHOW);
    end;
end;

end.

该用户从未签到

发表于 2011-3-29 08:52:50 | 显示全部楼层
可以枚举所有窗口的形式来枚举所有进程的PID值 然后和你想要的PID值对比  
如果PID值一样则保存窗口的句柄  

流程是这样  
EnumWindows //所有窗口  
EnumWindowsProc//回调
GetWindowThreadProcessId //得到进程ID  

然后做比较。得到的PID 和你的 PID比较 如果是一样则保存窗口句柄就可以了

该用户从未签到

发表于 2011-3-29 08:53:10 | 显示全部楼层
4楼的问题应该出在
Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items[Checklistbox1.ItemIndex]))
这句
因为用这个函数是靠标题找窗口句并的,而Checklistbox1显示的标题全是一样的 'Element Client',等于没用EnumWinProc
建议这样改
Form1.CheckListBox1.Items.Add(StrPas(WinText));
改成Form1.CheckListBox1.Items.Add('$'+IntToHex(wnd,8));

Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items[Checklistbox1.ItemIndex]))
改成Nhwnd:=StrToInt(Checklistbox1.Items[Checklistbox1.ItemIndex]);
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 12:35

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表