知道一个进程得名称,怎么给这个得到句柄? 利用PostMessage发送消息到这个进程? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.codeguru.com/system/index.shtml的process part. 用这几个试一试CreateToolhelp32SnapshotProcess32FirstProcess32Next 我是想在一个应用程序的界面上面模拟鼠标单击事件,先将鼠标移动到指定的位置,然后发送鼠标Clicked的事件。 如果是想得到进程的ID的话,可以用FINDWINDOW()进行枚举就可以了,不过要先得到桌面的HWND,GETDESKTOPWINDOW() 同意Wargod2002(Wargod2002)我做过,是要这么做的。 楼上的兄弟,我能枚举得到各个进程的ID,只是通过这些ID利用EnumWindows得不到窗口句柄 BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam){DWORD ProcId;DWORD ThreadId;ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)if(ProcId==your process ID){HWND targetWin; //进程主窗口targetWin=hwnd;while(true){HWND hTemp;hTemp=GetParent(targetWin);if(hTemp==NULL)break;elsetargetWin=hTemp;}return FALSE;}elsereturn true;}EnumWindows(EnumWindowsProc,0); BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lparam){DWORD ProcId;DWORD ThreadId;ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)if(ProcId==your process ID){HWND targetWin; //进程主窗口targetWin=hwnd;while(true){HWND hTemp;hTemp=GetParent(targetWin);if(hTemp==NULL)break;elsetargetWin=hTemp;}return FALSE;}elsereturn true;}EnumWindows(EnumWindowsProc,0); webber84(糕鱼昏) 我得代码和你得一样,在hTemp=GetParent(targetWin);每次得到得都是空值 targetWin就是属于你那个进程的一个顶层窗口呵。 void CProcessDlg::OnFresh() { // TODO: Add your control notification handler code here m_wndList.ResetContent();HANDLE hSnapshot; // 创建一快照句柄hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);PROCESSENTRY32 pe;Process32First(hSnapshot,&pe); // 先搜索系统中的第一个进程信息do // 下面对系统中的所有信息进行过滤,并保存其信息{ int index=m_wndList.AddString(pe.szExeFile); // 把进程对应的文件路径填入列表框 m_wndList.SetItemData(index, pe.th32ProcessID); // 设置列表框中该项的Data号为相应的进程的ID号,利于以后终止该进程。}while(Process32Next(hSnapshot,&pe));CloseHandle(hSnapshot); // 关闲快照句柄GetDlgItem(IDC_STOP)->EnableWindow(FALSE); // 由于此时列表框中尚未有选择,故按纽IDC_STOP的状态应为Disable}void CProcessDlg::OnStop() //{ // TODO: Add your control notification handler code hereint index=m_wndList.GetCurSel(); // 获取此时列表框中的所选项DWORD data=m_wndList.GetItemData(index); // 获取所选项的的数据,即该项对应的进程IDHANDLE hProcess;hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,data); // 利用进程ID值,打开该进程,获得进程句柄,PROCESS_TERMINATE表示可以用 TerminateProcess() 函数来终止该进程。if(hProcess) TerminateProcess(hProcess,0); else MessageBox("=== 该进程可能已被终止 ===");Sleep(500); // 延迟一段时间,以便系统正确响应OnFresh(); } webber84(糕鱼昏) 我曾经试图发消息到targetWin,但是,好像没有什么反映的。 没反应?调用IsWindow(targetWin),看它是不是一个窗口。 cwkxm(cwkxm) 你这个是具体干什么呢? vc 串口丢数 如何关闭socket的listen and connect? 进入MessageBox调试,查看代码;MessageBox的原理是什么 问个显示图标的问题 请问用VB或者VC进行数据库开发哪个会更有前途?为什么?谢谢 急!触发CTreeCtrl的单选框的事件是什么,哪位大哥知道? 关于define的问题 CEdit控件的文本对齐方式问题 开发虚拟打印程序需要哪些基础 ole view的小问题, 第一次来这个版请多帮忙呀:) 访问端口用什么函数???急!!!!!!!!!!!!!!!! 哪有<<图形程序开发人员指南>>的电子版
的process part.
CreateToolhelp32Snapshot
Process32First
Process32Next
我做过,是要这么做的。
{
DWORD ProcId;
DWORD ThreadId;
ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
if(ProcId==your process ID)
{
HWND targetWin; //进程主窗口
targetWin=hwnd;
while(true)
{
HWND hTemp;
hTemp=GetParent(targetWin);
if(hTemp==NULL)
break;
else
targetWin=hTemp;
}
return FALSE;
}
else
return true;
}EnumWindows(EnumWindowsProc,0);
{
DWORD ProcId;
DWORD ThreadId;
ThreadId=GetWindowThreadProcessId(hwnd,&ProcId)
if(ProcId==your process ID)
{
HWND targetWin; //进程主窗口
targetWin=hwnd;
while(true)
{
HWND hTemp;
hTemp=GetParent(targetWin);
if(hTemp==NULL)
break;
else
targetWin=hTemp;
}
return FALSE;
}
else
return true;
}EnumWindows(EnumWindowsProc,0);
我得代码和你得一样,在
hTemp=GetParent(targetWin);
每次得到得都是空值
{
// TODO: Add your control notification handler code here
m_wndList.ResetContent();
HANDLE hSnapshot; // 创建一快照句柄
hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
Process32First(hSnapshot,&pe); // 先搜索系统中的第一个进程信息
do // 下面对系统中的所有信息进行过滤,并保存其信息
{ int index=m_wndList.AddString(pe.szExeFile); // 把进程对应的文件路径填入列表框
m_wndList.SetItemData(index, pe.th32ProcessID); // 设置列表框中该项的Data号为相应的进程的ID号,利于以后终止该进程。
}while(Process32Next(hSnapshot,&pe));CloseHandle(hSnapshot); // 关闲快照句柄
GetDlgItem(IDC_STOP)->EnableWindow(FALSE); // 由于此时列表框中尚未有选择,故按纽IDC_STOP的状态应为Disable
}void CProcessDlg::OnStop() //
{
// TODO: Add your control notification handler code here
int index=m_wndList.GetCurSel(); // 获取此时列表框中的所选项
DWORD data=m_wndList.GetItemData(index); // 获取所选项的的数据,即该项对应的进程ID
HANDLE hProcess;
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,data); // 利用进程ID值,打开该进程,获得进程句柄,PROCESS_TERMINATE表示可以用 TerminateProcess() 函数来终止该进程。
if(hProcess)
TerminateProcess(hProcess,0);
else
MessageBox("=== 该进程可能已被终止 ===");
Sleep(500); // 延迟一段时间,以便系统正确响应
OnFresh();
}
你这个是具体干什么呢?