
解决这个问题的方法如下:
1、首先新建一个程序。
2、在程序里面画一个“按钮”、两个编辑框、两个标签,然后改成相应的名字好辨认。
3、依次左键点击下图的:
一、个作夹(没有点击的情况下才需要点击)
二、程序
三、模块应用。
4、在浏览窗口找到下载存放的超级模块位置,点击打开“超级模块”。
5、在模块下面便会多出一个“超级模块”。
6、双击按钮1,在子程序“_按钮1_被单击”下面新建一个名为“i”的整数型变量,然后编写代码如下:i = 取句柄2 (“notepadexe”)编辑框1内容 = 到文本 (i)。
7、编写以上代码后,就能取到“notepadexe”的窗口句柄了,然后,再来取窗口标题!继续编写代码如下:编辑框2内容 = 取窗口标题 (取句柄2 (“notepadexe”))。
8、最后调试运行一下该程序,这样就完成了。
如果窗口是现有程序的,使用VS自带的spy++获取窗口的相关信息,然後使用WinAPI获取句柄,具体参考spy++的使用方法和winapi的使用
FindWindow(
lpClassName, {窗口的类名}
lpWindowName: PChar {窗口的标题}
): HWND; {返回窗口的句柄; 失败返回 0}
//FindWindowEx 比 FindWindow 多出两个句柄参数:
FindWindowEx(
Parent: HWND; {要查找子窗口的父窗口句柄}
Child: HWND; {子窗口句柄}
ClassName: PChar; {}
WindowName: PChar {}
): HWND;
如果窗口是你的程序动态生成的,使用如下语句
Form _FORM=new Form();
IntPtr _P = _FORMHandle;
_P就是你实例化的窗口句柄
句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息、处理程序):0。获取所在类窗口的句柄:this->m_hwnd1。主窗口的句柄:无论在主窗口类内,还是子窗口类内,获取主窗口句柄的方法:AfxGetMainWnd()->m_hWnd,如:::SendMessage(AfxGetMainWnd()->m_hWnd , WM_MY_DOSOME , 0 ,(LPARAM)i);在窗口类中this->m_hWnd或者this->GetSafeHwnd()2。子窗口句柄:用FindWindow,(只要知道子窗口的名字即可)如: ::FindWindow(NULL,WindowsName) 返回找到的窗口的句柄寻找当前窗口是否在运行windowname的程序,该名字为窗口名字,如:CWnd pWnd=FindWindow(NULL,_T("清芝--支票机"));//GetSafeHwnd函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。通过下面的例子来看其理由
HANDLE GetProcessHandle(int nID)
{
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
}
HANDLE GetProcessHandle(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) {
if (!_tcscmp(peszExeFile, pName)) {
CloseHandle(hSnapshot);
return GetProcessHandle(peth32ProcessID);
}
}
return NULL;
}
PS你的代码不够精炼,所以重新写了一个。你看下这个能用不,不能用再帮你找找你的错误。主要你的代码太长了,所以没细看,你的Pn酱紫初始化啊,还有既然是DLL的,那就应该分别做LPCWSTR和LPCSTR两个版本,看你在LPCSTR版本里还用Process32FirstW,是不是有些混乱了?Pn被填充了UNICODE字符集再去和LPCSTR做比较,怎么能得出正确结果呢? 还有那个那个连COM的东西也出来了,完全被雷倒了,休克中
===================================
贴上来的代码都已很负责任的运行通过,不会有错你再检查看看是由于什么引起编译错误可以把出错信息贴上来然后帮你分析看看
另外,workingroy说要提权,DLL是不是应该自作主张提权有待商榷,提权完全可以由客户程序负责决定可以在调用函数前提权,函数调用完恢复原来的权限另外就是提权 *** 作也有消耗,对于系统管理员身份运行(通常我们都是系统管理员身份登陆WINDOWS),不需要提权当然,有高手指出,VISTA和7对系统管理员的权限已经有了修改,既是是系统管理员,权限也受到了某些限制这个我没研究过持保留意见当然楼主的函数应该在提供一个参数,用来传递要打开的进程句柄的权限一般不需要PROCESS_ALL_ACCESS的
没有很直接的办法,我能想到的就是遍历窗口,并用GetWindowThreadProcessID函数获取pID,并与你的pID进行比对,相同则这个窗口就是你要的窗口,请参考>
以上就是关于易语言,取窗口句柄并 *** 作全部的内容,包括:易语言,取窗口句柄并 *** 作、如何获取某个应用程序的窗体句柄、如何获得这个窗口的CWnd类或HWND句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)