DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: qazjiaoji
今日帖子: 5
在线用户: 24
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 uctao (uc) ▲△△△△ -
注册会员
2019/1/8 17:41:39
标题:
一个桌面窗口程序怎么有两个窗口句柄,有大神知道这是什么原因导致的吗? 浏览:536
加入我的收藏
楼主: 我写了个历遍桌面所有窗口的句柄程序,可以看下图


历遍出来的窗口句柄,一个程序既然有两个窗口句柄,就是Project1.exe,这个程序是我写的,用SPY++查询,一个是FORM,一个是application  若是把这个application这个过滤掉,那有什么办法过滤掉,就显示出FORM类的窗口句柄就可以了,我用了IsWindowVisible还是不行,我下面附上我的源码,看看哪里出问题了











unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,psapi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    function GETPATH(GHandle:Cardinal):string;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 mainHW,
 childHW:HWND;
 ps: array[0..254] of Char;
begin
   mainHW:=GetDesktopWindow;
   Memo1.Lines.Add('桌面句柄:' + IntToStr(mainHW));
   childHW:=GetWindow(mainHW,GW_CHILD);
   while childHW <> 0 do
     begin
       if (IsWindowVisible(childHW)) and (IsWindowEnabled(childHW))  and (GetWindow(childHW,GW_OWNER) = 0) then
        begin
          Memo1.Lines.Add(IntToStr(childHW) + ' : ' + GETPATH(childHW));
        end;
        childHW:=GetWindow(childHW,GW_HWNDNEXT);
     end;


end;


function TForm1.GETPATH(GHandle:Cardinal):string;
var
  pid: Cardinal;
  pHandle: THandle;
  buf: array[0..MAX_PATH] of Char;
begin
  GetWindowThreadProcessId(GHandle, @pid); //通过句柄获取其进程ID
  pHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pid);//通过进程ID获取进程句柄
  GetModuleFileNameEx(pHandle, 0, buf, Length(buf));//通过进程句柄获取其模块路径
  CloseHandle(pHandle);
  result:= buf;
end;


end.
此帖子包含附件:
PNG 图像
大小:25.0K
----------------------------------------------
老菜鸟也会飞
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2019/1/8 19:03:04
1楼: delphi就是这样了,读懂Forms.pas就知道这种二流的编程软件是什么回事,这个application就是它的主窗口,负责接收系统消息的,干掉是不行的,可以说,从delphi1开始,就走上了歪路,系统菜单也给搞砸了,编译最小文件,也比C写大几倍,勉强修复也有其它毛病,后期加上IsWindowVisible也有兼容问题,你想搞好它,得重新编写Forms.pas,放弃一切控件,推倒重来,类似当年的Kol就是这样了。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 uctao (uc) ▲△△△△ -
注册会员
2019/1/8 19:34:00
2楼: 意思面对这个问题是没有办法了?
----------------------------------------------
老菜鸟也会飞
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2019/1/9 1:27:37
3楼: application是delphi程序真正的主窗口。负责做最顶级消息分发的。在设计模式里叫“观察者模式”。
这种模式在很多主流ide里都有。居然会被叫成二流也是醉了。

如果要过滤application的句柄的话,在低版本可以用width和height来判断,低版本的application有一个长款都为0的窗口。
高版本可以判断窗口风格,具有toolwindow的风格的窗口过滤掉就行。
----------------------------------------------
--
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2019/1/9 8:16:31
4楼: //  Application.MainFormOnTaskbar := True;

我来将水搅浑:
那么,那么多的微软的 explorer.exe 句柄,在技术上说是怎么回事呢?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2019/1/9 9:32:31
5楼: delphi是二流编程软件...application是歪路.....第一次看到这么搞笑的说法...呵呵呵呵.......

争论的话都懒得说, 这么多年VCL架构如何根本不用看别人评价

楼主想过滤Application只需要用GetClassName判断下类名就行了 Application窗口的类名一定是TApplication
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 doersoft (XMG-ZY) ▲▲▲▲▲ -
普通会员
2019/1/9 9:47:01
6楼: 这么符合逻辑的设计模式,二流...您还是用.net去吧.
----------------------------------------------
delphi golang|git
作者:
男 lsuper (lsuper) ★☆☆☆☆ -
盒子活跃会员
2019/1/9 10:20:33
7楼: 忍不住进来呵呵一个;微软 vs 里有个叫 Spy++ 的工具,可以切换到进程模式,看看进程下线程 thread 句柄分布,随便看看 windows 的 explore、firefox、regedit、outlook、..
----------------------------------------------
-
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/1/9 10:28:47
8楼: 我就是二流的水平,所以就喜欢用二流的DELPHI,请一流的牛B人物,远离二流论坛。
----------------------------------------------
简单做人,认真做事。
作者:
男 xlonger (xlonger) ▲▲▲▲▲ -
普通会员
2019/1/9 10:46:44
9楼: explore.exe 不是有好几个吗?
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2019/1/10 9:03:17
10楼: 我这 8 楼一样。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hans (hans) ★☆☆☆☆ -
注册会员
2019/1/10 9:09:14
11楼:

这么多年了一直是二流,悲惨的心凉凉
----------------------------------------------
Hans
作者:
男 drroc (kylixfans) ★☆☆☆☆ -
盒子活跃会员
2019/1/10 9:22:43
12楼: 二流一词刺痛了Delphier最敏感的神经
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:http://www.mvcxe.com/
作者:
女 zj_mpy (nnnnn) ★☆☆☆☆ -
普通会员
2019/1/10 10:05:54
13楼: .Net也是这样的
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2019/1/10 10:25:21
14楼: 二流不错了,我还以为自己的水平不入流呢。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 dbyoung (dbyoung) ▲▲▲▲▲ -
普通会员
2019/1/10 11:46:08
15楼: 很久远的问题了。

新建一单元,加上初始化代码:

initialization
  IsLibrary := True;

工程代码中,首位引用此单元文件。

这样 Application 窗体就没有了。


也可以在代码中,过滤掉 类名是 TApplication 的窗体。
----------------------------------------------
Delphi7爱好者
作者:
男 stacker (OOP才是王道) ▲▲▲▲▲ -
普通会员
2019/1/11 13:25:02
16楼: Explorer.exe够是九流程序,还时不时崩溃,但微软还是一样迫人家用?用什么语言写的?
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行39.0625毫秒 RSS