句柄c语言
‘壹’ c语言中如何获得当前进程句柄,谢谢!
DWORD PID;
PID = GetProcessPID(L"test.exe");
//获取进程pid函数
DWORD GetProcessPID(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 (!_tcsicmp(pe.szExeFile, pName)) {
CloseHandle(hSnapshot);
return pe.th32ProcessID;
}
}
return NULL;
}
//由进程pid获取进程句柄,置顶
HWND hh = GetProcessTopWindows(PID);
HWND GetProcessTopWindows(DWORD dwPID){
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
if(count > 0) {
//cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
return (nhWnd[count -1]);
}
return NULL;
}
别忘了添加对应头文件。
‘贰’ HandleType;在c语言里是什么意思
这个是Windows API库里面的东西
‘叁’ 谁能解释一下 HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE))在C语言中是什么意思
上句执行后,定义了一个句柄变量hConsole,将其赋值为GetStdHandle((STD_OUTPUT_HANDLE)),即标准输出的句柄。
例如:
#include <stdio.h>
#include <windows.h>
int main(void)
{
HANDLE consolehwnd; //创建句柄,详细句柄知识,请网络一下或查MSDN
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); //实例化句柄
SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED);//设置字体颜色
printf("hello ");
SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf("world!
");
getchar();
SetConsoleTextAttribute(consolehwnd,BACKGROUND_INTENSITY |BACKGROUND_BLUE);
printf("It is really beautiful!
");
return 0;
}
(3)句柄c语言扩展阅读:
注意事项
SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数。参数表中使用两个属性(属性之间用,隔开)。GetStdHandle()和FOREGROUND_*或BACKGROUND_*。*值为INTENSITY或RED或GREEN或BLUE。第一个属性获得句柄(即要设置颜色的地方),第二个属性设置颜色。属性相加是在属性值中间加“|”隔开即可。
GetStdHandle(STD_OUTPUT_HANDLE)获得句柄。
FOREGROUND_INTENSITY表示设置前景色为高亮显示。
FOREGROUND_RED表示设置前景色为红色,即字体颜色为红色。
FOREGROUND_GREEN表示设置前景色为绿色,即字体颜色为绿色。
FOREGROUND_BLUE表示设置前景色为蓝色,即字体颜色为蓝色。
BACKGROUND_INTENSITY表示设置背景色为高亮显示。
BACKGROUND_RED 表示设置背景色为红色。
BACKGROUND_GREEN表示设置背景色为绿色。
BACKGROUND_BLUE表示设置背景色为蓝色。
说明:在使用时要在预处理中包含window.h头文件。
‘肆’ 求助:C语言如何输出句柄
句柄就是一种资源的序号,一般是个无符号整数而已,比如文件句柄,就是系统提供一组可以打开文件的数据结构(实际上是结构数组),句柄就是数组下标。
所谓输出句柄,你可以将句柄当作函数调用的返回值,或者打印出来看也不是不可以。
‘伍’ 对于一个只懂C语言得人来说,怎么理解句柄
句柄是一个序号, 它不是一个内存地址。
它用于管理Windows内核对象,比如用户打开一个文件,Windows即会建立一个文件内核对象,所谓内核对象就是一块内存结构,里面有文件路径,文件大小,当前文件指针等等信息。Windows系统会打开很多的文件,因此就有很多的文件内核对象,同样Windows系统还会建立其它的类型的很多很多的内核对象。如何管理这么多的内核对象 呢?Windows通过建立一个叫做句柄表的东西,用于记录内核对象的地址。表中每一个元素,都是一个内核对象的起始地址,然后给每一个对象对应一个序号,此序号即为句柄。
//句柄表类似于下面的结构,像0、1、2这样的序号即为句柄
----------------------------------------------------
0第一个内核对象的地址
1第二个内核对象的地址
2第三个内核对象的地址
----------------------------------------------------