#include <windows.h>

#include "resource.h"
#include "Tlhelp32.h"

extern HWND hwndModeless;

TCHAR SlectProcessName[30];

BOOL CALLBACK TaskManagerDlgProc(HWND hwndDlg,
                              UINT message,
                              WPARAM wParam,
                              LPARAM lParam)
{
    UINT nID;
    HWND hwndEdit;
	BOOL bRet;
	DWORD th32ProcessID=0;
	HANDLE hProc = NULL;
	PROCESSENTRY32 Proc;

    switch(message)
    {
    case WM_INITDIALOG:

		hwndEdit = GetDlgItem(hwndDlg, IDC_TASKS);

		// TH32CS_SNAPALL, TH32CS_SNAPHEAPLIST, TH32CS_SNAPMODULE
		// TH32CS_SNAPPROCESS, TH32CS_SNAPTHREAD, THCS_GETALLMODES,
		// 
		hProc = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,th32ProcessID);

		Proc.dwSize = sizeof(PROCESSENTRY32);

		bRet = Process32First(hProc, &Proc);

		if(bRet)
			SendMessage(hwndEdit,LB_ADDSTRING, 0, (LPARAM)Proc.szExeFile);

		while(bRet = Process32Next(hProc, &Proc))
		{
			if(bRet)
				SendMessage(hwndEdit, LB_ADDSTRING, 0, (LPARAM)Proc.szExeFile);
		}

		CloseToolhelp32Snapshot(hProc);

        return (FALSE);
    case WM_COMMAND:
		hwndEdit = GetDlgItem(hwndDlg, IDC_TASKS);
        nID = LOWORD(wParam);
        switch(nID)
        {
        case IDOK:
            DestroyWindow(hwndDlg);
            hwndModeless = NULL;
            break;
        case IDCANCEL:	// Kill Process
            DestroyWindow(hwndDlg);
            hwndModeless = NULL;
            break;
        default:
            break;
        }   //End of switch(nID) block

		switch (HIWORD(wParam))
		{
		case LBN_SELCHANGE:
			SendMessage(hwndEdit,LB_GETTEXT, SendMessage(hwndEdit, LB_GETCURSEL, 0, 0), (LPARAM)SlectProcessName);
			//RETAILMSG(1,(L" SlectProcessName =%s \r\n",SlectProcessName));
			break;
		}

        return (FALSE);
    default:
        return (FALSE);
    }       //End of switch(message) block
}
