(C++) Identificando processo
2 participantes
Página 1 de 1
(C++) Identificando processo
Vim compartilhar com vocês uma maneira bacana que eu achei de identificar um determinado processo, ou mais de um processo.
O código faz uma listagem com o nome de todos os processos, para identificar um determinado processo só é preciso fazer um loop na lista e ir comparando cada resultado com o nome do processo...
Existem outras formas mais simples de se fazer isso, só estou compartilhando esta porque a achei interessante.
Código teste:
O código faz uma listagem com o nome de todos os processos, para identificar um determinado processo só é preciso fazer um loop na lista e ir comparando cada resultado com o nome do processo...
Existem outras formas mais simples de se fazer isso, só estou compartilhando esta porque a achei interessante.
Código teste:
- Código:
//--------------------------------------------------------------------------------------
// Copyright (c) CODE.ME - since 2013.1. All rights reserved.
//--------------------------------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#pragma comment(lib, "Psapi.lib")
HWND g_hWnd = NULL;
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
int searchGTAProcess( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
}
}
CloseHandle( hProcess );
if (wcsstr(szProcessName, L"gta_sa.exe")) return 1;
return 0;
}
int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow )
{
UNREFERENCED_PARAMETER( hPrevInstance );
UNREFERENCED_PARAMETER( lpCmdLine );
if( FAILED( InitWindow( hInstance, nCmdShow ) ) )
return 0;
MSG msg = {0};
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return ( int )msg.wParam;
}
HRESULT InitWindow( HINSTANCE hInstance, int nCmdShow )
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof( WNDCLASSEX );
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hCursor = LoadCursor( NULL, IDC_ARROW );
wcex.hbrBackground = ( HBRUSH )GetStockObject(LTGRAY_BRUSH);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = L"codeme";
if( !RegisterClassEx( &wcex ) )
return E_FAIL;
RECT rc = { 0, 0, 470, 240 };
AdjustWindowRect( &rc, WS_OVERLAPPEDWINDOW, FALSE );
g_hWnd = CreateWindow( L"codeme", L"Localizando GTA.", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, hInstance, NULL );
CreateWindow(L"BUTTON", L"Localizar", WS_CHILD + WS_VISIBLE + WS_TABSTOP, 235, 120, 80, 25, g_hWnd, (HMENU)1, hInstance, NULL);
if( !g_hWnd )
return E_FAIL;
ShowWindow( g_hWnd, nCmdShow );
return S_OK;
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps;
HDC hdc;
switch( message )
{
case WM_COMMAND:
{
if (LOWORD(wParam) == 1)
{
DWORD allProcess[1024], currProcess, id;
if (!EnumProcesses(allProcess, sizeof(allProcess), &id))
{
MessageBox(NULL, L"Não foi possível executar a função.", L"ERRO", MB_IConerror);
}
currProcess = id / sizeof(DWORD);
for (int i = 0; i < currProcess; ++i)
{
if (allProcess[i] != 0)
{
if (searchGTAProcess(allProcess[i]))
{
MessageBox(NULL, L"GTA localizado !", L"Aviso", MB_ICONINFORMATION);
}
}
}
}
break;
}
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps );
EndPaint( hWnd, &ps );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default: return DefWindowProc( hWnd, message, wParam, lParam );
}
return 0;
}
- Código:
int searchGTAProcess( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) );
}
}
CloseHandle( hProcess );
if (wcsstr(szProcessName, L"gta_sa.exe")) return 1;
return 0;
}
- Código:
DWORD allProcess[1024], currProcess, id;
if (!EnumProcesses(allProcess, sizeof(allProcess), &id))
{
MessageBox(NULL, L"Não foi possível executar a função.", L"ERRO", MB_IConerror);
}
currProcess = id / sizeof(DWORD);
for (int i = 0; i < currProcess; ++i)
{
if (allProcess[i] != 0)
{
if (searchGTAProcess(allProcess[i]))
{
MessageBox(NULL, L"GTA localizado !", L"Aviso", MB_ICONINFORMATION);
}
}
}
Fala Broew! WINAPI na veia.
Oi, também estou estudando WINAPI, gostei do forum e vou participar. E aproveitando a oportunidade, queria saber se você faz idéia de como deixar o estilo da janela conforme o sistema operacional? Já pesquisei de tudo mas tudo que eu tento fazer é em vão Abrçs boa sorte pra nóis aew!
Voltz- Novato
- Mensagens : 7
Data de inscrição : 14/08/2013
Idade : 30
Localização : Barueri
Re: (C++) Identificando processo
O estilo da janela ? Isso já é padrão, a janela sempre assume o estilo conforme seu SO, mas você deve estar falando sobre o design dos handles filhos, tipo botão, fundo, textbox... Esse tipo de coisa certo ? Eu ainda não cheguei a olhar isso, meu ponto de vista para aplicativos Win32 são mais a questão da funcionalidade, mas a sua questão é boa...
Se for esse lance dos handles filhos, eu posso te dar uma resposta mais tarde.
Se for esse lance dos handles filhos, eu posso te dar uma resposta mais tarde.
Re: (C++) Identificando processo
sim, para ficar mais claro o que estou tentando fazer é isso:Willian Luigi escreveu:O estilo da janela ? Isso já é padrão, a janela sempre assume o estilo conforme seu SO, mas você deve estar falando sobre o design dos handles filhos, tipo botão, fundo, textbox... Esse tipo de coisa certo ? Eu ainda não cheguei a olhar isso, meu ponto de vista para aplicativos Win32 são mais a questão da funcionalidade, mas a sua questão é boa...
Se for esse lance dos handles filhos, eu posso te dar uma resposta mais tarde.
Quero tirar o tema de windows 98 e deixar o tema conforme o sistema operacional.
Voltz- Novato
- Mensagens : 7
Data de inscrição : 14/08/2013
Idade : 30
Localização : Barueri
Re: (C++) Identificando processo
Acho que entendi perfeitamente, vou te dar umas dicas aqui sobre um artigo que havia lido uma vez passada...
Você usa VS(Visual Studio) ? ou qualquer outra instância desse tipo ? VC++ ? Se sim...
Clique com o botão direito na solução, vá em ADD->new item.
Digite o nome da solução que no meu caso é "GAME", então ficará: "GAME.exe.manifest"
Após ter criado você adiciona o seguinte código dentro desse arquivo:
Você usa VS(Visual Studio) ? ou qualquer outra instância desse tipo ? VC++ ? Se sim...
Clique com o botão direito na solução, vá em ADD->new item.
Digite o nome da solução que no meu caso é "GAME", então ficará: "GAME.exe.manifest"
Após ter criado você adiciona o seguinte código dentro desse arquivo:
- Código:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description></description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
- Código:
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
Re: (C++) Identificando processo
Olha eu utilizo Notepad++, codeblocks, e o Visual C++, sempre utilizo o notepad++ porque ainda estou em fase de aprendizado, entretando para fazer isso aí que vc falou eu utilizei o VC++.
Só que não funcionou, o programa até que roda, porém alguns componentes(1 botão, 1 messagebox em um menu), simplesmente não aparecem, sabe qual o problema?
Eu estava querendo voltar pro Java, porém to gostando de WINAPI, mas com esse problema da aparência do programa eu fico meio que na dúvida, sanando ela vou começar a estudar mais a WINAPI e futuramente OpenGL;
Obrigado pela resposta.
Eu codei o seguinte:
Só que não funcionou, o programa até que roda, porém alguns componentes(1 botão, 1 messagebox em um menu), simplesmente não aparecem, sabe qual o problema?
Eu estava querendo voltar pro Java, porém to gostando de WINAPI, mas com esse problema da aparência do programa eu fico meio que na dúvida, sanando ela vou começar a estudar mais a WINAPI e futuramente OpenGL;
Obrigado pela resposta.
Eu codei o seguinte:
- Código:
#include <Windows.h>
#include <tchar.h>
#define CLASSE_JANELA "janelaWindows"
#define SAIR 1
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
MSG msg;
HWND hWnd;
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.hInstance = hInstance;
wc.lpszClassName = CLASSE_JANELA;
wc.lpszMenuName = NULL;
wc.lpfnWndProc = WndProc;
wc.style = CS_DBLCLKS;
wc.cbWndExtra = 0;
wc.cbClsExtra = 0;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_HAND);
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
if(!RegisterClassEx(&wc)){
return 0;
} else{
hWnd = CreateWindowEx( WS_EX_CLIENTEDGE, CLASSE_JANELA, CLASSE_JANELA, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
}
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
switch(message){
case WM_CREATE:{
CreateWindow("button", "clique", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 70, 50, hWnd, NULL, NULL, NULL);
HMENU menu, subMenu;
menu = CreateMenu();
subMenu = CreateMenu();
AppendMenu(menu, MF_POPUP, (UINT_PTR)subMenu, "Files");
AppendMenu(subMenu, MF_STRING, SAIR, "Exit");
SetMenu(hWnd, menu);
break;
}
case WM_COMMAND:{
if(LOWORD(wParam) == 1){
MessageBox(NULL, "Ola", "Atenção", MB_OK | MB_ICONERROR);
break;
} else{break;}
}
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Voltz- Novato
- Mensagens : 7
Data de inscrição : 14/08/2013
Idade : 30
Localização : Barueri
Re: (C++) Identificando processo
Em relação a IDE eu recomendo utilizar VC++ ou o próprio VS(opinião pessoal) pois eu trabalho com o visual studio a 3 anos mais ou menos, e nunca me decepcionou.
Você tem que ter a estrutura do WinAPI montada, eu dei alguns exemplos nos tutoriais de WinAPI que criei aqui no fórum:
Introdução(pt1)
Eventos(pt2)
depois que você tiver o WinAPI montado, para mudar a aparência das janelas você faz oque eu citei no post acima, cria um arquivo manifest e cola aquele XML dentro, salva e ai adiciona o outro código no .cpp ou .h principal...
Você mencionou JAVA, dependendo do que você queira fazer amigo, ai você pode se redirecionar a determinadas linguagens...
Eu só mexo com JAVA na faculdade, trabalho com C#/JAVA e tenho também meus projetos e meus estudos em cima de OpenGL/DirectX.
Você tem que ter a estrutura do WinAPI montada, eu dei alguns exemplos nos tutoriais de WinAPI que criei aqui no fórum:
Introdução(pt1)
Eventos(pt2)
depois que você tiver o WinAPI montado, para mudar a aparência das janelas você faz oque eu citei no post acima, cria um arquivo manifest e cola aquele XML dentro, salva e ai adiciona o outro código no .cpp ou .h principal...
Você mencionou JAVA, dependendo do que você queira fazer amigo, ai você pode se redirecionar a determinadas linguagens...
Eu só mexo com JAVA na faculdade, trabalho com C#/JAVA e tenho também meus projetos e meus estudos em cima de OpenGL/DirectX.
Re: (C++) Identificando processo
Não adianta, não funciona!Willian Luigi escreveu:
depois que você tiver o WinAPI montado, para mudar a aparência das janelas você faz oque eu citei no post acima, cria um arquivo manifest e cola aquele XML dentro, salva e ai adiciona o outro código no .cpp ou .h principal...
Voltz- Novato
- Mensagens : 7
Data de inscrição : 14/08/2013
Idade : 30
Localização : Barueri
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|