Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

FindWindow, brak rezultatu.


Rekomendowane odpowiedzi

Opublikowano

Witam mam problem z instrukcja FindWindow, mimo iz okno jest wlaczone nie potrafi go wyszukac.

Moj kod wyglada tak:

 

 

    hwnd = FindWindow(NULL,L"Tibia");
    if(!hwnd){
        cout <<"Nie ma takiego okna!\n";
        cin.get();
    }else{ 
        ........
    }

Czym moze byc spowodowany brak rezultatow?

- Do Sapera okno zostaje wyszukane, do tibi juz nie.

 

Dodam ze wszystkie programy, sa wlaczone z uprawnieniami administratora.

 

Z gory dziekuje i pozdrawiam.

iz9w29.png

Opublikowano

Czy tibia przypadkiem nie ma nazwy wersji w tytule?

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Opublikowano

Witam mam problem z instrukcja FindWindow, mimo iz okno jest wlaczone nie potrafi go wyszukac.

Moj kod wyglada tak:

 

 

    hwnd = FindWindow(NULL,L"Tibia");
    if(!hwnd){
        cout <<"Nie ma takiego okna!\n";
        cin.get();
    }else{ 
        ........
    }

Czym moze byc spowodowany brak rezultatow?

- Do Sapera okno zostaje wyszukane, do tibi juz nie.

 

Dodam ze wszystkie programy, sa wlaczone z uprawnieniami administratora.

 

Z gory dziekuje i pozdrawiam.

jedyne co mi przychodzi do głowy to to że klient Tibi sie jakoś przed tym zabezpieczył... choś nie ma to większego sensu, zważywszy na to że znajdowanie okna nie jest w żaden sposób zagrożeniem w tym wypadku.

Pisze boty do gier WWW na zlecenie.

Opublikowano

Jeśli potrzebujesz pobrać ID procesu to są na to inne sposoby.
Process32First

Process32Next

Opublikowano

Tez mialem ten problem i rozwiazaniem zostalo uzycie ustawienie odpowiednich debug privelege.

Wywolaj ta funkcje przed pobieraniem uchwytu:

 

void EnableDebugPriv()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		return;
	if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
	{
		CloseHandle( hToken );
		return;
	}
	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 );
}

A sama operacje pobieranie uchwytu proponuje zrobic tak:

	
EnableDebugPriv();
	tibiaWindow = FindWindowA("TibiaClient", NULL);
	GetWindowThreadProcessId(tibiaWindow, &pid);
	tibiaHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	if(tibiaWindow && tibiaHandle)
	cout << "Loaded\n";

void_bit.jpg

Opublikowano

Kiedyś się bawiłem z tym, z tego co pamiętam tibia po nazwie miała kilka spacji (3?) więc powinno być coś takiego:

 

  hwnd = FindWindow(NULL,L"Tibia   ");

ale przez kilka lat mogło się to zmienić oczywiście :P

Opublikowano

Kiedyś się bawiłem z tym, z tego co pamiętam tibia po nazwie miała kilka spacji (3?) więc powinno być coś takiego:

 

  hwnd = FindWindow(NULL,L"Tibia   ");

ale przez kilka lat mogło się to zmienić oczywiście :P

W przypadku Tibii nie ma sensu szukać po nazwie ;)

tibiaWindow = FindWindowA("TibiaClient", NULL);

Lepiej wykorzystać classname i wtedy nie interesuje nas czy są w nazwie jakieś spacje czy nie. Na dodatek jeśli później wymyślimy sobie wyświetlanie jakichś informacji w title okna (exp, hp, mp itp.) to ponowne uruchomienie naszego programu się nie powiedzie bo w ogóle okna nie znajdzie.

void_bit.jpg

Opublikowano

 

Tez mialem ten problem i rozwiazaniem zostalo uzycie ustawienie odpowiednich debug privelege.

Wywolaj ta funkcje przed pobieraniem uchwytu:

 



void EnableDebugPriv()
{
	HANDLE hToken;
	LUID sedebugnameValue;
	TOKEN_PRIVILEGES tkp;

	if ( ! OpenProcessToken( GetCurrentProcess(),
		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
		return;
	if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
	{
		CloseHandle( hToken );
		return;
	}
	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 );
}

A sama operacje pobieranie uchwytu proponuje zrobic tak:

 



	
EnableDebugPriv();
	tibiaWindow = FindWindowA("TibiaClient", NULL);
	GetWindowThreadProcessId(tibiaWindow, &pid);
	tibiaHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
	if(tibiaWindow && tibiaHandle)
	cout << "Loaded\n";

Super dziala.

 

Dziekuje wszystkim za pomoc, mozna zakmnac.

iz9w29.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...