VB6 In Textbox per Einfügentaste Datei abspeichern

Amo8

Mitglied
Seit zwei Wochen beschäftige ich mit VB6 Programmierung. Ich versuche ein Programm zu schreiben was ein Chatbot mit einen Chat verbindet. Dazu benötige ich die Handle der Anwendungsfenster, das funktioniert auch schon. Jetzt müssen die sechs Fenster-Handles jeweils in ihrer zugewiesenen Textbox gespeichert werden, und das auf Tastendruck der Einfügentaste, weil ja der Mauszeiger auf das jeweilige Handlefenster zeigt, was ausgelesen werden muß. Da nicht garantiert ist das meine Anwendung den Focus hat geht das nur über die API GetAsyncKeyState
Hier mal der cod:

Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Type POINTAPI
x As Long
y As Long
End Type
Dim poiMaus As POINTAPI

Private Sub Form_Load()
Timer4.Interval = 1 'gehört zum Maus Cursor
End Sub

Private Sub Timer4_Timer()
'diese Funktion liest das Handle unter der Maus aus
GetCursorPos poiMaus
Text9.Text = WindowFromPoint(poiMaus.x, poiMaus.y)
End Sub

Private Sub Timer1_Timer() 'gehöhrt zur Function
If CompKey(45, "INSERT") Then Exit Sub
End Sub
Private Function CompKey(KCode As Long, KText As String) As Boolean
Dim Result As Integer
Dim A As String
A = Text9.Text
Result = GetAsyncKeyState(KCode)
If Result = -32767 Then
CompKey = True
Text3 = A
MsgBox "das Chat-Text-Fenster wurde gespeichert", , "Chat - Text - Fenster"
End If

'jetz müssen noch fünf weitere Fremdanwendungs-Fenster angefahren werden
'Text4, Text5, Text6, Text7, und Text8.
'die speichern dann das jeweilige Handle der Fremdanwendungen.

End Function

Private Sub Command2_Click()
'beendet das Programm
Unload Me
End Sub

Jetzt meine Frage: Wie bekomme ich das hin, das die Function weiter arbeitet und ich die anderen Fenster-Handels in den Textboxen 4-8 ebenfalls speichern kann?
 
Für zwei Wochen gar nicht schlecht.

Ich würde erstmal versuchen die Timer zu umgehen. Die FensterHandle bekommst Du sicher auch ohne Timer. Aber das ist nur eine Meinung von vielen!

Da Du das FensterHandle ja hast, weis ich nicht genau wo Dein Prob. liegt.
Wenn Du das Handle änderst (mit der Maus drüberfährst) und dann "Einfügen" drückst, dann speichert er doch schon das andere Chatfenster, oder hab ich da jetzt etwas falsch verstanden? Mfg
 
Hi
Für jedes Fenster-Handle was ich auf Druck der Einfügen-Taste in einer Textbox Speichern will benötige ich ein Timer, und die Function zum auswerten ob die Einfügen-Taste gedrückt wurde.

Allso Timer einschalten

Mauszeiger auf das Windows-Fenster

Einfügen-Taste drücken

Function wertet Tastendruck aus

Fenster-Handle wird in Textbox gespeichert

Timer beenden

und dann die ganze Aktion wider mit dem nächsten Timer von vorn. Genau das habe ich probiert aber mehrmals die Function zu schreiben geht nicht, da bekomme ich sofort ein Fehler angezeigt:

"Mehrdeutiger Name: KompKey",

deshalb meine Frage kann man den Timer mit der Function zusammen irgendwie Kapseln. Das heißt zusammen ein und ausschalten den in der Function hängt ja das speichern der Textbox drin.
Allso sowas einbauen: Starten: timer1.enabled = true
Stoppen: timer1.enabled = false
Und fals das ganz ohne Timer geht, dann wie?
 
Ich würde mich nur auf die Mause beschränken. Speicher doch einfach die aktuelle ChatBox mit einem RechtsKlick oder lass auf RechtsKlick ein Menue erscheinen, wo Du dann sogar mehrere Ereignisse einfach einfügst. Besser?
 
Hi Elvan

Das mit dem Rechtsklick mit der Maus hatte ich mir auch schon überlegt, aber wieder verworfen, weil nicht garantiert ist das meine Anwendung während des Auslesens den Focus hat.
 
Muss sie doch auch nicht.
Während Du die MausPosition abfragst(Timer), kannst Du hinterher doch einfach auch prüfen,
ob die rechte Mausetaste gedrückt wird.
Wolla...
 
hi
Ich habe es hin bekommen mit dem Timern, der aktuelle Timer wird beendet, und der nächste gestartet und so weiter bis alle sechs Fenster-Handle gespeichert sind, aber Du hast Recht es wäre auch über Rechtsklick möglich. Aber man weiß nie was für ein Menü auf geht, wegen dem Focus. Deshalb habe ich die Einfügen-Taste favorisiert. Das sieht dann so aus:

Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Dim A As String
A = Text9.Text
Dim Einfügen As Long
Einfügen = VK_INSERT
If GetAsyncKeyState(Einfügen) = KeyPressed Then
If Einfügen = 1 Then
End If
Text3 = A
MsgBox "Handle-Fenster 1 gespeichert", , "Chat-Text-Fenster"
Timer1.Enabled = False
Timer2.Enabled = True
End If
End Sub

Die restlichen 5 Timer sind identisch bis auf die Zeile Text3 = A und die MsgBox und die Letzten beiden Zeilen, wo sich jeweils der Timer ändert.
 
Zuletzt bearbeitet:
Zurück