PROBLEMA COM KEYSTATE

JOAOMEIRA 04/07/2015 01:43:09
#448472
Citação:

:
[Ô]é uma gambiarra. Não pergunte, apenas use.[Ô]

Hahahahahahaha essa foi boa hahahahaha

Na verdade:

hotkey = ((GetAsyncKeyState(Keys.F1) & 0x8000) != 0)

Aparentemente, poderia funcionar bem se fosse c#

Todavia, isso não tem no VB6. Essa notação [Ô]0x8000[Ô] significa um número hexadecimal. Na realidade, representa em binário esse valor: 1000 0000 0000 0000

Esse [Ô]&[Ô] faz o mesmo papel do [Ô]And[Ô] no nosso VBzinho. Não como operador lógico... mas sim como o operador de comparação bit a bit. Resumindo, esse número acaba sendo apenas um flag.

O código do amigo acima deve funcionar, se não funcionar tente usar esse:

hotkey = (GetAsyncKeyState(Keys.F1) And &H8000) = &H8000

ou esse: (Que só converti pro vb.net do AshKetchum, da cidade de Palete)

hotkey = ((GetAsyncKeyState(Keys.F1) And &H8000) <> 0)
Abração!



Não funcionou...
ASHKATCHUP 05/07/2015 22:12:48
#448487
Não consegui simular no meu pc.

Criei um projeto, coloquei um timer e chamei a API GetAsyncKeyState.

Ela está funcionando perfeitamente.
JOAOMEIRA 06/07/2015 12:08:19
#448506
Olá a form esta abrindo agora corretamente eu refiz o projeto tudo igual e funcionou... Coloquei F1 para abrir form e f2 para digitar oque esta escrito na text box em qualquer janela ativa...
Dim hotkey2 As Boolean

If ComboBox2.Text = [Ô]F4[Ô] Then
hotkey2 = GetAsyncKeyState(Keys.F4)
End If

If hotkey2 = True Then
SendKeys.Send(Form2.TextBox1.Text)

End If


Agora fica escrevendo infinitamente oque esta na text box oq eu faço para concertar??
ASHKATCHUP 06/07/2015 17:42:04
#448526
Posta teu projeto aqui pra que eu consiga simular o erro.


JOAOMEIRA 06/07/2015 20:44:33
#448535
Segue o executável....

