Wątek zablokowany 2013-07-07 11:47 przez furious programming.

zapętlanie klawiszy (strzałka w górę, strzałka w dół)

0

Witam.

W jaki sposób mogę dokonać czegoś, co będzie mi automatycznie wciskało strzałkę w górę i strzałkę w dół, a wyłączyć to mogę np. za pomocą klawisza F12? Chciałbym też, by to działało w tle (gdy okienko jest zminimalizowane).
W którym programie było by mi takie coś skonstruować najłatwiej? (Delphi, C++, czy inny?)
Istnieje jakiś poradnik jak skonstruować takie coś? Szukałem niestety i nic nie znalazłem.

Dziękuję.

0

http://4programmers.net/Forum/C_i_C++/197153-symulacja_nacisniecia_klawisza_a Tutaj jest podobny problem, tylko ma wysyłać a, ty musisz zamienić to na strzałki i zapętlić.

Polecałbym zrobienie tego w Pythonie

0

zellus. Po co coś takiego skomplikowanego? Nic nie rozumiem. Ja chcę tylko, by program powtarzał wciskanie klawiszy na tej zasadzie - Strzałka w górę->strzałka w dół -> strzałka w górę -> strzałka w dół... Dopóki nie wcisnę stop (F12).

strałka w górę
strzałka w dół
gotoscriptline0 (naokoło) Najlepiej jakby się dało podziałać tak, by to działało nawet po zminimalizowaniu programu (ale to już wyższa szkoła jazdy- później :D)

Zupełnie nie wiem jak wykorzystać to co mi wysłałeś.

0

Patryk27 wysłał chyba dobre rozwiązanie, chyba że bardzo chcesz to napisać to w tym co wysłałem był kod w pythonie:

h = win32gui.FindWindow(None, "README.txt - Notatnik")
h = win32gui.FindWindowEx(h, None, "Edit", None)
win32api.SendMessage(h, win32con.WM_CHAR, 85, 0)

I on wysyła do notatnika wysyła sygnał jakbyś wcisnął klawisz a na klawiaturze. 2 pierwsze linijki służą wybraniu okna, a 3 wysłaniu a do programu. Jakoś prościej nie mogę sobie tego wyobrazić. Od razu zaznaczę że nie pisałem nigdy w pythonie więc nie mogę na szybko napisać gotowego kodu nawet jakbym chciał. Tzn musiałbym dłuższą chwile poświęcić na zapoznanie się z nim...

PS. Myślę że powinieneś jeszcze pomiędzy przyciśnięciami dodać jakieś sleep albo jak to tam w pythonie idzie, a całość zapętlić w pętli

0

Zrobiłem w autoit coś takiego:

HotKeySet("{F11}", "bot")
HotKeySet("{F12}", "stop")
 
Func stop()
	Exit
EndFunc
 
Global $bot = False
 
Func bot()
	$bot = Not $bot
EndFunc
 
While 1
	If $bot Then
		Send ("{UP}")
		Sleep(800)
		Send ("{DOWN}") 
	Else
		Sleep(10)
	EndIf
WEnd 

Chciałbym jednak zrobić coś takiego hmm.. w delphi? Sprawdza się to świetnie jak na razie. Jednak chciałem, by zaczynało się to za pomocą "f11", a stopowało na "f12", jednak wszystko jest na f11 :D Nie wiem czemu..
O ile się nie mylę to delphi ma podobny język do tego..
Jest to prawda?

zamiana znacznika <quote> na <code> - fp

0

Chciałbym jednak zrobić coś takiego hmm.. w delphi?

Zatem naucz się tego języka i napisz. Gotowca nie będzie, materiałów też za bardzo nie ma jak podać, oprócz Kompendium 4p oraz linku do MSDN.

0

"Kompendium 4p, msdn" cóż to za ustrojstwa ? :D

Własnie chętnie bym napisał takie coś w Delphi. Tylko zielonego pojęcia nie mam jak ;s Nie chodzi mi o gotowce, a jakiś tutorial/wskazówki.. i jak później zrobić, by to działało nawet po zminimalizowaniu..

Będę siedział może coś wykminię.

0

Nie chodzi mi o gotowce, a jakiś tutorial/wskazówki

Delphi
http://msdn.microsoft.com/en-US/

  • szukanie we własnym zakresie

i jak później zrobić, by to działało nawet po zminimalizowaniu..

Jestem na 93.1416% pewien, że da się tak zrobić w AutoHotKey, tylko trzeba by pogrzebać w opcjach.

