怎么取得运行程序的名词和图标,就像任务管理器的应用程序一栏那样

如何取得运行程序的名词和图标,就像任务管理器的应用程序一栏那样?
在网上查到是用enumWindows枚举,但自己始终没弄出来,有没有给点例子参考下的?谢啦
还有就是做了一个进程列表的,为了让其实时的监控所有进程的变化,我用了个ontimer函数来不断刷新,但是会出现一闪一闪的,滚动条也自己就跳上去了,有没有什么解决办法?

------解决方案--------------------
获取图标:
SHFILEINFO sfi;
DWORD dwFlags = SHGFI_USEFILEATTRIBUTES
|SHGFI_SYSICONINDEX
|SHGFI_DISPLAYNAME
|SHGFI_TYPENAME
|SHGFI_EXETYPE
|SHGFI_ICONLOCATION
|SHGFI_ICON;
size_t size = sizeof( SHFILEINFO );
dwFlags |= SHGFI_LARGEICON;
SHGetFileInfo( strFileName, FILE_ATTRIBUTE_NORMAL, &sfi, size, dwFlags );

查询进程:
PROCESSENTRY32 process_info;
DWORD m_CurrentPrecessID=GetCurrentProcessId();
HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPALL|TH32CS_INHERIT,m_CurrentPrecessID);


if (Process32First(handle,&process_info))
{
while (Process32Next(handle,&process_info))
{
}
CloseHandle(handle);



List刷新:
 建议采用虚表的方式,刷新时Invalidate(FALSE);参数用FALSE
------解决方案--------------------
那是因为,你用OnTime的时候,是第间隔一断时间刷新所有的进程信息,这样会一闪一闪的

如果在程序里对进程做个比较,进程存在不显示,没有就显示,这样,闪动就小了很多.
------解决方案--------------------
enumwindow是枚举顶窗口
------解决方案--------------------
有关获取当前进程的问题参考这里
http://topic.csdn.net/u/20080414/17/dc185583-ad93-4e31-9b11-7cc39359c1dc.html