Findwindow+gethandle inaczej

0

Witam

Mam problem przy pewnej aplikacji. Gdy wyszukuje handle za pomocą findwindow i wpisując classname. Nie jest w stanie mi znaleŹć uchwytu okna, jedynie możliwość daje mi szukanie po przez nazwę okna.

przykład:

h:=FindWindow('classname aplikacji'),nil); //Nie działa tylko z tą aplikacją!! z innymi nie ma problemu

np. notatnik -> 'Notepad'
ale

h:=FindWindow(nil, 'Nazwa okna aplikacji'); //Działa...

Tylko że ja koniecznie musze dostać handle przez classname(bo się nie zmienia)
a nazwa okna moze się zmieniać np. na podstawie Notatnika-> 'Nowy dokument tekstowy.txt - Notatnik'
przy każdej innej nazwie pliku inna będzie nazwa okna.

Przypuszczam że classname moze mieć jakieś nieznane znaki char, które przy pobieraniu classname pomija i daje mi niekompletną nazwe. Czy jest to możliwe, jaka jest możliwość pobrania uchwytu z takich aplikacji?

ps. classname jest złożone z 2 części nazwyoddzieone kropką. np. 'nazwa.klasy' Moze przez tą kropkę coś swiruje?

Pozdrawiam i dziękuję za każdą odpwiedź...

0

Masz tu prosty przykład w c++:

#include <windows.h>
#include <psapi.h>

#pragma comment(lib, "psapi.lib")

int main()
{
	HWND  handle = 0;
	handle = FindWindow(0, "Untitled - Notepad");
	DWORD pid = 0;
	GetWindowThreadProcessId(handle, &pid);
	char name[256];
	HANDLE hprocess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
	GetProcessImageFileName(hprocess, name, 256);
	CloseHandle(hprocess);
	return 0;
}

na końcu w zmiennej name masz pełną ścieżkę do pliku .exe procesu do którego należy znaleziony uchwyt, na podstawie tego wiesz czy dany uchwyt to ten którego szukałeś.

0

Oczywiśie to już standard na 4programmers....

aby coś napisać zeby post nie był pusty...

<font size="3">Czytajcie dokładnie... Nie znajduje mi UCHWYTU przez classname.</span>

przyklad:

procedure TForm1.Button1Click(Sender: TObject);
var
  HWND : THandle;
begin
  HWND:=0;
  HWND:=FindWindow('nazwa.klasy',nil);
  if HWND>0 then Showmessage('Jest')
  else Showmessage('Nie ma');
end;

Co takiego moze mieć aplikacja ze znając jej classname('nazwa.klasy') nie moge pobrać uchwyt?

0

Jeżeli faktycznie znasz nazwę klasy to nie ma takiej opcji aby nie dało się znaleźć. Pobaw się SetCapture, WindowFromPoint i GetClassName żeby się dowiedziać jaką faktycznie nazwę ma klasa. A może na końcu nazwy klasy są dodatkowe spacje, hm?

0

A kiedy dostajesz classname okna tej aplikacji, której uchwytu nie możesz pobrać to co zawiera ten classname??

Najlepiej zrób pętlę, która będzie po porównywać kolejne znaki w stringu z zerem i otrzymasz wtedy odpowiedź jak długa jest nazwa classname i będziesz też wiedział czy są tam jakieś znaki których nie da się wyświetlić.

0

nie wiem czy temat jeszcze aktualny, ale jeśli ktoś potrzebuje to prosze :)

klasa notatnika to : 'Notepad'

1 użytkowników online, w tym zalogowanych: 0, gości: 1