Umwandlung von Tastencodes



  • Hallo,

    mein problem: ich hab z.B. den character '5' und möchte daraus % machen .. also soll der wert so dargestellt werden als ob er mit shift gedrückt werden würde. wie stell ich das an ?? (es geht hier NICHT um keyboardevents .. die kommen erst viel später im code .. ich will das meine funktion diese werte zurückgibt -> einfach shift-drückn bringts hier ned *G*)

    mein code:

    BYTE* pDataBuffer;
    SHORT sVal=0;
    BOOL shift=FALSE;
    UINT uiKey=0;
    
    strcpy(pDataBuffer,"=!\"§$%&/() (waitz) (WAITZ) 9876543210");
    // das soll rauskommen:
    // 0123456789 8WAITZ9 8waitz9 )(/&%$§"!=
    
    for(i=0;*(pDataBuffer+i)!='\0';i++)
                   {
                      shift=FALSE;
    
                      printf("%c(%x) .. ",*(pDataBuffer+i),*(pDataBuffer+i));
         	            sVal=VkKeyScan(*(pDataBuffer+i));
                      printf("%c(%x) ",sVal,sVal);
    
                      if((((BYTE)(sVal>>8)) & 0x01) == 0x01)
                   		shift=TRUE;
    
                      if(shift==TRUE)
                      {
                         printf("(s) .. ");
                         // eliminate shift
                         sVal=sVal & 0x00FF;
                      }
                      else
                      {
                         printf("(n) .. ");
    // add shift
                         sVal=sVal | 0x0100;
                      }
    
                      uiKey=LOWORD(MapVirtualKey(sVal,2));
                      printf("%c(%x) .. ",sVal,sVal);
    
                      if((*(pDataBuffer+i)=(BYTE)uiKey)==0)
                         *(pDataBuffer+i)=sVal;
    
                      printf("%c(%x) Key=%x\r\n",*(pDataBuffer+i),*(pDataBuffer+i),uiKey);
                   }
    

    es funktioniert zwar prächtig wenn ich werte wie '$' oder '%' habe .. diese werden in 4 bzw. 5 umgewandelt .. aber umgekehrt 4 -> $ bzw. 5->% funktioniert nicht -(

    weiß jemand rat ?

    mfg wudu



  • ok das umwandeln mit MapVirtualKey kann so nicht funktionieren .. da VkKeyScan() nur im lowerbyte den virtualkey liefert und im higher ob shift / ctrl /alt gedrückt wurde...

    aber wie komm ich vom virtual key ohne shift zum virtual key + shift ? also dem asciiwert des zeichens das vermeindlich gedrückt wurde.

    z.b.
    4 + shift = $
    5 + shift = %

    ... hmmm .. ?!???



  • falls das mal jemand braucht.. habs selber rausgefunden ..

    for(i=0;*(pDataBuffer+i)!='\0';i++)
                   {
                      shift=FALSE;
    
                      //printf("%c(%x) .. ",*(pDataBuffer+i),*(pDataBuffer+i));
         	            sVal=VkKeyScan(*(pDataBuffer+i));
                      //printf("%c(%x) ",sVal,sVal);
    
                      if((((BYTE)(sVal>>8)) & 0x01) == 0x01)
                   		shift=TRUE;
    
                      GetKeyboardState(State);
                      if(shift==TRUE)
                      {
                         //printf("(s) .. ");
                         State[VK_SHIFT]=0x00;
                      }
                      else
                      {
                         //printf("(n) .. ");
                         // make shift !
                         State[VK_SHIFT]=0xFF;
                      }
                      if(ToAscii(sVal,MapVirtualKey(sVal,0),State,result,0)==1)
                         *(pDataBuffer+i)=(BYTE)result[0];
    
                      //printf("%c(%x)\r\n",*(pDataBuffer+i),*(pDataBuffer+i));
                   }
    

Anmelden zum Antworten