我想请教,如何知道一个窗口是由哪个EXE文件运行产生的? 我想请教,如何知道一个窗口是由哪个EXE文件运行产生的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先取得这个窗口的Handle然后用GetWindowThreadProcessID取得所属进程句柄然后再枚举系统中所有进程比较一下就OK 如何获得桌面上任意窗口 1.先用 Finwindow 找到Desktop窗口句柄(98下通常是0x00000080),所有窗口都是它的子窗口(如你有SPY++会看得很清楚),调用GetWindow()选GW_CHILD 可得其子窗口,选GW_HWNDNEXT或调用GetNextWindow()可得其平级下一窗口,作一递归函数既可得到所有窗口句柄;2。对于带有title的窗口,调用GetWindowText()可得其标题,但要注意必须是该进程的顶级窗口,即其父窗口为Desktop,否则可能得到子窗口(如view)的显示内容,同理,调用SetWindowText()既可改变标题;3。这个问题我不确定,仅供参考:驻留程序中装个钩子,当有窗口生成时响应;不知是否还有其他截取系统响应的方式如重载系统函数之类。 我知道如何取得桌面的所有窗口句柄,但不知如何知道这个窗口是哪个EXE文件运行产生的? //还有别忘了在 uses 部分加上TLHelp32单元function GetAppName(const AWindowHandle: THandle): string;varPI: DWORD;ContinueLoop:BOOL;SnapshotHandle:THandle;ProcessEntry32:TProcessEntry32;beginResult := '';GetWindowThreadProcessId(AWindowHandle, @PI);SnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);ProcessEntry32.dwSize := Sizeof(ProcessEntry32);ContinueLoop := Process32First(SnapshotHandle,ProcessEntry32);while ContinueLoop dobeginif ProcessEntry32.th32ProcessID = PI thenbeginResult := ProcessEntry32.szExeFile;break;end;ContinueLoop:=Process32Next(SnapshotHandle, ProcessEntry32);end;CloseHandle(SnapshotHandle);end;用以上的方法找到窗口HANDLE和PROCESSID后,用GETWINDOWTHREADPROCESS这个API函数可以得到创建窗口的PROCESSID,再和PROCESSID比较一下,可以找到! dxDBGrid 如何录入数据 用什么办法判断一个驱动器是否准备好?为什么提示没有磁盘? 情况是这样子的 SOCKET编程 怎么样实现在DBgridEH中输入的时候出现下拉菜单?? 请问,sp_test 'database name' 这条调用存储过程的sql语句在DELHPI里怎么写? →★★★★★让你的软件,网站,企业一夜成名★★★★★← 请给个 带 Mask的 编辑下拉框 控件,收到email 后 再送 400分 一个排序的问题,请教更快的算法。 toolbar使用中的一些问题,有经验者请进... 数据库之ODBC的动态绑定! 郁闷,放分。 簡單﹐postmessage的問題
然后用GetWindowThreadProcessID取得所属进程句柄
然后再枚举系统中所有进程比较一下就OK
1.先用 Finwindow 找到Desktop窗口句柄(98下通常是0x00000080),所有窗口都是它的子窗口(如你有SPY++会看得很清楚),调用GetWindow()选GW_CHILD 可得其子窗口,选GW_HWNDNEXT或调用GetNextWindow()可得其平级下一窗口,作一递归函数既可得到所有窗口句柄;2。对于带有title的窗口,调用GetWindowText()可得其标题,但要注意必须是该进程的顶级窗口,即其父窗口为Desktop,否则可能得到子窗口(如view)的显示内容,同理,调用SetWindowText()既可改变标题;3。这个问题我不确定,仅供参考:驻留程序中装个钩子,当有窗口生成时响应;不知是否还有其他截取系统响应的方式如重载系统函数之类。