0

zupełnie nie wiem o co chodzi w tym autohotkey.

0

To na forum AutoHotKey - migiem! I czytaj tam posty z przykładowymi skryptami, dokumentację i kombinuj SAM! A jeżeli chcesz zrobić taki program jak opisałeś w Delphi, to poniżej masz przydatną proceudrę. Do tego poczytać Pętle i ewentualnie Tablice a jeżeli chodzi o rozpoznanie czy nacisnąłeś w grze na przykład F12 żeby rozpocząć symulacje "combo" to pozostają dwie metody w sumie: globalny, lovlevelowy hook na klawiaturę (wymaga wyłaczonego UAC lub praw Administratora na nowszych systemach). Ogólnie wertuj MSDN i Google w poszukiwaniu WH_KEYBOARD_LL (stała ta wynosi $0D). Inne rozwiązanie to odczytywanie rezultatu funkcji GetAsyncKeyState w wątku z krótkim intervalem czasowym lub Timerze i reagowanie na rezultaty. Jednak widząc, Twój zerowy zapał w podejściu do tego tematu i chęć samodzielnego wykonania, a przy okazji nauczenia się czegoś pomimo otrzymanych licznych informacji. Nie sądzę by sens miało podawanie czegoś więcej. Nie raz już pomagałem tutaj podsyłając gotowce na temat wspomnianych wyżej metod wykrycia wciskania klawiszy globalnie w różnych aplikacjach. Takze pogoogluj. Bo człowiek traci chęć niestety do pomagania, skoro wrzuca i to nie raz gotowce, a ludziom się nawet nie chce z nich skorszystać oraz dodatkowo pogooglować za większą ilością informacji. Myślą, że jak "nasmarują" od razu na forum posta, to wszyscy rzucą wszystko i polecą im taki program napisać na tacy i za darmo. Tak to nie działa. Takie rzeczy tylko w Erze ;) A tak poważnie. Jeżeli nie chce się Tobie samemu wykazać inicjatywą, to pozostaje tylko zlecenie tego w dziale Oferty pracy z kontaktem na siebie, opisem co i jak ma działać oraz koniecznie propozycją wynagrodzenia.

procedure KeyDownUp(KeyToSend : Byte; KeyDown : boolean);
const
  DownUp_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_KEYUP);
  Extended_Flags_Arr : array[boolean] of DWORD = (0, KEYEVENTF_EXTENDEDKEY);
var
  Input : TagINPUT;
  KeyExtended : boolean;
begin
  Input.Itype := INPUT_KEYBOARD;
  Input.ki.wVK := KeyToSend;
  Input.ki.wScan := MapVirtualKey(KeyToSend, 0);
  KeyExtended := KeyToSend in
    [VK_CONTROL, VK_LCONTROL, VK_RCONTROL,
    VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT,
    VK_HOME, VK_END, VK_PRIOR, VK_NEXT,
    VK_INSERT, VK_DELETE, VK_MENU];
  Input.ki.dwFlags := DownUp_Flags_Arr[not KeyDown] or Extended_Flags_Arr[KeyExtended];
  Input.ki.time := 0;
  SendInput(1, Input, SizeOf(Input));
end;
0

co to jest win32gui?
Mam pewne problemy nawet jak wkleję ten skrypt..
Traceback (most recent call last):
File "C:/Users/Oskar/Desktop/python", line 1, in <module>
h = win32gui.FindWindow(None, "README.txt - Notatnik")
NameError: name 'win32gui' is not defined

3

Odpowiadanie w tym temacie to strata czasu. Chcesz pisać programy w Delphi to zacznij od początku czyli kursu/książki dopiero wtedy zadawaj te swoje głupkowate pytania. Bezmyślnie wklejasz jakieś strzępki kodu bóg jeden wie gdzie i dziwisz się, że nie działa.

0

To znowu ja ;D
Stworzyłem swój pierwszy projekt, a mianowicie "Hello World".
Chciałbym go wam przedstawić:

Mam kilka pytań z nim związanych.. A mianowicie:
Da się jakoś udoskonalić grafikę buttonów? Jak na razie wygląda to ubogo ;/
Tak samo chciałbym poprawić jakość wyświetlonych napisów. Szczególnie chciałbym usunąć te tło za nimi. Da się tego dokonać? - Jak?
Jak to zapisać, by zapisało się tylko to okienko, a nie cały projekt? (Tak, by za każdym razem gdy chcę to uruchomić nie musieć uruchamiać tego przez delphi).
Czy da się powiększyć okienko jak i tekst z napisem "HelloWorld"?

