Probleme simulation clavier combinaison Alt+

Le
Leo H
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!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #23382881
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 #include #include
#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
Le #23386361
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
Le #23389841
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
Le #23389831
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
Publicité
Poster une réponse
Anonyme