Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme simulation clavier combinaison Alt+

4 réponses
Avatar
Leo H
Bonjour,
J'aimerais r=E9aliser un petit programme qui me simule toutes les
combinaison du type Alt+<nombre>
pour =E9tablir une liste des caracters sp=E9ciaux g=E9n=E9r=E9s.
Le but =E9tant de se mettre dans une fen=EAtre type blocnote (ou skype ou
autre)
et que le program =E9crive tout seul:
Alt+0000
Alt+0001
[...]
Alt+0032
Alt+0033 !
Alt+0034 "
[...]
Alt+0998 =E6
Alt+0999 =E7

etc.
Le probl=E8me, c'est que des bug ont lieux: d=E9j=E0, dans le bloc-note,
aucun caracter sp=E9cial ne s'affiche, ensuite, j'ai essay=E9 sur un autre
logiciel (Skype en l'occurence)
...J'ai mis le curseur dans zone de saisie de nouveau message.
L=E0, il faut taper un autre caracter pour que le pr=E9c=E9dent s'affiche..=
.

Voici mon code:

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

#include <iostream>

using namespace std;



void press(UINT key)
{
INPUT i;
i.type=3D1;
i.ki.wVk=3Dkey;
i.ki.wScan=3D0;
i.ki.dwFlags=3D0;
i.ki.time=3D0;
i.ki.dwExtraInfo=3DNULL;
SendInput(1,&i,sizeof(INPUT));
}

void release(UINT key)
{
INPUT i;
i.type=3D1;
i.ki.wVk=3Dkey;
i.ki.wScan=3D0;
i.ki.dwFlags=3DKEYEVENTF_KEYUP;
i.ki.time=3D0;
i.ki.dwExtraInfo=3DNULL;
SendInput(1,&i,sizeof(INPUT));
}


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

/*
i0=3Di/1000;
i1=3D(i%1000)/100;
i2=3D(i%100)/10;
i3=3Di%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=E9but de la s=E9quence 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!

4 réponses

Avatar
Christian ASTOR
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));
}
Avatar
Olivier Miakinen
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
Avatar
Olivier Miakinen
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
Avatar
Olivier Miakinen
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