Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.05.2009, 21:46

String to Byte

Tach,

hab folgendes Problem. Möchte gerne jedes Zeichen eines Strings per keybd_event drücken lassen.
Hier mal paar Code schnipsler :

Quellcode

1
2
3
4
5
void VirtualKeyPress(BYTE byVirtualKeyCode)
{
    keybd_event(byVirtualKeyCode, 0, 0L, 0L);
    keybd_event(byVirtualKeyCode, 0, KEYEVENTF_KEYUP, 0L);
} 


Quellcode

1
2
3
4
5
string name = RandomName(); // das klappt
for (int i = 0; i < 12; i++)
    {
        VirtualKeyPress((BYTE)(char)name[i]);
    }


Quellcode

1
2
3
4
5
6
7
8
9
10
string RandomName()
{
    string myletters = "abcdefghijklmnopqrstuvwxyz1234567890";
    string name;
    int numberOfPossibilities = myletters.length();
    for (int i = 0; i < 12; i++) {
        name += myletters[rand() % numberOfPossibilities];
    }
    return name;
}

name enthällt Zahlen und Buchstaben.
Die Zahlen gibt er richtig aus, nur manche Buchstaben verschluckt er, gibt sie als Sonderzeichen oder Zahlen aus. Weiß wirklich nicht woran das liegen könnte und hab schon zig Foren durchsucht :/

Könnt ihr mir helfen ?

lg

2

13.05.2009, 21:50

Welche Buchstaben sind das denn, die er falsch ausgibt?

Umlaute wie ä, ö, ü? Oder ß?
fka tm

3

13.05.2009, 21:54

Alle von a-z

Quellcode

1
string myletters = "abcdefghijklmnopqrstuvwxyz1234567890"; 

4

13.05.2009, 22:03

Hast du mal mit dem Debugger geprüft, ob der Index, den dir

C-/C++-Quelltext

1
rand() % numberOfPossibilities


liefert, im gültigen Bereich liegt?
fka tm

5

13.05.2009, 22:35

RandomName() klappt einwandsfrei.

Der Fehler liegt irgendwo in der Schleife, denn ich erhalte bei dem cast von name nach char komsiche Werte à la -52 Í.

Fehler entdeckt. (char) j ergibt 126 oder so, das muss ich umwandeln in 0x97 zB. ich glaube die 126 is hex und 0x97 is byte :-/
Doch wie geht das ?

lg

EDIT: VkKeyScan = Lösung ;)

6

13.05.2009, 23:10

Jap so ist es ;) Hab's dir jetzt nochmal aufgeräumt:

C-/C++-Quelltext

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
typedef std::basic_string<TCHAR> tstring;

void VirtualKeyPress(const BYTE byVkCode)
{
    keybd_event(byVkCode, 0, 0L, 0L);
    keybd_event(byVkCode, 0, KEYEVENTF_KEYUP, 0L);
} 

void VirtualKeyPress(const TCHAR c)
{
    VirtualKeyPress(VkKeyScan(c));
}

const tstring RandomString(const std::size_t size)
{
    static const TCHAR[] letters = _T("abcdefghijklmnopqrstuvwxyz1234567890");
    tstring tmp(size);
    for (tstring::iterator it(tmp.begin()), end(tmp.end()); it != end; ++it)
        *it = letters[std::rand() % (sizeof(letters) / sizeof(letters[0]))];
    return tmp;
}

int main()
{
    const tstring string(RandomString(12));
    
    for (tstring::const_iterator it(string.begin()), end(string.end()); it != end; ++it)
        VirtualKeyPress(*it);
}
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige