16,548
社区成员




// 解决组合框控件弹出下拉框时发起热键截图引起奔溃的问题,2014/02/21
HWND hFocusWnd = ::GetFocus();
TCHAR achClassName[MAX_PATH] = { 0 };
::GetClassName( hFocusWnd, achClassName, sizeof(achClassName)/sizeof(TCHAR) );
if ( !_tcsicmp( achClassName, _T("ComboWnd") ) ) // 是组合框窗口
{
DWORD dwWndProcessId = 0;
::GetWindowThreadProcessId( hFocusWnd, &dwWndProcessId );
DWORD dwCurProcessId = ::GetCurrentProcessId();
if ( dwWndProcessId == dwCurProcessId ) // 是本进程的窗口
{
// 直接将组合框的弹出的下拉窗口关闭掉
::SendMessage( hFocusWnd, WM_CLOSE, 0, 0 );
}
}
//进程的结束
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if(hProcess != NULL)
{
TerminateProcess(hProcess,0);
}
#include <iostream>
#include <Windows.h>
#include "tlhelp32.h"
#include <stdio.h>
#include <string>
#include <map>
#include <atlstr.h>
using namespace std; //头文件有多,自行处理
void wcharTochar(const wchar_t *wchar, char *chr, int length)
{
WideCharToMultiByte( CP_ACP, 0, wchar, -1,chr, length, NULL, NULL );
}
int main()
{
PROCESSENTRY32 pe;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize = sizeof(PROCESSENTRY32);
if(!Process32First(hSnapshot,&pe))
return 1;
while(1)
{
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32Next(hSnapshot,&pe)==FALSE)
break;
//在这里处理开始枚举到的进程
char szExeFile[256];
wcharTochar(pe.szExeFile,szExeFile,256);
printf("%s \n",szExeFile);
}
CloseHandle(hSnapshot);
return 0;
}