WM_KEYDOWN + Virtual-Key Code itd.

0

Te pytania trochę z WinAPI...

  1. Czy ktoś może pomógł by mi napisać funkcję, która przy pomocy komunikatu WM_KEYDOWN wpisywała by do otwartego okna (np. jeżeli jest otwarty Notatnik, to tekst pojawiał by się w polu edycji tekstu) jakiś tekst. HWND do okna pobieram za pomocą GetForegroundWindow(), ale gdy wysyłam do tego, to żaden tekst mi się nie pokazuje.
  2. Jak zamnienić jakiś znak na virtual-key code? Potrzebne mi to jest przy wysyłaniu komunikatu WM_KEYDOWN .
0

A może TranslateMessage w pętli obługi messydży, a potem np. WM_CHAR ?

0

TranslateMessage? Przecież ja to mam wysłać, a nie odebrać... (?)
Próbowałem z WM_SYSKEYDOWN, ale też nie zawsze wychodzi...

0

Spróbuj czegoś takiego jak w poniższym kodzie (C++ Builder):

HWND H = FindWindow("Notepad", 0);
if (!H) {
ShowMessage("Nie można uzyskać uchwytu notatnika.");
return;
};

HWND h; //uchwyt pola edycyjnego w notatniku
char class_name[255]; //szukamy obiektu "Edit"

for (int n = 0; n<=1000; n++) { //powiedzmy, że liczymy na zmieszczenie się w tysiącu...
h = GetDlgItem(H, n);
GetClassName(h, class_name, 255);
if (h && (AnsiString(class_name) == "Edit")) {
ShowMessage(IntToStr(n));
break;
};
};

SendMessage(h, WM_CHAR, 's', 0); //wysyłamy znak

Robiłem to pod Windą XP i chadzało poprawnie.

0

Właśnie o to chodzi. Dzięki. Ale teraz jak pobrać uchwyt do takiego "edit'a" w każdej aplikacji, tzn. jak pobrać adres kontrolki w której jest właśnie kursor... (lub jeszcze lepiej żeby go tam nie było, tylko aplikacja do której przesłamy tekst sama wybierała gdzie go wpisać - ale to już pozostawiamy jej)?

0

Jedyne co mogę teraz zaproponować, to użycie tego ostatniego kodu, żeby poszukać liczbowego identyfikatora potrzebnego komponentu edycyjnego danej aplikacji. Obecnie nie znam lepszego sposobu (choć pewnie jakiś jest). Ale da się w ten sposób "ugryźć" prawdopodobnie większość programów, które mają komponenty do wpisywania tekstu. Trochę z ciekawości "pisałem" tak dzisiaj po kilku programach...

0

Jakoś pobrać uchwyt dialogu, który powinnien przechwytywać znaki...

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