Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Probleme simulation clavier combinaison Alt+<nombre>

3 views
Skip to first unread message

Leo H

unread,
May 22, 2011, 6:16:56 AM5/22/11
to
Bonjour,
J'aimerais réaliser un petit programme qui me simule toutes les
combinaison du type Alt+<nombre>
pour établir une liste des caracters spéciaux générés.
Le but étant de se mettre dans une fenêtre type blocnote (ou skype ou
autre)
et que le program écrive tout seul:
Alt+0000
Alt+0001
[...]
Alt+0032
Alt+0033 !
Alt+0034 "
[...]
Alt+0998 æ
Alt+0999 ç

etc.
Le problème, c'est que des bug ont lieux: déjà, dans le bloc-note,
aucun caracter spécial ne s'affiche, ensuite, j'ai essayé sur un autre
logiciel (Skype en l'occurence)
...J'ai mis le curseur dans zone de saisie de nouveau message.
Là, il faut taper un autre caracter pour que le précédent s'affiche...

Voici mon code:

#include <Windows.h>
#include <Winuser.h>

#include <iostream>

using namespace std;

void press(UINT key)
{
INPUT i;
i.type=1;
i.ki.wVk=key;
i.ki.wScan=0;
i.ki.dwFlags=0;
i.ki.time=0;
i.ki.dwExtraInfo=NULL;
SendInput(1,&i,sizeof(INPUT));
}

void release(UINT key)
{
INPUT i;
i.type=1;
i.ki.wVk=key;
i.ki.wScan=0;
i.ki.dwFlags=KEYEVENTF_KEYUP;
i.ki.time=0;
i.ki.dwExtraInfo=NULL;
SendInput(1,&i,sizeof(INPUT));
}


int main()
{
cout << "Appuyer sur une touche, puis selectionner la fenêtre dans
laquelle la liste sera ecrite." << endl;
system("PAUSE");
Sleep(4000);
unsigned int i0=0;
unsigned int i1=0;
unsigned int i2=0;
unsigned int i3=0;
unsigned int i=0;
for(i=0;i<500;++i)
{
//découpage en décimales et ajout de 0x60 à chaque fois pour
abtenir le code touche Clavier correspondant
i0=i/1000+0x60;
i1=(i%1000)/100+0x60;
i2=(i%100)/10+0x60;
i3=i%10+0x60;
//

/*
i0=i/1000;
i1=(i%1000)/100;
i2=(i%100)/10;
i3=i%10;*/


//retour chariot
press(VK_SHIFT);
press(VK_RETURN);
release(VK_RETURN);
press('A');
release('A');
release(VK_SHIFT);

press('L');
release('L');
press('T');
release('T');
press(VK_ADD);
release(VK_ADD);
press(i0);
release(i0);
press(i1);
release(i1);
press(i2);
release(i2);
press(i3);
release(i3);
press(VK_SPACE);
release(VK_SPACE);

//début de la séquence avec ALT
press(VK_MENU);
press(i0);
release(i0);
press(i1);
release(i1);
press(i2);
release(i2);
press(i3);
release(i3);
release(VK_MENU);

//retour chariot
}
return 0;
}

Merci d'avance!

Christian ASTOR

unread,
May 22, 2011, 7:53:29 AM5/22/11
to
Leo H a écrit :

> Bonjour,
> J'aimerais réaliser un petit programme qui me simule toutes les
> combinaison du type Alt+<nombre>
> pour établir une liste des caracters spéciaux générés.
> Le but étant de se mettre dans une fenêtre type blocnote (ou skype ou
> autre) et que le program écrive tout seul:
> Alt+0000
> Alt+0001
> [...]
> Alt+0032
> Alt+0033 !
> Alt+0034 "
> [...]
> Alt+0998 æ
> Alt+0999 ç


Par exemple, avec le Notepad, Test prog. Win32 Unicode =>

#include <windows.h>
#include <stdio.h>
#include <tchar.h>

#define KEYPRESS 0
#define KEYRELEASE KEYEVENTF_KEYUP
#define VK_VIRTUAL 0
#define VK_CHAR 1

void SwitchToWindow(HWND hWnd);
BOOL SendKey(int nEvent, int nKeyType, WORD wKeyCode, TCHAR cChar);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
HWND hWndNotepad = FindWindow(L"Notepad", NULL );
if (hWndNotepad)
{
SwitchToWindow(hWndNotepad);
Sleep(500);
// 0 + 032 à 0 + 999
for (int i = 0; i <= 9; i++)
{
for (int j = 0; j <= 9; j++)
{
for (int k = 0; k <= 9; k++)
{
char sBuffer[4];
sprintf(sBuffer, "%d%d%d", i, j, k);
if (atoi(sBuffer) >= 32)
{
SendKey(KEYPRESS, VK_VIRTUAL, VK_MENU, 0);
SendKey(KEYPRESS, VK_VIRTUAL, VK_NUMPAD0, 0);
SendKey(KEYRELEASE, VK_VIRTUAL, VK_NUMPAD0, 0);
SendKey(KEYPRESS, VK_VIRTUAL, VK_NUMPAD0 + i, 0);
SendKey(KEYRELEASE, VK_VIRTUAL, VK_NUMPAD0 + i, 0);
SendKey(KEYPRESS, VK_VIRTUAL, VK_NUMPAD0 + j, 0);
SendKey(KEYRELEASE, VK_VIRTUAL, VK_NUMPAD0 + j, 0);
SendKey(KEYPRESS, VK_VIRTUAL, VK_NUMPAD0 + k, 0);
SendKey(KEYRELEASE, VK_VIRTUAL, VK_NUMPAD0 + k, 0);
SendKey(KEYRELEASE, VK_VIRTUAL, VK_MENU, 0);
}
}
}
}
}
else
MessageBox(NULL, L"Notepad non trouvé", L"Erreur", MB_OK | MB_ICONSTOP);
return 0;
}

