szukam jakiegoś uniwersalnego sposobu wyszukiwania hwnd do procesu, lub grupy procesow pomijajac estetyke kodu podam jego krytyczne fragmenty:
szukanie PIDów, na podstawie tutka z cyfrowego barona, listowanie aktywnych procesow
KOD cpp: UKRYJ
void *Snap;
PROCESSENTRY32 proces;
Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);
proces.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(Snap , &proces)) {
do {
HWND h1 = FindWindow("Notepad", 0);
if(proces.szExeFile[ 0 ] != '[')
if (proces.szExeFile[0]=='n')
if (proces.szExeFile[1]=='o')
if (proces.szExeFile[2]=='t')
if (proces.szExeFile[3]=='e'){
//Zrzut do tablicy PIDa - proces.th32ProcessID
}
}
PROCESSENTRY32 proces;
Snap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);
proces.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(Snap , &proces)) {
do {
HWND h1 = FindWindow("Notepad", 0);
if(proces.szExeFile[ 0 ] != '[')
if (proces.szExeFile[0]=='n')
if (proces.szExeFile[1]=='o')
if (proces.szExeFile[2]=='t')
if (proces.szExeFile[3]=='e'){
//Zrzut do tablicy PIDa - proces.th32ProcessID
}
}
ok mam tablice pidow - notatnikow
teraz zabieram sie za wyszukiwanie hwnd:
KOD cpp: UKRYJ
HWND h = ::GetTopWindow(0 );
while ( h ) {
DWORD pid;
DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);
if ( pid == StrToInt(ListBox1->Items->Strings[i]))
{
break; ///jest pid - jest uchwyt
}
h = ::GetNextWindow( h , GW_HWNDNEXT);
}
//tutaj mam h
while ( h ) {
DWORD pid;
DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);
if ( pid == StrToInt(ListBox1->Items->Strings[i]))
{
break; ///jest pid - jest uchwyt
}
h = ::GetNextWindow( h , GW_HWNDNEXT);
}
//tutaj mam h
i teraz zaczynają się jaja:
bo FindWindow daje mi inny uchwyt niż powyższa pętla
KOD cpp: UKRYJ
char buffer[256];
GetWindowText(h,buffer,255); //Daje mi MSCTFIME (WTF?!)
hh = FindWindow("notepad",NULL);
GetWindowText(hh,buffer,255); //Daje mi Bez tytułu... czyli jest OK
GetWindowText(h,buffer,255); //Daje mi MSCTFIME (WTF?!)
hh = FindWindow("notepad",NULL);
GetWindowText(hh,buffer,255); //Daje mi Bez tytułu... czyli jest OK
Aby uciąć od razu powiem, że robię przegląd dla wszystkich wyszukanych PIDów i nieważne ile mam notatników - zawsze jest tak samo źle.
co ciekawe...
KOD cpp: UKRYJ
SetForegroundWindow(h);
SetForegroundWindow(hh);
SetForegroundWindow(hh);
Powoduje ten sam efekt, mryga mi na pasku zadań
Jakiś pomysł - dlaczego tak?






