Zjadanie litery - błąd w kodzie (WinAPI)

0

Witam! Pisząc program, natknąłem się na błąd. Zjada mi pierwszą literkę wiadomości. Szukałem co może być nie tak i lipa. Prosiłbym o przejrzenie kodu i wskazanie co może być nie tak:

#include <iostream>
#include <windows.h>

using namespace std;

HWND WindowHandle;
typedef int (WINAPI *SENDPACKET)(DWORD, char*, BOOL, BOOL);
SENDPACKET sendPacket;
HINSTANCE hLib;

void SendPacket(char * cPacket)
{
    DWORD PID;
    HWND hwnd = FindWindow("Okienko", NULL);
    GetWindowThreadProcessId( hwnd, &PID );
    sendPacket( PID, cPacket, TRUE, FALSE );
}

void SendMessage(char *text) // wysylanie wiadomosci
{
    char cPacket[strlen(text) + 6];
    cPacket[0] = (BYTE)strlen(text)+4;
    cPacket[1] = 0x00;
    cPacket[2] = 0x96;
    cPacket[3] = 0x01;
    cPacket[4] = (BYTE)strlen(text);
    cPacket[5] = 0x00;

    for (int i = 0; i < strlen(text); i++)
    {
        cPacket[i + 6] = (BYTE)text[i];
    }

    SendPacket(cPacket);
}

int main()
{
    hLib = LoadLibrary("packet.dll");
    DWORD PID;
    HWND hwndt = FindWindow("Okienko",NULL);
    GetWindowThreadProcessId( hwndt, &PID );
    sendPacket = (SENDPACKET)GetProcAddress(hLib, "SendPacket");
    WindowHandle = FindWindow("Okienko", NULL);
    if (WindowHandle) cout << "Znalazlem klienta" << endl << endl;
    else
    {
        cout << "Blad! Nie znalazlem klienta, zamykanie..." << endl;
        return 0;
    }
    //---------------------------------------------------------------
    char msg[256];
    int time;
    cout << "Wprowadz wiadomosc:" << endl;
    cin.ignore();
    cin.getline(msg, 256); //wczytuje wiadomosc
    cout << "Odstep czasowy:" << endl;
    cin >> time;
    while (true)
    {
        SendMessage(msg);
        _sleep(time);
    }
    return 0;
}

Jeżeli kod w porządku to w takim razie coś jest z biblioteką packet.dll.

0

Przyzwyczaiłeś się, żeby przed getline'm dawać cin.ignore(). Ma to swoje powody, bo istream::operator>> nie pobiera białych znaków po wczytywanej zmiennej. W tym przypadku na stdin nie zostają ci żadne znaki białej linii (jak przy wcześniejszym stosowaniu cin>>), więc jedyne co robi ta funkcja to ignoruje pierwszy znak wiadomości.

0

Czyli rozwiązaniem jest usunięcie cin.ignore();?

Sprawdziłem, działa, dzięki.

0
char cPacket[strlen(text) + 6];

to w ogóle przechodzi przez kompilator?

1 użytkowników online, w tym zalogowanych: 0, gości: 1