WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Получить все окна приложения

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Получить все окна приложения
void опубликован 22-01-2002 00:44 MSK   Click Here to See the Profile for void   Click Here to Email void  
Собственно, сабж. Получить потоки и окна им соответствующие для данного приложения. Если можно - как это оформить в виде дерева (подчиненнсть).
ADK опубликован 22-01-2002 05:53 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
...И получится Spy++...
Для 9x: функции toolhelp типа Process32First, Process32Next, Thread32First, Thread32Next... Для NT - psapi - EnumProcesses и т.д. (кстати, как там в NT с потоками?), общие функции - EnumWindows, EnumThreadWindows, может ещё что.
void опубликован 22-01-2002 16:44 MSK     Click Here to See the Profile for void  Click Here to Email void     
Именно. Нужно для '98.

DWORD cur_proc;
cur_proc=GetCurrentProcessId();
m_list_thr.ResetContent();

HANDLE hSnap=NULL;
hSnap = СreateToolhelp32SnapshotTH32CS_SNAPTHREAD,0);
if (hSnap == NULL)
{
AfxMessageBox("Error Load ToolHelp");
}

THREADENTRY32 thr;
if (Thread32First(hSnap, &thr))
{
char id;
itoa((int)thr.th32ThreadID,&id,16);
m_list_thr.AddString(&id);
while (Thread32Next(hSnap, &thr))
{

itoa((int)thr.th32ThreadID,&id,16);
m_list_thr.AddString(&id);
}
}
CloseHandle(hSnap);

Это дело не работает - почему? Spy все отслеживает...

void опубликован 22-01-2002 16:46 MSK     Click Here to See the Profile for void  Click Here to Email void     
Именно. Нужно для '98.

DWORD cur_proc;
cur_proc=GetCurrentProcessId();
m_list_thr.ResetContent();

HANDLE hSnap=NULL;
hSnap = СreateToolhelp32SnapshotTH32CS_SNAPTHREAD,0);
if (hSnap == NULL)
{
AfxMessageBox("Error Load ToolHelp");
}

THREADENTRY32 thr;
if (Thread32First(hSnap, &thr))
{
char id;
itoa((int)thr.th32ThreadID,&id,16);
m_list_thr.AddString(&id);
while (Thread32Next(hSnap, &thr))
{

itoa((int)thr.th32ThreadID,&id,16);
m_list_thr.AddString(&id);
}
}
CloseHandle(hSnap);

Это дело не работает - почему? Spy++ все отслеживает...

ADK опубликован 23-01-2002 05:48 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Посмотри пример Process Viewer из Platform SDK.
ADK опубликован 23-01-2002 05:52 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Вот может поможет мой код для получения путей всех запущенных приложений в массив строк. Все функции привязаны через GetProcAddress, чтобы работало во всех ОС.

void GetCurrentProcessesModules(CSimpleStrArray& sa)
{
if(IsRunningUnderNT())
{
HANDLE hProc;
HMODULE hModHandle;
DWORD dwCount, dwcbNeeded, dwIdPocesses[200];
char szExeName[MAX_PATH];

if(!pfnEnumNTProcesses(dwIdPocesses, sizeof(dwIdPocesses), &dwcbNeeded)) return;

for(UINT i = 0; i < dwcbNeeded / sizeof(DWORD); i++)
{

hProc = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, dwIdPocesses[i]);

if(hProc>0)
{
if(!EnumProcessModules(hProc, &hModHandle, sizeof(HMODULE) , &dwCount))
{
CloseHandle(hProc);
continue;
}

if(GetModuleFileNameEx(hProc, hModHandle, szExeName, sizeof(szExeName))>0)
{
sa.Add(szExeName);
CloseHandle(hProc);
continue;
}
}

CloseHandle(hProc);
}
}
else // Win9x or Me
{
HANDLE hProcessSnap;
PROCESSENTRY32 pe32 = {0};

hProcessSnap = pCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == (HANDLE) -1) return;

pe32.dwSize = sizeof(PROCESSENTRY32);

if (pProcess32First(hProcessSnap, &pe32))
{
BOOL bGotModule;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,pe32.th32ModuleID,&me32,sizeof(MODULEENTRY32));

if (bGotModule)
{
sa.Add(pe32.szExeFile);
}
}

while (pProcess32Next(hProcessSnap, &pe32));
}

CloseHandle (hProcessSnap);
}
}

ADK опубликован 23-01-2002 05:55 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Название функции не мотри, что-то я его забыл исправить ;-)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.