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

Przekierowywanie na port klawiatury c++


Rekomendowane odpowiedzi

Opublikowano

Witam.

 

Ostatnio zastanawiałem się jak zrobić program aby pisał na klawiaturze ;) chodzi mi oto że ja np. otworze notatnik i włączę go a on coś wpisze w tym notatniku jestem dopiero początkującym więc gdyby wraz z kodem znalazło by się jego objaśnienie byłbym bardzo wdzięczny

 

pozdrawiam :P

 

 

Opublikowano

Jest Ci taki program potrzebny czy chcesz po prostu poćwiczyć c++? Bo jakby co to w autoit/ahk można to łatwo zrobić za pomocą funkcji send.

 

Tu masz temat na stackoverflow -> http://stackoverflow.com/questions/2113950/how-to-send-keystrokes-to-a-window

 

I naucz się obsługi googla bo to podstawowa umiejętność programisty.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

http://kurs-c-plus-plus.cba.pl/?page_id=352

 

Jeżeli chodzi o WinApi czy taki fstream to google jest bardzo pomocne (ironia, bo nie jest).

 

Oczywiście, że jest bardzo pomocne, ale trzeba drążyć temat.

 

-------------------------------------------------------------------------------------------

 

@shift0228

 

Operując na elementach systemu trzeba korzystać z interfejsu programistycznego jaki ten system udostępnia - w przypadku Windowsa najważniejszą biblioteka jest WinAPI, pełną dokumentację do niej znajdziesz na msdn -> https://msdn.microsoft.com - jest to najważniejsze i najdokładniejsze źródło informacji o wszystkich microsoftowych produktach.

 

Podstawowy kurs WinAPI (po polsku) znajdziesz między innymi tutaj -> http://cpp0x.pl/kursy/Kurs-WinAPI-C++/167

 

 

Nie programuje w c++ ale postaram się rozszyfrować kod ze stacka:

HWND notepad = FindWindow(_T("Notepad"), NULL);
HWND edit = FindWindowEx(notepad, NULL, _T("Edit"), NULL);
SendMessage(edit, WM_SETTEXT, NULL, (LPARAM)_T("hello"));

HWNd to uchwyt do okna (window handle) - czyli jednoznaczny identyfikator danego okna / elementu okna (z czego się składa i jak wygląda Cię nie interesuje, nie używasz go bezposrednio tylko przekazujesz jako argument do różnych funkcji), tu znajdziesz dokładny opis -> https://msdn.microsoft.com/en-us/library/aa979055(v=vs.71).aspx

 

Jak pobrac uchwyt do okna notepad? Ano za pomocą funkcji FindWindow() -> https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx

Zgodnie z dokumentacją funkcji oba parametry są opcjonalne - możesz podać jeden z nich a drugi ustawić jako NULL. Tu wygodniej bylo podac nazwe klasy niż nazwę okna (która jest zmienna w zależności od tytułu dokumentu, ale równie dobrze mógłbyś pewnie wpisać:

HWND notepad = FindWindow( NULL, "Bez tytułu - Notatnik")

Mając już uchwyt do głównego okna możemy pobrać uchwyt do jego elementu - nas interesuje obszar roboczy bo to w nim będziemy pisać, używamy w tym celu funkcji FindWindowEx() -> https://msdn.microsoft.com/en-us/library/windows/desktop/ms633500(v=vs.85).aspx

jako hwndParent przekazujemy uchwyt do naszego "rodzica" zapisany w zmiennej notepad, podajemy jeszczę klasę obiektu do którego chcemy się odwołać i tyle wystarczy by winapi jednoznacznie przypisało do niego uchwyt.

 

Skąd właściwie wziąć te nazwy klas? Można definiować je samemu, ale gotowe systemowe elementy mają już swoje predefiniowane klasy, tu znajdziesz info i nazwy gotowych klas:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms633574(v=vs.85).aspx

 

Ok, skoro już potrafimy wskazać programowi gdzie ma pisać (mamy uchwyt do pola edycji) to używamy funkcji która wyśle tam tekst - szczegółowy opis działania funkcji SendMessage() znajdziesz tutaj -> https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspx

 

Co oznaczają wyrażenia _T() ? To już myślę, że sam potrafisz wyszukać ;)

 

Powyższy przykład miał na celu pokazanie Ci jak się brać za ogarnianie bardziej skomplikowanych elementów:

  • szukasz dobrego przykładu (polecam stackoverflow, gdyż jest tam system oceniania odpowiedzi no i największa społeczność programistów, więc wiesz kto ogarnia a kto nie),
  • rozkładasz go na czynniki pierwsze wyszukując i czytając dokumentację do wszystkich nieznanych funkcji na msdn.

Nie ma lepszego sposobu, w żadnym internetowym kursie nie nauczą Cię korzystać z każdej pierdoły jaką oferuje WinAPI czy jakiekolwiek inne biblioteki - wszystko opiera się na uważnym czytaniu dokumentacji i bieżącym uzupełnianiu wiedzy.

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...