大家好,我用WinExec打开一个程序,但是用SendMessage总关不掉,#include <iostream>
#include <windows.h> int _tmain(int argc, _TCHAR* argv[])
{
LPCSTR path = "D:\\Program Files\\tencent\\QQ\\Bin\\QQ.exe"; // Open a program according to the path above, DONE!
WinExec(path,SW_SHOWNORMAL); // Close the window just opened, FAIL!
HWND hWnd = FindWindow(NULL, _T("QQ"));
SendMessage(hWnd,WM_CLOSE,NULL,NULL); return 0;
}在网上查了半天也没有解决,请高手不吝指教,谢谢!
#include <windows.h> int _tmain(int argc, _TCHAR* argv[])
{
LPCSTR path = "D:\\Program Files\\tencent\\QQ\\Bin\\QQ.exe"; // Open a program according to the path above, DONE!
WinExec(path,SW_SHOWNORMAL); // Close the window just opened, FAIL!
HWND hWnd = FindWindow(NULL, _T("QQ"));
SendMessage(hWnd,WM_CLOSE,NULL,NULL); return 0;
}在网上查了半天也没有解决,请高手不吝指教,谢谢!
//第二个参数必须是的标题栏名字 一般为QQ20XX 不会是QQ
//把它改成
WND hWnd = FindWindow(NULL, _T("QQ20XX"));//20XX为你的QQ标题栏名字
另外可以直接进程里关闭进程!代码如下
//提升权限
bool GetDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
return false;
} if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
{
CloseHandle( hToken );
return false;
} tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (!AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
{
CloseHandle( hToken );
return false;
}
CloseHandle( hToken );
return true;
}
//查找进程
DWORD FindProcess(CString strName)
{
if(strName=="")
{
char szFileName[256];
memset(szFileName,0,256);
GetModuleFileName(NULL,szFileName,255);
strName=szFileName;
strName=strName.Right(strName.GetLength()-strName.ReverseFind('\\')-1);
}
char strProcessName[256];
memset(strProcessName,0,256);
strcpy(strProcessName,strName);
DWORD aProcesses[1024], cbNeeded, cbMNeeded;
HMODULE hMods[1024];
HANDLE hProcess;
char szProcessName[MAX_PATH];
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
{
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
CloseHandle(hProcess);
if(strstr(szProcessName, strProcessName))
{
return(aProcesses[i]);
}
}
return 0;
}
//结束进程
bool KillProcess(CString strName)
{
// When the all operation fail this function terminate the "winlogon" Process for force exit the system.
if(strName=="")
{
char szFileName[256];
memset(szFileName,0,256);
GetModuleFileName(NULL,szFileName,255);
strName=szFileName;
strName=strName.Right(strName.GetLength()-strName.ReverseFind('\\')-1);
}
DWORD dwProcessId = FindProcess(strName);
if(dwProcessId==0)
{
return false;
}
HANDLE hYourTargetProcess=::OpenProcess(PROCESS_TERMINATE,FALSE, dwProcessId );
if(hYourTargetProcess == NULL)
{
return false;
}
else
{
if(TerminateProcess(hYourTargetProcess, 4))
{
CloseHandle(hYourTargetProcess);
return true;
}
else
{
GetDebugPriv();
if(TerminateProcess(hYourTargetProcess, 4))
{
CloseHandle(hYourTargetProcess);
return true;
}
else
{
CloseHandle(hYourTargetProcess);
return false;
}
}
}
}
#include "Psapi.h"
#pragma comment(lib,"Psapi.lib")
{
HANDLE snapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//--------------------------------------
//查询进程
//--------------------------------------
PROCESSENTRY32 processInfo;
CString strProcessName= "";
DWORD nProcessID=0;
HANDLE processHandle;
int nProcessTerminate=0;
processInfo.dwSize=sizeof(PROCESSENTRY32);
//获取第一个进程
BOOL status=Process32First(snapShot,&processInfo);
while(status)
{
//获取进程名字
strProcessName = processInfo.szExeFile;
//查询比较是否为要结束的进程
if(processName.CompareNoCase(strProcessName)==0)
{
//获取进程ID
nProcessID=processInfo.th32ProcessID;
processHandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, nProcessID );
if(processHandle==NULL)
{
return;
}
//结束一个进程
TerminateProcess(processHandle,0);
}
//获取下一个进程
status=Process32Next(snapShot,&processInfo);
}
}