不通过FinWindow能否获取外部程序子窗口的句柄?(200)

  • 主题发起人 主题发起人 dalse
  • 开始时间 开始时间
D

dalse

Unregistered / Unconfirmed
GUEST, unregistred user!
如下代码,首先是通过FindWindow查找主窗口的句柄,然后通过FindwindowEx查找子窗口的句柄,能否实现不通过FinWindow达到查找子窗口句柄,而是通过应用程序名来查找呢? LoadLibrary('E:/Dll.dll'); if DllHandle>32 then try //通过窗口标题用FindWindow找到要注入的程序的主窗口句柄pwnd PWND := FindWindow(Nil,'无标题 - 记事本'); //用FindwindowEx(hMain,0,nil,nil)找到要处理的子窗口句柄hChild hChild := FindWindowEx(PWND,0,Nil,Nil); //用getwindowThreadProcessid(hChild,nil)找到要注入的线程 dwThreadID := GetWindowThreadProcessid(hChild,Nil); .......except On E:Exception do Application.MessageBox(Pchar(E.Message),Pchar(Caption),MB_IconError+MB_Ok); end;end;
 
是什么软件防止注入的?可以改变一下思路,把防注入软件关闭它!
 
比如,我知道系统已启动了C:/Windows/Notepad.exe程序,能否通过这个应用程序名直接查找子窗口句柄呢?
 
(窗口枚举)函数 EnumWindow()EnumWindows  函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止函数原型:  BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);  参数:  lpEnumFunc:指向一个应用程序定义的回调函数指针,请参看EnumWindowsProc。  lPararm:指定一个传递给回调函数的应用程序定义值。  返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。  备注:EnumWindows函数不列举子窗口。  在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。
 
to de410请问一下,下面这个回调函数中,AHwnd的值是不是窗体的句柄?function EnumWindowProc(AHwnd: HWnd; lparam: lParam): Boolean; stdcall;
 
接受答案了.
 
后退
顶部