函数:// 取进程
BOOL CHelpCenterApp::GetProcessID(CString ProcessName, DWORD &hProcID, DWORD &ParentID)
{
int con=0;
CString str;
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
// 获得系统内所有进程快照
HANDLE hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE)
{
// 出错
return FALSE;
}
// 枚举列表中的第一个进程
BOOL bProcess=Process32First(hProcessSnap,&pe32);
while(bProcess)
{
str=pe32.szExeFile;
// 比较进程名,找到要找的进程名
if(ProcessName.CompareNoCase(str)==0)
{
con++; // 进程数加1
}
// 继续查找
bProcess=Process32Next(hProcessSnap,&pe32);
}
CloseHandle(hProcessSnap);
if(con>1)
return TRUE; // 进程已经启动
else
return FALSE; // 进程没有启动
}
应用 例如: name=_T("HelpCenter.exe"); // 获取本进程文件名
// 以查进程方式检查程序是否已经运行
BOOL bJudge=false;
DWORD procID; // 本进程ID
DWORD parentID; // 父进程ID
bJudge=GetProcessID(name,procID,parentID);
if(bJudge)
{
// 文件已经打开
AfxMessageBox(_T("程序已经运行!"));
exit(0);
}

解决方案 »

  1.   

    HWND   hWnd; 
    DWORD dwProcessID = 0;//获取进程ID
    hWnd   =::FindWindow(NULL,   "目标窗口标题 ");
     if(hWnd)
    {       
            ::GetWindowThreadProcessId(hWnd,&dwProcessID);//获取进程ID  
    }
      

  2.   

    GetWindowText
    The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.int GetWindowText(
      HWND hWnd,        // handle to window or control with text
      LPTSTR lpString,  // address of buffer for text
      int nMaxCount     // maximum number of characters to copy
    );
     
    Parameters
    hWnd 
    Handle to the window or control containing the text. 
    lpString 
    Pointer to the buffer that will receive the text. 
    nMaxCount 
    Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated. 
    Return Values
    If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, callGetLastError. This function cannot retrieve the text of an edit control in another application.Res
    If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. QuickInfo
      Windows NT: Requires version 3.1 or later.
      Windows: Requires Windows 95 or later.
      Windows CE: Requires version 1.0 or later.
      Header: Declared in winuser.h.
      Import Library: Use user32.lib.
      Unicode: Implemented as Unicode and ANSI versions on Windows NT.See Also
    Windows Overview, Window Functions, GetWindowTextLength, SetWindowText, WM_GETTEXT  
      

  3.   

    GetWindowThreadProcessId
    The GetWindowThreadProcessId function retrieves the identifier of the thread that created the specified window and, optionally, the identifier of the process that created the window. DWORD GetWindowThreadProcessId(
      HWND hWnd,             // handle to window
      LPDWORD lpdwProcessId  // address of variable for process identifier
    );
     
    Parameters
    hWnd 
    Handle to the window. 
    lpdwProcessId 
    Pointer to a 32-bit value that receives the process identifier. If this parameter is not NULL, GetWindowThreadProcessId copies the identifier of the process to the 32-bit value; otherwise, it does not. 
    Return Values
    The return value is the identifier of the thread that created the window. QuickInfo
      Windows NT: Requires version 3.1 or later.
      Windows: Requires Windows 95 or later.
      Windows CE: Requires version 1.0 or later.
      Header: Declared in winuser.h.
      Import Library: Use user32.lib.See Also
    Windows Overview, Window Functions