hInstance=GetClassLong(hWnd,GCL_INSTANCE)//获得实例子句柄
GetModuleFileName(hInstance,szFileName,100);//获得文件名

解决方案 »

  1.   

    抱歉,第一句应该是:
    GetWindowLong(hWnd,GWL_HINSTANCE);
      

  2.   

    To enmai:這樣取得的只時當前自已運行程序的名稱.我是想知道其它運行的程序的名稱?
      

  3.   

    CWnd *cWnd = FromHandle(hwnd);
    cWnd->GetWindowText();
      

  4.   

    用EnumWindowsProc遍历当前所有的窗口就可以啦
    然后用下面的方法:
    hInstance=GetClassLong(hWnd,GCL_INSTANCE)//获得实例子句柄
    GetModuleFileName(hInstance,szFileName,100);//获得文件名 
      

  5.   

    我想要的結果不是標題名,而是文件名.即是當前hwnd是什麼*.exe或*.dll文件或其它文件.
    Win9x下不支持PSAPI.DLL的調用,因而無法使用EnumProcessModules和GetModuleFileNameEx函數.
      

  6.   

    调用 GetWindowModuleFileName 函数可以。不过在我这里总是出错,你先试一试好了。
      

  7.   

    放分了.謝謝各位的參與.
    GetWindowModuleFileName()對用C編寫的程序可以給出文件名,對VB寫的只是給出VB帶的動態鏈接庫...
    我的源代碼如下,可以正常運行:
    #include "SpyProcDlg.h"
    #include <Winable.h>
    struct LPar
    {
    HTREEITEM hidx;
    CTreeCtrl *tree;
    CListCtrl *list;
    };BOOL CALLBACK EnumWinProc(HWND, LPARAM);
    BOOL CALLBACK EnumChildTree(HWND, LPARAM);
    void CSpyProcDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CSpyProcDlg)
    DDX_Control(pDX, IDC_LIST_PROC, lview);
    DDX_Control(pDX, IDC_TREE_PROC, tview);
    //}}AFX_DATA_MAP
    }
    BEGIN_MESSAGE_MAP(CSpyProcDlg, CDialog)
    //{{AFX_MSG_MAP(CSpyProcDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BTN_REFRESH, OnBtnRefresh)
    ON_BN_CLICKED(IDC_BTN_KILLPROC, OnBtnKillproc)
    ON_BN_CLICKED(IDC_BTN_DELITEM, OnBtnDelitem)
    ON_BN_CLICKED(IDC_BTN_EXIT, OnBtnExit)
    ON_BN_CLICKED(IDC_BTN_FILENAME, OnBtnFilename)
    ON_BN_CLICKED(IDC_BTN_TERMINATION, OnBtnTermination)
    ON_BN_CLICKED(IDC_OPT_TREEVIEW, OnOptTreeview)
    ON_BN_CLICKED(IDC_OPT_LISTVIEW, OnOptListview)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()BOOL CSpyProcDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); // TODO: Add extra initialization here
    lview.ShowWindow (FALSE);
    lview.SetExtendedStyle (LVS_EX_FULLROWSELECT);
    lview.InsertColumn(0,"HWND",LVCFMT_LEFT,100);
    lview.InsertColumn(1,"CLASS",LVCFMT_LEFT,160);
    lview.InsertColumn(2,"TITLE & TEXT",LVCFMT_LEFT,200); LPar pt;
    pt.tree =(CTreeCtrl *)GetDlgItem(IDC_TREE_PROC);
    pt.list = (CListCtrl *)GetDlgItem(IDC_LIST_PROC);
    EnumWindows((WNDENUMPROC)EnumWinProc,(LPARAM)&pt); return TRUE;  // return TRUE  unless you set the focus to a control
    }BOOL CALLBACK EnumChildTree(HWND hwnd, LPARAM lParam)
    {
    if(hwnd)
    {
    char szClass[150];
    GetClassName(hwnd,szClass,sizeof(szClass));

    char  szText[100];
    GetWindowText (hwnd,szText,sizeof(szText));
    if(strlen(szText)){
    strcat(szClass," - ");
    strcat(szClass,szText);
    }else{
    ::SendMessage(hwnd,WM_GETTEXT,100,(long)szText);
    if (strlen(szText)) {
    strcat(szClass," - ");
    strcat(szClass,szText);
    }
    }
    LPar *temp;
    temp=(LPar *)lParam;
    CTreeCtrl *tree=(CTreeCtrl *)(temp->tree);
    HTREEITEM hidx;
    hidx=tree->InsertItem (szClass,1,1,(temp->hidx));
    }
    return TRUE;
    }BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
    {
    CString str;
    LPar *temp;
    static int i=0; temp=(LPar *)lParam;
    CTreeCtrl *tree=(CTreeCtrl *)(temp->tree);
    CListCtrl *list=(CListCtrl *)(temp->list); str.Format ("0x%8.8X",hwnd);
    list->InsertItem(i,str);
    GetClassName (hwnd,(LPSTR)(LPCTSTR)str,100);
    list->SetItemText (i,1,str);
    GetWindowText (hwnd,(LPSTR)(LPCTSTR)str,100);
    if (strlen(str)==0){
    char  szText[100];
    ::SendMessage(hwnd,WM_GETTEXT,100,(long)szText);
    str=szText;
    }
    list->SetItemText(i,2,str);

    //if (strlen(str)==0)GetClassName (hwnd,(LPSTR)(LPCTSTR)str,100);
    if (strlen(str)){
    HTREEITEM hidx;
    hidx=tree->InsertItem(str,0,0);
    temp->hidx =hidx;
    EnumChildWindows(hwnd,EnumChildTree,(LPARAM)temp);
    }
    i++;
    return TRUE;
    }
    void CSpyProcDlg::OnBtnRefresh() 
    {
    // TODO: Add your control notification handler code here
    tview.DeleteAllItems();
    lview.DeleteAllItems();
    LPar pt;
    pt.tree =(CTreeCtrl *)GetDlgItem(IDC_TREE_PROC);
    pt.list=(CListCtrl *)GetDlgItem (IDC_LIST_PROC);
    EnumWindows((WNDENUMPROC)EnumWinProc,(LPARAM)&pt);
    }void CSpyProcDlg::OnBtnKillproc() 
    {
    // TODO: Add your control notification handler code here
    HTREEITEM hIdx=tview.GetSelectedItem();
    CString str=tview.GetItemText (hIdx);
    HWND hwnd=::FindWindow(NULL,str);
    if (hwnd ==NULL) hwnd=::FindWindow(str,NULL);
    if (hwnd==NULL){
    AfxMessageBox ("None Find hwnd");
    return;
    }
    ::PostMessage(hwnd,WM_CLOSE,0,0);
    Sleep(100);
    if (!(::FindWindow (NULL,str)))
    {
    if(hIdx)tview.DeleteItem (hIdx);
    }
    }void CSpyProcDlg::OnBtnDelitem() 
    {
    // TODO: Add your control notification handler code here
    HTREEITEM hItem=tview.GetSelectedItem();
    if(hItem)tview.DeleteItem (hItem);}void CSpyProcDlg::OnBtnExit() 
    {
    // TODO: Add your control notification handler code here
    //::PostMessage(hwnd,WM_CLOSE,0,0);
    CDialog::EndDialog(0);
    }void CSpyProcDlg::OnBtnFilename() 
    {
    // TODO: Add your control notification handler code here
    HTREEITEM hIdx=tview.GetSelectedItem();
    CString str=tview.GetItemText (hIdx);
    HWND hwnd=::FindWindow(NULL,str);
    if (hwnd==NULL) hwnd=::FindWindow (str,NULL);
    if (hwnd==NULL) return;
    char szFile[100];
    GetWindowModuleFileName(hwnd,szFile,sizeof(szFile));
    AfxMessageBox (szFile);
    }void CSpyProcDlg::OnBtnTermination() 
    {
    // TODO: Add your control notification handler code here
    DWORD dwProcessId;
    HTREEITEM hIdx=tview.GetSelectedItem();
    CString str=tview.GetItemText (hIdx);
    HWND hwnd=::FindWindow(NULL,str);
    if (hwnd==NULL) hwnd=::FindWindow (str,NULL);
    //得到該視窗的進程ID
    GetWindowThreadProcessId(hwnd,&dwProcessId); 

    //從進程ID打開進程句柄
    HANDLE handle=OpenProcess(0,FALSE,dwProcessId); 
    TerminateProcess(handle,0);
    Sleep(200);
    if (!(::FindWindow (NULL,str)))
    {
    if(hIdx)tview.DeleteItem (hIdx);
    }}
      

  8.   

    本程序的功能是發現Win9x下運行了哪些進程,可以知道是什麼文件名 
    並可詢問或中止強制中止它運行.使系統有更多的可用內存.