Tastenabfrage will nicht wie Ich...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Farodin
Beiträge: 35
Registriert: 16.05.2006 18:49
Wohnort: bei mir zuhause
Kontaktdaten:

Tastenabfrage will nicht wie Ich...

Beitrag von Farodin »

Nach seeeeeeeeeehr langer Zeit des passiven Forendaseins melde ich mich mal wieder und habe auch gleich ein Problem...
Bei folgendem Code (geschrieben in PB 4.0 und unter Verwendung von Jilos Userlib^^):

Code: Alles auswählen

;-Include
DataSection
ico: IncludeBinary "homie.ico"
EndDataSection

CatchImage(0,?ico)
;-Procedures
Procedure.l Help(helpishere.l)
  MessageRequester("Info","Die Tasten F6 - F12 sind mit Sonderfunktionen belegt,wobei gilt:" + Chr(10) + "F6 = YO" + Chr(10) + "F7 = BIATSCH" + Chr(10) + "F8 = HOMIE" + Chr(10) + "F9 = ALTAAAA (Anzahl der 'A's frei wählbar^^)" + Chr(10) + "F10 = NIGGA" + Chr(10) + "F11 = WIXAAAA (Anzahl der 'A's frei wählbar^^)" + Chr(10) + "F12 = TIGHT" + Chr(10) + "PS: Aus Sicherheits- und Spamtechnischen gründen ist die anzahl" + Chr(10) +"der AaA's bei WIXAA und ALTAA auf 50 begrenzt!^^" ,48)
  MessageRequester("Info_2","Die 'Und So'-Funktion sorgt in aktiviertem Zustand dafür,dass" + Chr(10) + "vor jedem Punkt eine von 3 phatten Endungen kommt",48)
;   MessageRequester("Info_3","Die 'Homie'-Funktion ersetzt einige Buchtaben mit phatten Alternativen^^",48)
EndProcedure

Procedure.l About(thisisabout.l)
  MessageRequester("Info","Dieses HoMiEsPeEcH-Programm wurde nur zur Eigenbelustigung programmiert" + Chr(10) + "Jeglicher Missbrauch der Funktionen wird Zivil- und Strafrechtlich verfolgt xD" + Chr(10) + "Ach was^^ macht damit,was ihr wollt :-D" + Chr(10) + "MfG," + Chr(10) + Space(8) + "Faro",48)
EndProcedure

