Ik ben bezig met een chatbot te ontwikkelen voor een standalone chatprogramma. Nu wil ik ervoor zorgen dat als de verbinding is verbroken met de chatserver, dat de chatbot het chatprogramma afsluit, opnieuw start en weer verder gaat als er een verbinding is.
Ik maak hiervoor gebruik van een statusbar aanwezig in het programma, waarop het woord Ping staat als er een verbinding is. Zoals het nu werkt wordt een disconnect gedetecteerd, het programma afgesloten en opnieuw gestart. Het probleem is echter dat de eerste regel met Sendmessage in de code, eerst wel werkt, maar na restart van het programma een error 1400 geeft = Invalid Window Handle en het programma blijft herstarten omdat er geen Ping gevonden kan worden. Dit heb ik opgelost door de onderste Sendmessage te sturen, die wel gewoon werkt met exact dezelfde Handle. Hoe kan dit? Het zijn twee exact dezelfde regels...
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| SendMessage(ping, WM_GETTEXT, 100, (LPARAM)pingz);//1400 ERROR AFTER RESET string p = pingz; if (p.find("Ping")==-1) //offline { SendMessage(parent, WM_CLOSE, 0,0); //kill brchat.exe ShellExecute(0,"open","c:/brchat.exe.lnk",0,0,SW_SHOWMAXIMIZED); //open new proccess Sleep(5000); SetCursorPos(963,504); mouse_event(MOUSEEVENTF_LEFTDOWN,963,504,0,0); //click connect button mouse_event(MOUSEEVENTF_LEFTUP,963,504,0,0); Sleep(10000); HWND parent = FindWindow("BRWindowClass", 0); HWND childmdi = FindWindowEx(parent, NULL, "mdiclient", NULL); HWND childflow = FindWindowEx(childmdi, NULL, "Brchildclass", "flow"); HWND childchat = FindWindowEx(childflow, NULL, "Richedit20a", NULL); HWND childedit = FindWindowEx(childflow, NULL, "Edit", NULL); HWND ping = FindWindowEx(parent,0, "msctls_statusbar32", 0); if (childchat == 0) { //server probably down //close errormessage SetCursorPos(1030,614); mouse_event(MOUSEEVENTF_LEFTDOWN,1030,614,0,0); mouse_event(MOUSEEVENTF_LEFTUP,1030,614,0,0); //wait 10 minutes Sleep(100000); continue; } else //online now { SetWindowText(parent, (LPSTR)title);//WORKS SendMessage(ping, WM_GETTEXT, 100, (LPARAM)pingz); //works continue; } } |
Ik maak hiervoor gebruik van een statusbar aanwezig in het programma, waarop het woord Ping staat als er een verbinding is. Zoals het nu werkt wordt een disconnect gedetecteerd, het programma afgesloten en opnieuw gestart. Het probleem is echter dat de eerste regel met Sendmessage in de code, eerst wel werkt, maar na restart van het programma een error 1400 geeft = Invalid Window Handle en het programma blijft herstarten omdat er geen Ping gevonden kan worden. Dit heb ik opgelost door de onderste Sendmessage te sturen, die wel gewoon werkt met exact dezelfde Handle. Hoe kan dit? Het zijn twee exact dezelfde regels...