[txt-color=#e80000]OBS: Escreva um texto tipo este [Ô]Oi como vai voce[Ô] Logo em seguida abra um bloco de notas e aperte F4 ... vai começar escrever sem parar ...
para parar isso aperte ctrl +alt +delete caso não consiga fechar a aplicação [/txt-color]
ASHKATCHUP 07/07/2015 13:48:27
#448547
Se tu não postar o código fonte do projeto, como vou conseguir descobrir por que o erro acontece?
JOAOMEIRA 07/07/2015 21:49:35
#448561
Citação:

:
Se tu não postar o código fonte do projeto, como vou conseguir descobrir por que o erro acontece?



O Código que está dando erro e estes 2 que eu passei... e outra já falei porque o erro acontece... ele fica detectando que a tecla ainda está pressionada e fica digitando infinitamente... Esse é apenas um projeto teste ... Só tem praticamente esses códigos ai...

Você falou que quer saber o porque ele acontece na obs já coloquei como faz para você ver ele acontecendo..
Citação:

:
[txt-color=#e80000]OBS: Escreva um texto tipo este [Ô]Oi como vai voce[Ô] Logo em seguida abra um bloco de notas e aperte F4 ... vai começar escrever sem parar ...
para parar isso aperte ctrl +alt +delete caso não consiga fechar a aplicação [/txt-color]



Mas como ta insistindo segue ele....

FORM 1
Public Class Form1
Private Declare Function GetAsyncKeyState Lib [Ô]user32[Ô] (ByVal vkey As Integer) As Integer

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ComboBox1.Text = [Ô]Escolha um botão para abrir o CHAT[Ô]
ComboBox2.Text = [Ô]Escolha um botão para escrever o CHAT[Ô]
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim hotkey As Boolean

If ComboBox1.Visible = False And ComboBox2.Visible = False Then


If ComboBox1.Text = [Ô]F1[Ô] Then
hotkey = (GetAsyncKeyState(Keys.F1) < 0)
ElseIf ComboBox1.Text = [Ô]F2[Ô] Then
hotkey = (GetAsyncKeyState(Keys.F2) < 0)
ElseIf ComboBox1.Text = [Ô]F3[Ô] Then
hotkey = (GetAsyncKeyState(Keys.F3) < 0)
Else : MsgBox([Ô]ERRO Tente novamente[Ô]) : Me.Show() : ComboBox1.Visible = True
End If

If hotkey = True Then
hotkey = False
Timer1.Stop()
Timer2.Start()
Form2.Show()
Me.Hide()
End If

End If
End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
If ComboBox1.Text = [Ô]F1[Ô] Then
ComboBox1.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf ComboBox1.Text = [Ô]F2[Ô] Then
ComboBox1.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf ComboBox1.Text = [Ô]F3[Ô] Then
ComboBox1.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf Not ComboBox1.Text = [Ô]Escolha um botão para abrir o CHAT[Ô] Then
MsgBox([Ô]Selecione uma das teclas mostradas[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
ComboBox1.Text = [Ô]Escolha um botão para abrir o CHAT[Ô]
End If
End Sub

Private Sub ComboBox1_TextUpdate(sender As Object, e As EventArgs) Handles ComboBox1.TextUpdate
If ComboBox1.Text = [Ô]F1[Ô] Then
[ô]Nada Acontece...
ElseIf ComboBox1.Text = [Ô]F2[Ô] Then
[ô]Nada Acontece...
ElseIf ComboBox1.Text = [Ô]F3[Ô] Then
[ô]Nada Acontece...
ElseIf Not ComboBox1.Text = [Ô]Escolha um botão para abrir o CHAT[Ô] Then
MsgBox([Ô]Selecione uma das teclas mostradas[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
ComboBox1.Text = [Ô]Escolha um botão para abrir o CHAT[Ô]
End If
End Sub

Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged
If ComboBox2.Text = [Ô]F4[Ô] Then
ComboBox2.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf ComboBox2.Text = [Ô]F4[Ô] Then
ComboBox2.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf ComboBox2.Text = [Ô]F4[Ô] Then
ComboBox2.Visible = False
Timer1.Start()
MsgBox([Ô]Botão escolhido, agora use-o para abrir o chat[Ô], MsgBoxStyle.Information, [Ô]Pronto![Ô])
ElseIf Not ComboBox2.Text = [Ô]Escolha um botão para escrever o CHAT[Ô] Then
MsgBox([Ô]Selecione uma das teclas mostradas[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
ComboBox2.Text = [Ô]Escolha um botão para escrever o CHAT[Ô]
End If
End Sub

Private Sub ComboBox2_TextUpdate(sender As Object, e As EventArgs) Handles ComboBox2.TextUpdate
If ComboBox2.Text = [Ô]F4[Ô] Then
[ô]Nada Acontece...
ElseIf ComboBox2.Text = [Ô]F4[Ô] Then
[ô]Nada Acontece...
ElseIf ComboBox2.Text = [Ô]F4[Ô] Then
[ô]Nada Acontece...
ElseIf Not ComboBox2.Text = [Ô]Escolha um botão para escrever o CHAT[Ô] Then
MsgBox([Ô]Selecione uma das teclas mostradas[Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
ComboBox2.Text = [Ô]Escolha um botão para escrever o CHAT[Ô]
End If
End Sub

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
Dim hotkey2 As Boolean

If ComboBox1.Visible = False And ComboBox2.Visible = False Then

If ComboBox2.Text = [Ô]F4[Ô] Then
hotkey2 = GetAsyncKeyState(Keys.F4)
ElseIf ComboBox2.Text = [Ô]F5[Ô] Then
hotkey2 = GetAsyncKeyState(Keys.F5)
End If

If hotkey2 = True Then
SendKeys.Send(Form2.TextBox1.Text)

End If

End If
End Sub
End Class


FORM 2
Public Class Form2
[ô]Declaração

[ô]Dims
Dim envio As String = 1
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
If Asc(e.KeyChar) = Keys.Enter Then
enviartexto()
End If
End Sub

Function enviartexto()
If TextBox1.Text = [Ô][Ô] Then

ElseIf TextBox2.Text = [Ô][Ô] Then
TextBox2.Text = envio + [Ô]- [Ô] + TextBox1.Text
TextBox1.Text = [Ô][Ô]
envio = envio + 1
Else
TextBox2.Text = envio + [Ô]- [Ô] + TextBox1.Text + vbCrLf + TextBox2.Text
TextBox1.Text = [Ô][Ô]
envio = envio + 1
End If
Return 0
End Function

Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
Form1.Timer2.Stop()
Form1.Timer1.Start()
Form1.Show()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
enviartexto()
End Sub

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

End Sub
End Class


DESIGN FORM 2

[txt-color=#e80000]1 = TextBox2
2 = Textbox1
3 = Button1[/txt-color]

DESIGN FORM 1

[txt-color=#e80000]1 = Combobox1
2 = Combobox2[/txt-color]

Você vai ver que não tem nada além do que eu falei exceto as combobox ... mais da para simular isso sem os cod dela só e colocar na text dela a tecla... enfim...
ASHKATCHUP 08/07/2015 10:55:10
#448585
Isso provavelmente ta acontecendo porque tu deve ter colocado um INTERVAL muito pequeno no Timer.

Tente 300 ou 500.

Obs.: não consegui fazer esse teu código funcionar. O código do Form1 refere [Ô]ComboBox[Ô] mas no teu desenho de form não tem nenhum componente desse tipo.
JOAOMEIRA 08/07/2015 19:30:22
#448604
Citação:

:
Isso provavelmente ta acontecendo porque tu deve ter colocado um INTERVAL muito pequeno no Timer.

Tente 300 ou 500.

Obs.: não consegui fazer esse teu código funcionar. O código do Form1 refere [Ô]ComboBox[Ô] mas no teu desenho de form não tem nenhum componente desse tipo.


estava invertido form 1 era form 2 e form2 era form 1 já editei ...

A resposta do intervalo coloquei 1 ... pois é para ele detectar na hora em que a tecla for pressionada amigo se for mais alto que isso eu vo ter que ficar apertado a tecla até o o loop do timer rodar e então ele executar a ação....
ASHKATCHUP 09/07/2015 09:58:20
#448621
A propriedade Interval do Timer é selecionado em milisegundos (ms). Cada segundo tem 1000 milisegundos (ms).

Se tu colocar [Ô]1[Ô] como valor da propriedade, o teu timer será executado a cada milisegundo.

Ocorre que o pressionar de uma tecla por uma pessoa dura entre 300ms e 1 segundo. O próprio teclado fisicamente não consegue trabalhar mais rápido, já que a tecla precisa ser pressionada, registrada e solta.

Por isso que o texto está sendo repetido.

Se tu quer resolver teu problema, aumente o valor da propriedade Interval para 300~1000 ou crie alguma maneira (variável) de saber se a tecla já foi pressionada nos últimos X milisegundos.

Página 2 de 4 [31 registro(s)]
Faça seu login para responder