;-Window
MessageRequester("Info","Dieses Programm befindet sich von Anfang an im SysTray" +Chr(10) + "zum beenden Rechtsklicke einfach auf das Icon^^",48)
OpenWindow(0,0,0,10,10,"",#PB_Window_Invisible|#PB_Window_ScreenCentered)
 CreatePopupMenu(0)
   MenuItem(1,"About")
   MenuItem(2,"Hilfe")
   MenuItem(3,"'Und so'-Funktion")
   MenuItem(4,"'Homie'-Funktion")
   MenuBar()
   MenuItem(5,"Beenden")
   

AddSysTrayIcon(0,WindowID(0),ImageID(0))

;-Menu
Repeat
  EventID = WaitWindowEvent(2)
  If EventID = #PB_Event_SysTray
    If EventType() = #PB_EventType_RightClick
        DisplayPopupMenu(0,WindowID(0))
    EndIf  
  EndIf
  If EventID = #PB_Event_Menu
    Select EventMenu()
      Case 1
        CreateThread(@About(),0)
      Case 2
        CreateThread(@Help(),1)
      Case 3
        If GetMenuItemState(0,3) = 0
          SetMenuItemState(0,3,1)
        Else
          SetMenuItemState(0,3,0)
        EndIf
      Case 4
        If GetMenuItemState(0,4) = 0
          SetMenuItemState(0,4,1)
        Else
          SetMenuItemState(0,4,0)
        EndIf
      Case 5
        If GetKeyState_(#VK_CAPITAL)
          JLSimKey(#VK_CAPITAL)
        EndIf
        
        End
    EndSelect
  EndIf
  ;-'Engine'
    For vk = 65 To 90 
      GetAsyncKeyState_(vk)
        If GetAsyncKeyState_(vk) Or GetAsyncKeyState_(#VK_BACK)
          Delay(50)
          JLSimKey(#VK_CAPITAL)
          Delay(50)
         EndIf
    Next
    For no = 48 To 57
      GetAsyncKeyState_(no)
       If GetAsyncKeyState_(no) And GetKeyState_(#VK_CAPITAL)
         no_key = no
         JLSimKey(#VK_BACK)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(no_key)
      EndIf
    Next
    ;-Hotkeys
       If GetAsyncKeyState_(#VK_F6)
         JLSimKey(#VK_SPACE)
         Delay(50)
         JLSimKey(#VK_Y)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_O)
     EndIf
     If GetAsyncKeyState_(#VK_F7)
         JLSimKey(#VK_SPACE)
         Delay(50)
         JLSimKey(#VK_B)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_I)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_A)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_T)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_C)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_H)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
     EndIf
      If GetAsyncKeyState_(#VK_F8)
         JLSimKey(#VK_SPACE)
         Delay(50)
         JLSimKey(#VK_H)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_O)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_M)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_I)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
         Delay(50)
         JLSimKey(#VK_E)
         Delay(50)
         JLSimKey(#VK_CAPITAL)
     EndIf
     If GetAsyncKeyState_(#VK_F9)
       If GetKeyState_(#VK_CAPITAL) 
         JLSimKey(#VK_CAPITAL)
       EndIf
       groesser50:
       input = ValF(InputRequester("AlTaAaAa^^","Bitte Anzahl der AaAaAa's eingeben",""))
       If input <= 50
         JLSimKey(#VK_SPACE)
         Delay(50)
         JLSimKey(#VK_A)
         Delay(50)
         JLSimKey(#VK_CAPITAL)     
         Delay(50)
         JLSimKey(#VK_L)
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
         Delay(50)
         JLSimKey(#VK_T)
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
         For a = 1 To input
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
         Next
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
       Else
         MessageRequester("Fehler","Bitte nicht mehr als 50 A's verwenden. Danke ;-)",16)
         Goto groesser50:
       EndIf
     EndIf
     If GetAsyncKeyState_(#VK_F10)
       JLSimKey(#VK_SPACE)
        Delay(50)
       JLSimKey(#VK_N)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_I)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_G)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_G)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_A)
       Delay(50)
       JLSimKey(#VK_CAPITAL)   
     EndIf
     If GetAsyncKeyState_(#VK_F11)
       If GetKeyState_(#VK_CAPITAL) 
         JLSimKey(#VK_CAPITAL)
       EndIf
       groesser50_2:
       input2 = ValF(InputRequester("WiXaAaAa^^","Bitte Anzahl der AaAaAa's eingeben",""))
       If input2 <= 50
         JLSimKey(#VK_SPACE)
         Delay(50)
         JLSimKey(#VK_W)
         Delay(50)
         JLSimKey(#VK_CAPITAL)     
         Delay(50)
         JLSimKey(#VK_I)
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
         Delay(50)
         JLSimKey(#VK_X)
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
         For a = 1 To input2
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL)  
         Next
         Delay(50)
         JLSimKey(#VK_CAPITAL) 
       Else
         MessageRequester("Fehler","Bitte nicht mehr als 50 A's verwenden. Danke ;-)",16)
         Goto groesser50_2:
       EndIf
     EndIf
     If GetAsyncKeyState_(#VK_F12)
       JLSimKey(#VK_SPACE)
        Delay(50)
       JLSimKey(#VK_T)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_I)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_G)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_H)
       Delay(50)
       JLSimKey(#VK_CAPITAL) 
       Delay(50)
       JLSimKey(#VK_T)
       Delay(50)
       JLSimKey(#VK_CAPITAL)  
     EndIf
     ;-Optional Endings
     If GetMenuItemState(0,3) = 1
       If GetKeyState_($BE)
         what = Random(2)+1
         If what = 1
           JLSimKey(#VK_BACK)
           Delay(50)
           JLSimKey(#VK_SPACE)
           Delay(50)
           JLSimKey(#VK_U)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_N)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_D)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_SPACE)
           Delay(50)
           JLSimKey(#VK_S)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_O)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
         ElseIf what = 2
           JLSimKey(#VK_BACK)
           Delay(50)
           JLSimKey(#VK_SPACE)
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_L)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_T)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
           JLSimKey(#VK_A)
           Delay(50)
           JLSimKey(#VK_CAPITAL) 
           Delay(50)
         ElseIf what = 3
           JLSimKey(#VK_BACK)
           Delay(50)
           JLSimKey(#VK_SPACE)
           Delay(50)
           JLSimKey(#VK_H)
           Delay(50)
           JLSimKey(#VK_CAPITAL)
           Delay(50)
           JLSimKey(#VK_O)
           Delay(50)
           JLSimKey(#VK_CAPITAL)
           Delay(50)
           JLSimKey(#VK_M)
           Delay(50)
           JLSimKey(#VK_CAPITAL)
           Delay(50)
           JLSimKey(#VK_I)
           Delay(50)
           JLSimKey(#VK_CAPITAL)
           Delay(50)
           JLSimKey(#VK_E)
           Delay(50)
           JLSimKey(#VK_CAPITAL)
         EndIf
         If GetKeyState_(#VK_CAPITAL)
           JLSimKey(#VK_CAPITAL)
         EndIf
         Delay(50)
         JLSimKey($BE)
       EndIf
     EndIf
-------------------------------------------------------------------------------------
;-Replacement-code (not working)
     If GetMenuItemState(0,4) = 1
       If GetAsyncKeyState_(#VK_E)
         keybd_event_(#VK_LMENU,0,0,0)
         Delay(50)
         JLSimKey(#VK_NUMPAD0)
         Delay(50)
         JLSimKey(#VK_NUMPAD1)
         Delay(50)
         JLSimKey(#VK_NUMPAD2)
         Delay(50)
         JLSimKey(#VK_NUMPAD8)
         Delay(50)
         keybd_event_(#VK_LMENU,0,#KEYEVENTF_KEYUP,0)
         Delay(50)
;        ElseIf GetAsyncKeyState_(#VK_A)
;          JLSimKey(#VK_BACK)
;          Delay(50)
;          JLSimKey(#VK_Q)
;          Delay(50)
;       ElseIf GetAsyncKeyState_(#VK_S)
;         JLSimKey(#VK_BACK)
;         Delay(50)
;         keybd_event_(#VK_SHIFT,0,0,0)
;         Delay(50)
;         JLSimKey(#VK_4)
;         Delay(50)
;         keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0)
;         Delay(50)
;       ElseIf GetAsyncKeyState_(#VK_I)
;         JLSimKey(#VK_BACK)
;         Delay(50)
;         JLSimKey(#VK_1)
;         Delay(50)
       EndIf
-------------------------------------------------------------------------------------
     EndIf
ForEver
[ JLSimKey lässt sich durch

Code: Alles auswählen

keybd_event_(vk,0,0,0)
 Delay(50)
 keybd_event_(vk,0,#KEYEVENTF_KEYUP,0)
ersetzen]
(Es geht um den abgetrennten Teil)
passiert abslout nix,wenn ich 'e' drücke, obwohl die Bedingung erfüllt ist und ich hab keine Ahnung warum... :cry:
Das Programm soll die (von mir so getaufte) 'HoMiEsPeEcH' simulieren und - wenn ein bestimmtes Menuitem aktiv- ist a durch @, e durch €, i durch 1 und s durch $ ersetzen, aber genau das will irgendwie nicht...

PS: bitte keine Kommentare zu meinem Code an sich^^.
Achja, der Teil für a, i und s kommt sobald das Problem gelöst ist.
Warning! Exception Error in Life.exe
Task will be shut down.

verwende version 4.10 unter Windows