用C++很繁琐。其实直接用DOS命令wmic process ,自己再稍做点工作就可以了,清楚,易懂。
char str[]="wmic process where name=\"notepadexe\" get handle,processid,name";
system(str);
上面命令,列出名字叫 notepadexe 的 所有的 进程 的 handle, processid, name
若用:
wmic process where name=\"notepadexe\" get handle,processid,name > atxt
就能把屏幕输出存入 atxt, 写程序打开,读入,很简单。handle 数值 就是句柄。
很通俗的跟你解释一下
系统里有很多东西,这些东西都有一个身份z
身份z就是“句柄”(也不知道谁给取的这个奇怪的名字)
不是说一个程序 只有一个句柄
句柄绝对比你想象的要多的多 也就是说 分的很细
最简单的例子,打开系统自带的计算器
上面每一个按钮 那些什么1234 加减乘除 每个按钮都有自己的身份z
这样一来 你就可以很有针对性的对系统中的某一个“东西” 来进行 *** 作了。
应该能理解句柄是怎么回事了吧?
获取句柄 最基本的 两条思路,一就是那个你很感兴趣的“东西”,它自己就有一个属性(一般属性名都是 Hwnd),里面就存放着他自己的句柄,比如你输入 Msgbox MeHwnd 运行一下 就可以获得当前窗体的句柄
二就是 你通过一些专门设计出来,用来获得XX东西句柄的API函数
那个你查阅下API的相关书籍 就可以了,
VB里面 最简单的句柄么 就是窗体本身自己的句柄咯
最简单的代码 上面已经说了 就是这么一句话 Msgbox MeHwnd 你可以去试试
窗口1取窗口句柄() 取进程PID (窗口1句柄, 当前进程PID)版本 2DLL命令 取进程PID, 整数型, "user32", "GetWindowThreadProcessId", 公开, 获取与指定窗口关联在一起的一个进程和线程标识符
参数 hwnd, 整数型, , 指定的窗口句柄(窗口)
参数 lpdwProcessID, 整数型, 传址, 用作装载返回的PID变量
1调用 GetConsoleTitle() 来保存当前的控制台窗口标题。
2调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。
3调用 Sleep(40),以确保已更新窗口标题。
4调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果 *** 作失败,将返回 NULL。
5从步骤 1 中,若要恢复原始窗口标题检索调用 SetConsoleTitle() 的值。
应该测试结果的 HWND。例如可以测试是否返回的 HWND 对应于当前进程在 HWND 上调用 GetWindowText() 并将结果与 GetConsoleTitle() 进行比较。
示例代码
下面的函数中检索当前控制台应用程序窗口句柄 (HWND)。如果此函数成功,则返回值是控制台窗口的句柄。如果此函数失败,则返回值为 NULL。省略一些错误检查,为简洁起见。
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Buffer size for console window titles
HWND hwndFound; // This is what is returned to the caller
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle
// Fetch current window title
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Format a "unique" NewWindowTitle
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Change current window title
SetConsoleTitle(pszNewWindowTitle);
// Ensure window title has been updated
Sleep(40);
// Look for NewWindowTitle
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Restore original window title
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
以上就是关于C++ 获取进程句柄问题全部的内容,包括:C++ 获取进程句柄问题、VB怎么获取进程句柄、易语言如何取自身进程ID 和 句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)