wojoo 发表于 2011-3-29 08:51:43

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

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

userchm 发表于 2011-3-29 08:51:54

我也想学 可就是没跟踪出来 跟踪游戏的MOUSEMOVE事件应该可以的,鼠标移动的时候 游戏不停地判断窗口

iamplayboy 发表于 2011-3-29 08:52:04

GameHwnd:=findwindow(nil,'Element Client');

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

wojoo 发表于 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 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=true then
    begin
      Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items));    //转到选中窗口
      ShowWindow(Nhwnd,Sw_Hide);
    end else
    begin
      Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items));    //转到选中窗口
      ShowWindow(Nhwnd,sw_SHOW);
    end;
end;

end.

scjazf 发表于 2011-3-29 08:52:50

可以枚举所有窗口的形式来枚举所有进程的PID值 然后和你想要的PID值对比
如果PID值一样则保存窗口的句柄

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

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

jinyuwei 发表于 2011-3-29 08:53:10

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

Nhwnd:=findwindow(NIL,pchar(Checklistbox1.Items))
改成Nhwnd:=StrToInt(Checklistbox1.Items);
页: [1]
查看完整版本: 我想实现枚举武林的窗口,并可以一一隐藏窗口怎么实现?