Dziękuję.

Wygląda na to, że hello world już opracowane :D

3

Tak jak napisał @szopenfx - nie ma sensu teraz objaśniać podstaw obsługi IDE i innych podstaw. Poświęcając chwilę na przeczytanie kursów z sieci czy kompendium na 4p, dowiedział byś się wielu ważnych rzeczy. I mogę doradzić coś od siebie. Nie baw się w gimbusowegopr0codera - chyba, że takie masz aspiracje. Zabawą w dopieszczenie GUI zajmij się później. Najpierw poznaj składnie i zasady obiektowego Pascala, a później napisz na podstawie naszych porad, to co chciałeś osiągnąc. Na tworzenie pr0 GUI - jeszcze za pewne przyjdzie czas. Według mnie teraz nie na tym powinieneś się skupić. Co z tego, że dasz w tle jakąś mange/ Tsubase / poster dżastina bibera / whatever. Jak i tak program nie będzie miał żadnej funkcjonalności. Wiem, że ćwiczysz sobie cośtam dopiero. Jednak powinieneś zmienić priorytety. A takie jest przynajmniej moje zdanie.

0

Moim priorytetem jest zrobić to do porządku bym był z tego dumny. Na razie mnie nie satysfakcjonuje to zwykłe "Hello World".
Powiedz mi chociaż proszę
Jak to zapisać, by zapisało się tylko to okienko, a nie cały projekt? (Tak, by za każdym razem gdy chcę to uruchomić nie musieć uruchamiać tego przez delphi).

Okej. Już wiem - F9 ; D

Jak mogę edytować wyskakujące okienko?

0

Skompiluj i uruchom plik *.exe?
Btw, Delphi przypadkiem nie jest płatne?


Jak mogę edytować wyskakujące okienko?

Co przez to rozumiesz?

0

chcę edytować okienko, które wyskakuje po komendzie showtekst ('Hello World');
Własnie to okienko zawierające właśnie ten tekst. Jak je pomniejszyć, powiększyć, jak w nim pogrubić itp

Dokładnie chodzi mi o to:

2fld.jpg

dodanie obrazka do treści posta - fp

0

Zrobić własne lub zmodyfikować kod VCL, afair inaczej się nie da.

0

wiem że zrobić własne. Na logike idzie to wziąć. Tylko "jak"?

0

Sposób 1 (tak, jak zrobione w VCL/LCL): dynamiczne tworzenie komponentów w stylu:

Procedure ShowMessage(const MsgText, MsgCaption: String);
Var Form: TForm; 
Begin
 Form := TForm.Create;

 Try
  Form.Caption := MsgCaption;

  With TLabel.Create(Form) do
  Begin
   Parent := Form;
   Caption := MsgText;
  End;

  With TButton.Create(Form) do
  Begin
   Parent := Form;
   Caption := 'Ok';
   ModalResult := mrOk;
  End;

  ShowModal;
 Finally
  Form.Free;
 End;
End;

(pisane z palca, może działać, może nie - zobacz sobie, jak zrobili funkcję CreateMessageDialog w VCL po coś dokładniejszego).


