Jaki jest kod, który pozwoli mi wprowadzać wartości do programu ze schowka, wklejać wynik pracy programu do schowka, wyczyścić schowek oraz do pozostałych czynności na jakie język c++ pozwala?
Chodzi o program konsolowy, bo widziałem w Internecie dla okienkowych kody, ale jeszcze do tego nie doszedłem. Dopiero się uczę podstaw w konsoli.
Chciałbym napisać program, który po wpisaniu 2 wartości - ciągu znaków (ew. to co jest aktualnie w schowku) i mnożniku powielał ciąg znaków (lub ciąg znaków zawartych w schowku).
np.
tekst
5
tekst tekst tekst tekst tekst
Kod podany przez Ciebie wyświetla zawartość schowka windowsowego w oknie konsoli. Rozumiem, że getClip() wsadzić do zmiennej i dać do pętli (sterowaną zmienną, którą wpiszę na początku), a na koniec kopia tego co tam namnożyło kodem do wklejania wyników programu do schowka… Tylko jaki kod…
Angielskiego nie znam na za dobrze, a po tłumaczeniu Google dalej jakoś się w tym gubię…
Jeśli masz zmienną np. std::string tekst; zawierającą początkowy tekst i int ile; zawierającą liczbę ile razy ma zostać powtórzony tekst oraz zmienną std::string wynik na początku pustą, do której ma zostać zapisany powtórzony tekst to
for(int i = 0; i < ile; ++i)
wynik += tekst;
Teksty w zmiennej wynik będą sklejone, jeśli chcesz mieć poszczególne kopie rozdzielone spacjami to łączysz w ten sposób
for(int i = 0; i < ile; ++i)
wynik += tekst + ' ';
Ale wtedy będziesz miał na końcu dodatkową spację, aby ją usunąć musisz skrócić napis o 1 znak
wynik.resize(wynik.length() - 1);
To warto się trochę pouczyć Powinny wystarczyć podstawy gramatyki (w dokumentacji raczej rzadko spotyka się bardziej skomplikowane konstrukcje), podstawowe słownictwo angielskie i trochę słownictwa technicznego
PS. W kodzie, który podałem w poprzednim poście używałem formatu danych CF_OEMTEXT, czyli tekstu kodowanego OEMową strona kodową, ponieważ konsola standardowo używa takiej strony kodowej (ze względu na kompatybilność konsola używa starych DOSowych stron kodowych). Jest też typ CF_TEXT, który oznacza tekst kodowany stroną używaną przez resztę systemu (podstawowy zestaw ASCII jest identyczny, znaki diakrytyczne mają różne kody). Jest też typ CF_UNICODETEXT, oznaczający tekst kodowany UTF16 (unicode, każdy znak zajmuje 2 bajty i napis kończy się dwoma null-bajtami (“zwykły” tekst jednym), używany przez kernel Windowsa i zalecany dla nowych programów, typy: char->wchar_t, std::string->std:: w string, itp.; więcej info tu i tu).
Hm… Trochę to skomplikowane… Później spróbuję to wykonać…
A tymczasem mam pytanie… Jaki jest kod na uruchamianie i zamykanie programów? W Google szukałem… jest dużo stron, ale mi nie działają te kody - albo są błędy według kompilatora albo podczas działania programu wyskakują mi jakieś wiadomości, a ja ich nie chcę…
Uruchamiać możesz np. funkcją system, która wywołuje interpreter poleceń z podanym poleceniem (możesz podawać te same polecenia jak do cmd).
Z WinAPI możesz użyć ShellExecute lub ShellExecuteEx, które służą do wywoływania poleceń powłoki, m.in. umożliwiają odpalanie programów. możesz też bezpośrednio użyć CreateProcess do utworzenia procesu, jak radzi kostek135.
Co do zamykania, to możesz użyć TerminateProcess do ubicia procesu. W przypadku aplikacji okienkowych możesz wysłać WM_CLOSE do głównego okna aplikacji (działa jak wciśnięcie krzyżyka na okienku) lub WM_QUIT do głównego wątku aplikacji, w odpowiedzi wątek powinien się zakończyć.
Trochę niefajnie ten temat teraz wygląda, ale cóż… Ograniczenie długości
A bo ja jeszcze pętli nie ogarniam do końca, a tu takie zaawansowane… :-o
Myślałem, że to trochę łatwiejsze będzie… Pewnie wrócę do tego jak dojdę do takiego typu funkcji chyba, że przeskoczę lekcje… :lol:
Czyli w moim programiku wpisać kod np.
WM_CLOSE notepad.exe
z nagłówkiem
#include windows.h
:?:
– Dodane 16.08.2013 (Pt) 19:37 –
Tak w ogóle to ja mam problem z odczytywaniem tej strony MSDN… Nie rozumiem… jak by to powiedzieć… Jej układu, zapisu poleceń… Nie mogę się np. doszukać jaki nagłówek jest wymagany do poleceń zawartych na tej stronie.
No a gdzie jest funkcja z przykładową aplikacją napisana dla WM_CLOSE… Po wklejeniu do programu tej funkcji z nawiasem, w którym jest nazwa procesu, nie działa.
“Notepad” to nazwa klasy okna notatnika, nie nazwa programu. Notatnik wyświetli pytanie o to czy zapisać zmiany jeśli coś wpisywałeś (tak jak standardowo po kliknięciu mu X). Zamiast wysyłać WM_CLOSE do okna możesz też wysłać WM_QUIT do wątku