DWORD* pProcessIds, //指向进程ID数组链
DWORD cb,//ID数组的大小,用字节计数
DWORD* pBytesReturned) //返回的字节
//在psapi.dll中的函数EnumProcessModules用来枚举进程模块
typedef BOOL (_stdcall *ENUMPROCESSMODULES)(
HANDLE hProcess, //进程句柄
HMODULE* lphModule, //指向模块句柄数组链
DWORD cb,//模块句柄数组大小,字节计数
LPDWORD lpcbNeeded) //存储所有模块句柄所需的字节数
//在psapi.dll中的函数GetModuleFileNameEx获得进程模块名
typedef DWORD (_stdcall *GETMODULEFILENAMEEX)(
HANDLE hProcess, //进程句柄
HMODULE hModule, //进程句柄
LPTSTR lpFilename, //存放模块全路径名
DWORD nSize//lpFilename缓冲区大小,字符计算
)
void main()
{
HINSTANCE hPsDll = LoadLibrary("PSAPI.DLL")
if(NULL == hPsDll)
{
cout<<"Load PSAPI.DLL failed!"<<endl
return
} ENUMPROCESSES pEnumProcesses = (ENUMPROCESSES)GetProcAddress(hPsDll, "EnumProcesses")
ENUMPROCESSMODULES pEnumProcessModules = (ENUMPROCESSMODULES)GetProcAddress(hPsDll, "EnumProcessModules")
GETMODULEFILENAMEEX pGetModuleFileNameEx = (GETMODULEFILENAMEEX)GetProcAddress(hPsDll, "GetModuleFileNameExA")DWORD processid[1000]
DWORD neededpEnumProcesses(processid, sizeof(processid), &needed)
int processcount=needed/sizeof(DWORD)
for (int i=0i<processcounti++)
{
//打开进程
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,
false, processid[i])
if (hProcess)
{
char path[256] = {0}
HMODULE hModule
pEnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed)
pGetModuleFileNameEx(hProcess, hModule, path, sizeof(path))
GetShortPathName(path,path,256)
char temp[10] = {0}
itoa(processid[i],temp,10)
printf("%s --- %s\n",path,temp)
}
//else
// printf("Failed!!!\n")
} if(hPsDll)
{
FreeLibrary(hPsDll)
}
}
你想做的就是让h窗口响应你想要的鼠标事件吧?如果h窗口是程序进程创建的,可以重载一下h的PreTranslateMessage看看消息是否被发送过来了,注意只截取你发送的消息。
如果h窗口是别的程序进程创建的,那就只能用工具看看h是否接收到消息了。
还有一个很猥琐的方法。。你可以让鼠标移动过去点击一下然后再回来。。。只是发送消息的话用户一般感觉不到的。。。
通过FindWindow查找指定的窗口,再用PostMessage向其发送按键消息,如下HWNDhwnd
hwnd
=
FindWindow(NULL,
"窗口名字")PostMessage(hwnd,
WM_KEYDOWN,
'A',
1)这里是发送按键a消息,其他类似
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)