Wettbewerb: BinTime



  • CrazyOwl schrieb:

    2520

    Was ist los, will nicht mal einer überbieten ???

    PS: Was hältst du eigentlich davon die Trennzeichen auch komplett auslassen zu können, wie ich obens chon geschrieben hab ?



  • Danke für die exe...



  • Dumdidum...
    Darf man auch Hilfsmittel benutzen? 😉

    -----------------------------
    !!!Spoiler ------------------

    #include <iostream>
    using namespace std;
    
    #include <windows.h>
    
    void Start(HWND BinTimeWindow);
    void SendKey(char c);
    
    char ReadColumn(HDC BinTimeDC, int ColumnPos);
    
    int main()
    {
    	HWND BinTimeWindow = FindWindow("TForm1", "BinTime Trainer");
    	if(!BinTimeWindow)
    	{
    		cerr << "Konnte das BinTime-Fenster nicht finden." << endl;
    		return 1;
    	}
    
    	HWND BinTimeInput = FindWindowEx(BinTimeWindow, NULL, "TEdit", NULL);
    	if(!BinTimeInput)
    	{
    		cerr << "Konnte das Editfeld nicht finden." << endl;
    		return 2;
    	}
    
    	Start(BinTimeWindow);
    	SetFocus(BinTimeInput);
    	HDC BinTimeDC = GetDC(BinTimeWindow);
    	while(1)
    	{
    		for(int i = 0; i < 6; i++)
    		{
    			int x = 30 + i * 90;
    			SendKey(ReadColumn(BinTimeDC, x));
    			if((i & 1) && i < 5)
    				SendKey(' ');
    		}
    		SendKey('\n');
    		if(SendMessage(BinTimeInput, WM_GETTEXTLENGTH, 0, 0) != 0)
    			break;
    		if(GetForegroundWindow() != BinTimeWindow)
    			break;
    	}
    	ReleaseDC(BinTimeWindow, BinTimeDC);
    	return 0;
    }
    
    void Start(HWND BinTimeWindow)
    {
    	SetForegroundWindow(BinTimeWindow);
    	keybd_event(VK_F9, 0, 0, 0);
    	keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0);
    }
    
    void SendKey(char c)
    {
    	if(c == ' ')
    		c = VK_SPACE;
    	else if(c == '\n')
    		c = VK_RETURN;
    	keybd_event(c, 0, 0, 0);
    	keybd_event(c, 0, KEYEVENTF_KEYUP, 0);
    }
    
    char ReadColumn(HDC BinTimeDC, int ColumnPos)
    {
    	char Result = 0;
    	for(int i = 0; i < 4; i++)
    	{
    		COLORREF Color = GetPixel(BinTimeDC, ColumnPos, i * 75 + 40);
    		if(((Color & 0xFF00) >> 8) > 128)
    			Result |= 1 << (3 - i);
    	}
    	return Result + '0';
    }
    

    Damit komme ich auf so ~unendlich, da dein Programm mit der Countdown-Abfrage nicht mehr nachkommt. 😃

    p.s.:
    Ich habe dieses Programm geschrieben, weil mir langweilig war. Ich möchte niemanden zwingen, dieses Programm auszuprobieren oder zu akzeptieren.
    Dieses Posting soll keine Beleidigung sein.
    Ich dachte mir, bevor der Code auf meiner Platte verkümmert, können doch auch andere was davon haben. 🙂


  • Mod

    Du hast gerade das Programm terminiert ;). Wir benötigen ein neues Programm.

    MfG SideWinder



  • Ups. 😉



  • Erster Versuch: 370
    Zweiter Versuch: 550

    Das Prog funktioniert glücklicherweise mit wine, sonst hätt ich rebooten und Windows starten müssen.



  • Irgendwas mit 900... Muss noch üben *g*

    @cd9000:
    Wenn ich in deine Whileschleife noch ein Sleep(1) reinsetze, dann kommt sogar auch BinTime hinterher. 🙂



  • SideWinder schrieb:

    Du hast gerade das Programm terminiert ;). Wir benötigen ein neues Programm.

    Hi,
    neue Version online!

    MFG

    Alexander Sulfrian



  • Yeah, so ist super, keine lästigen Trennzeichen mehr. 🙂



  • @cd9000:
    Ähm, kannst du nochmal son Spoiler schreiben?

    MFG

    Alexander Sulfrian



  • Du musst nur die Methode zum Finden des richtigen Fensters anpassen:

    HWND BinTimeWindow = FindWindow("TForm1", NULL);
    	if(!BinTimeWindow)
    	{
    		cerr << "Konnte das BinTime-Fenster nicht finden." << endl;
    		return 1;
    	}
    	char Buffer[100];
    	SendMessageA(BinTimeWindow, WM_GETTEXT, 100, reinterpret_cast<LPARAM>(Buffer));
    	strcat(Buffer, Buffer);
    	if(!strstr(Buffer, "BinTime Trainer"))
    	{
    		cerr << "Konnte das BinTime-Fenster nicht finden." << endl;
    		return 2;
    	}
    

Anmelden zum Antworten