void SwitchToWindow(HWND hWnd)
{
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
HWND hWndLastActivePopup = GetLastActivePopup(hWnd);
LONG nStyle = GetWindowLong(hWndLastActivePopup, GWL_STYLE);
if (!(nStyle & WS_DISABLED))
{
void (FAR STDAPICALLTYPE * pSTTW)(HWND hWnd, BOOL fAltTab);
HINSTANCE hInst = LoadLibrary(L"USER32.DLL");
if (hInst)
{
(FARPROC&)pSTTW = GetProcAddress(hInst, "SwitchToThisWindow");
if (pSTTW != NULL)
pSTTW(hWndLastActivePopup, TRUE);
FreeLibrary(hInst);
}
}
}

BOOL SendKey(int nEvent, int nKeyType, WORD wKeyCode, TCHAR cChar)
{
INPUT Input;
Input.type = INPUT_KEYBOARD;
if (nKeyType == VK_VIRTUAL)
{
Input.ki.wVk = wKeyCode;
Input.ki.wScan = LOWORD(MapVirtualKey(wKeyCode,0));
}
else
{
Input.ki.wVk = VkKeyScan (cChar);
Input.ki.wScan = LOWORD(OemKeyScan (cChar));
}
Input.ki.dwFlags = nEvent;
Input.ki.time = GetTickCount();
Input.ki.dwExtraInfo = 0;
return SendInput(1, &Input, sizeof(INPUT));
}

Olivier Miakinen

unread,
May 23, 2011, 11:39:28 AM5/23/11
to
Bonjour,

Le 22/05/2011 12:16, Leo H a écrit :
>
> J'aimerais réaliser un petit programme qui me simule toutes les
> combinaison du type Alt+<nombre>
> pour établir une liste des caracters spéciaux générés.

Ils sont tous là, dans l'ordre (onglet CP1252) :
http://www.miakinen.net/vrac/charsets/

> Le but étant de se mettre dans une fenêtre type blocnote (ou skype ou
> autre)
> et que le program écrive tout seul:
> Alt+0000
> Alt+0001
> [...]
> Alt+0032
> Alt+0033 !
> Alt+0034 "
> [...]
> Alt+0998 æ
> Alt+0999 ç

Note que tu pouvais t'arrêter à Alt+0255. Ensuite, cela boucle avec une
période de 256. Par exemple, Alt+0999 = Alt+0231 (999 = 231 + 3×256).


Cordialement,
--
Olivier Miakinen

Olivier Miakinen

unread,
May 24, 2011, 6:32:46 PM5/24/11
to
Le 23/05/2011 17:39, je répondais à Leo H :

>>
>> J'aimerais réaliser un petit programme qui me simule toutes les
>> combinaison du type Alt+<nombre>
>> pour établir une liste des caracters spéciaux générés.

Au fait, il s'agit des Alt+0<nombre>, et pas des Alt+<nombre> avec
un <nombre> ne commençant pas par 0.

> Ils sont tous là, dans l'ordre (onglet CP1252) :
> http://www.miakinen.net/vrac/charsets/

En ce qui concerne les Alt+128 à Alt+255 (et non pas Alt+0128 à
Alt+0255), ils sont là aussi, mais à l'onglet CP850.

Cordialement,
--
Olivier Miakinen

Olivier Miakinen

unread,
May 24, 2011, 6:27:49 PM5/24/11
to
Le 23/05/2011 17:39, je répondais à Leo H :
>>
>> J'aimerais réaliser un petit programme qui me simule toutes les
>> combinaison du type Alt+<nombre>
>> pour établir une liste des caracters spéciaux générés.

Au fait, il s'agit des Alt+0<nombre>, et pas des Alt+<nombre> avec


un <nombre> ne commençant pas par 0.

> Ils sont tous là, dans l'ordre (onglet CP1252) :
> http://www.miakinen.net/vrac/charsets/

En ce qui concerne les Alt+128 à Alt+255 (et non pas Alt+0128 à

0 new messages