Sposób 2: po prostu zaprojektuj formę z jednym przyciskiem oraz labelem i dodaj do niej publiczną metodę: ```delphi Procedure TMyMessageForm.Show(const Text, Caption: String); Begin self.Caption := Caption; TextLabel.Caption := Text;

ShowModal;
End;

A pod przycisk na `OnClick` podepnij po prostu `Close();`.
0

gdzie to niby wkleić?

Procedure TMyMessageForm.Show(const Text, Caption: String);
Begin
 self.Caption := Caption;
 TextLabel.Caption := Text;
 
 ShowModal;
End;

i co to zmieni ? xd

dodanie znacznika <code class="delphi"> - fp

0

Może jednak wróć do nauki podstaw, na takie "trudne rzeczy" przyjdzie czas później.

0

Okej.
Przeszukuję fora, czytam, przeglądam, zapamiętuję, robię notatki.. Dokonałem kilka razy (by Sobie utrwalić) czegoś takiego:

Chciałbym to jednak rozbudować. Jak widzicie każdy może zobaczyć jakie hasło podaję.
Jak mogę zrobić, by zamiast password było coś takiego ******** - żeby wpisując hasło nie było go widać.. I jak zrobić, by podczas otwierania następnego okna zamykało poprzednie?
Chciałbym też wiedzieć jak zrobić, by podczas podania złego hasła/loginu wyskoczył napis błędny login/lub hasło.
Chciałem to znaleźć, jednak mi się nie udało..

Dzieki.

1

Jak mogę zrobić, by zamiast password było coś takiego ******** - żeby wpisując hasło nie było go widać..

TMaskEdit lub TEdit.PasswordChar

I jak zrobić, by podczas otwierania następnego okna zamykało poprzednie?

TForm.Show;
TForm.ShowModal;
TForm.Hide;
TForm.Close;

Chciałbym też wiedzieć jak zrobić, by podczas podania złego hasła/loginu wyskoczył napis błędny login/lub hasło.

if + MessageBox


Chciałem to znaleźć, jednak mi się nie udało..

Twój "problem" jest taki, że od samego początku bierzesz się za pisanie aplikacji, podczas gdy nie znasz ŻADNYCH podstaw (aka nie wiesz o istnieniu konstrukcji "if" lub nie potrafisz jej zastosować w praktyce, co wynika z poprzedniego pytania), ani nawet nie potrafisz wyszukiwać informacji w internecie.
Kup książkę, przeczytaj ją całą, a dopiero potem bierz się za pisanie czegokolwiek na własną rękę.

0
DroniC napisał(a):

Jak mogę zrobić, by zamiast password było coś takiego ******** - żeby wpisując hasło nie było go widać..

Edit1.PasswordChar:='*'; - można też w inspektorze.

0

Tak wygląda mój press button - mniej więcej:

if (edit1.text = 'admin') and (edit2.Text = 'password') then
begin form2.showmodal;
end
else
begin
end;

Czy

TForm.Show;
TForm.ShowModal;
TForm.Hide;
TForm.Close;

dodać pomiędzy? Czy gdzie to wklikać?

dodanie znaczników <code class="delphi"> - fp

2

@DroniC - może weź się najpierw poucz, a później zabierz się za pisanie czegokolwiek, co? @Patryk27 podał Ci cztery różne metody służące do:

Method Description
TForm.Show; Use Show to set the form’s Visible property to true and to bring the form to the front of other forms on the screen.
TForm.ShowModal; Use ShowModal to show a form as a modal form. A modal form is one where the application can’t continue to run until the form is closed. Thus, ShowModal does not return until the form closes. When the form closes, it returns the value of the ModalResult property. To close a modal form, set its ModalResult property to a nonzero value.
TForm.Hide; Hide sets the Visible property to false.
TForm.Close; Call Close to close a form. Attempts to close a form can be aborted by the CloseQuery event dispatcher or the OnCloseQuery event handler.
a Ty chcesz to gdzieś wklejać...

Programowanie to nie bezmyślne przeklejanie kodów znalezionych w sieci, tylko rozsądny proces twórczy oparty o solidną wiedzę oraz pomoc środowiska i inne dokumentacje - nie można wklejać co popadnie... Polecam więc zacząć się uczyć, a nie prosić o prowadzenie za rękę;


Edit: zmodyfikowałem zawartość tabelki wstawiając opisy metod pobrane z pomocy środowiska Delphi.

0
procedure TForm1.Button1Click(Sender: TObject);
begin
if (edit1.Text = 'admin') and (edit2.Text = 'password') then
begin form1.close;
end
else
begin
form2.showmodal;
end;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
Edit2.PasswordChar:='*'
end;

end.

Jest tam form1.close, jednak nie działa ;/ Po prostu otwiera się kolejna forma nie zamykając poprzedniej.

dodanie znacznika <code class="delphi"> - fp

0

"W jakim cleu to przypisanie do property PasswordChar dodałeś w zdarzeniu OnChange?"
dodałem tam, bo tak i tyle :D Działać działa ;) Gdzie to niby miałem dać?
Nie wiem jakie zdarzenie.. kliknąłem 2x na pole edit i tam wpisałem.. wpisałem edit 2, bo akurat w edit 2 podaję hasło :D No działa.. cóż.
Problem mam z zamknięciem 1 formy, kiedy ma się uruchomić druga.

Jeżeli ktoś jest łaskaw to proszę o dokładniejsze opisanie tego krok po kroku. Jestem wstanie zrobić jakieś logowanie itp, a nie jestem wstanie zamknąć okienek. To jest śmieszne.
Dodałem do oncreate, jednak to nic nie daje.

if begin form2.showmodal then form1.close

Dodałem takie coś, dodałem zwykłe form1.close i nic.

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