PROBLEMA COM KEYSTATE
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...
Criei um projeto, coloquei um timer e chamei a API GetAsyncKeyState.
Ela está funcionando perfeitamente.
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??
[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]
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...
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.
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....
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.