Tecla TAB desde codigo

Tecla TAB desde codigo

Postby El Loco » Sun Apr 17, 2022 12:51 pm

Buenos días y felices pascuas para todos.
Como puedo impedir/suprimir en un control generado desde código llegar a el con la tecla TAB (VK_TAB) ?
Desde ya muchísimas gracias.
Abrazo
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby karinha » Sun Apr 17, 2022 1:11 pm

Sigue...

Code: Select all  Expand view

/*
06/07/07 - Desativar teclas especiais
  Olá,

Neste exemplo que fiz associado a dll que é encontrada no endereço:

http://www.codeproject.com/win32/AntonioWinLock.asp

...é possível fazer o seguinte em FWH:

- Ativa/Desativar alt+tab
- Ativa/Desativar alt+esc
- Ativa/Desativar ctrl+alt+del
- Mostrar/Esconder a barra de tarefas
- Mostrar/Esconder o desktop
- Mostrar/Esconder o Start Button
- Mostrar/Esconder o System Clock
- Rodar um processo em outro desktop

Espero que gostem :-)

Abraços,

Rossine.
 
==============================================================================

En: 21/08/2008 - Manuel Mercado Gentilmente Converteu Para FIVEWIN FOR XHARBOUR

Hola João

Una conversión rápida del ejemplo de Rossine a su versión en C directamente
con FWH sin Dll's
Manuel Mercado
*/


#Include "FiveWin.Ch"
#Include "Dll.Ch"

Function Teclado() //Main()

/*
   MsgStop( StartButton( .F. ), "Desabilitando o botão Start(Iniciar) - Win 9x, NT, 2K, XP" )

   MsgStop( StartButton( .T. ), "Habilitando   o botão Start(Iniciar) - Win 9x, NT, 2K, XP" )

   MsgStop( ShowDesktop( .F. ), "Desabilitando o Desktop - Win 9x, NT, 2K, XP" )

   MsgStop( DesktopProc( "MyDesktop2", "Calc.exe" ), "Executando uma tarefa em outro desktop - Win NT, 2K, XP" )

   MsgStop( ShowDesktop( .T. ), "Habilitando o Desktop - Win 9x, NT, 2K, XP" )

   MsgStop( ShowTaskbar( .F. ), "Desabilitando o Taskbar(Barra de Tarefas) - Win 9x, NT, 2K, XP" )

   MsgStop( ShowTaskbar( .T. ), "Habilitando   o Taskbar(Barra de Tarefas) - Win 9x, NT, 2K, XP" )

   MsgStop( ShowClock( .F. ), "Desabilitando o Clock(Relogio) - Win 9x, NT, 2K, XP" )

   MsgStop( ShowClock( .T. ), "Habilitando o Clock(Relogio) - Win 9x, NT, 2K, XP" )

   MsgStop( AltTabEnable( 0, .F. ), "Desabilitando ALT+TAB e ALT+ESC - Windows NT, 2k" )

   MsgStop( AltTabEnable( 0, .T. ), "Habilitando   ALT+TAB e ALT+ESC - Windows NT, 2k" )

   // Para Windows XP/NT e 2000 / 2003
   IF IsWinNT() .OR. IsWin2000()  //??? Nao testei em 2000/2003

       MsgStop( CtrlAltDel( .F. ), "Desabilitando o Ctrl+Alt+Del - Windows NT, 2k" )

       MsgStop( CtrlAltDel( .T. ), "Habilitando   o Ctrl+Alt+Del - Windows NT, 2k" )

   ELSE  //-> Windows 95/98 - Millenium Edition

      Ctrl_Alt_Del( .f. )

      MsgAlert( "CTRL+ALT+DEL DESLIGADO" + CRLF + "Please, press CTRL + ALT + DEL", "Desligado" )

      Ctrl_Alt_Del( .t. )

      MsgAlert( "CTRL+ALT+DEL LIGADO" + CRLF + "Please, press CTRL + ALT + DEL", "Ligado" )

   ENDIF
*/


Return Nil
//
//-> Comentario: Simplesmente, FANTASTICO!!!
//
//-> Complementando para Windows 95/98 Milleniun Edition
//
// Antonio Carlos Pantaglione
// Toninho@fwi.com.br
// Agosto/2001
//

//#include "fivewin.ch"
//#include "dll.ch"

//----------------------------------------------------------------------------//

//-> Modifiquei para nao ter choque com a funcao par o Windows NT(XP)
Function Ctrl_Alt_Del( lState )

   if !lState
      SysParInfo( 97, 1, 0, 0 )
   else
      SysParInfo( 97, 0, 0, 0 )
   endif

return Nil

//----------------------------------------------------------------------------//

dll32 static function SysParInfo( uAction AS LONG, uParam AS LONG, vParam AS LONG, uWinIni AS LONG ) ;
      AS LONG PASCAL  FROM "SystemParametersInfoA" LIB "User32.dll"

//----------------------------------------------------------------------------//

//-> Rotina em C -> By Manuel Mercado - The Best

#pragma BEGINDUMP

#include    <windows.h>
#include    <stdlib.h>
#include    <hbapi.h>
#define     ID_STARTBUTTON  0x130                  // Start button ID
#define     ID_TRAY         0x12F                  // System tray ID
#define     ID_CLOCK        0x12F                  // System clock ID
#define     PROGRAM_MANAGER "Program Manager"   // Program manager window name
#define     TASKBAR         "Shell_TrayWnd"     // Taskbar class name

int WINAPI TaskManager_Enable_Disable( BOOL ) ;
int WINAPI StartButton_Show_Hide( BOOL ) ;
int WINAPI Desktop_Show_Hide( BOOL ) ;
int WINAPI Process_Desktop(char *, char * ) ;
int WINAPI Taskbar_Show_Hide( BOOL ) ;
int WINAPI Clock_Show_Hide( BOOL ) ;
int WINAPI AltTab_Enable_Disable( HWND, BOOL ) ;
BOOL StartProcess( char *, char * ) ;
LRESULT CALLBACK LowLevelMouseHookProc( int nCode, WORD wParam, DWORD lParam ) ;
LRESULT CALLBACK MouseHookProc( int nCode, WORD wParam, DWORD lParam ) ;

HHOOK       hHook ;          // Mouse hook
HINSTANCE   hInst ;         // Instance handle

HB_FUNC( ALTTABENABLE )
{
   HWND hWnd    = (HWND ) hb_parnl( 1 ) ;
   BOOL bEnable = hb_parl( 2 ) ;
   int iRet ;

   iRet = AltTab_Enable_Disable( hWnd, bEnable ) ;
   hb_retni( iRet ) ;
}

HB_FUNC( SHOWCLOCK )
{
   BOOL bShow = hb_parl( 1 ) ;
   int iRet ;

   iRet = Clock_Show_Hide( bShow ) ;
   hb_retni( iRet ) ;
}

HB_FUNC( SHOWTASKBAR )
{
   BOOL bShow = hb_parl( 1 ) ;
   int iRet ;

   iRet = Taskbar_Show_Hide( bShow ) ;
   hb_retni( iRet ) ;
}

/*  // CONTEM ERROS
HB_FUNC( DESKTOPPROC )
{
   char* c1 = hb_parc( 1 ) ;
   char* c2 = hb_parc( 2 ) ;
   int iRet ;

   iRet = Process_Desktop( c1, c2 ) ;
   hb_retni( iRet ) ;
}
*/


HB_FUNC( SHOWDESKTOP )
{
   BOOL bShow = hb_parl( 1 ) ;
   int iRet ;

   iRet = Desktop_Show_Hide( bShow ) ;
   hb_retni( iRet ) ;
}

HB_FUNC( STARTBUTTON )
{
   BOOL bShow = hb_parl( 1 ) ;
   int iRet ;

   iRet = StartButton_Show_Hide( bShow ) ;
   hb_retni( iRet ) ;
}

HB_FUNC( CTRLALTDEL )
{
   BOOL bEnable = hb_parl( 1 ) ;
   int iRet ;

   iRet = TaskManager_Enable_Disable( bEnable ) ;
   hb_retni( iRet ) ;
}

int WINAPI TaskManager_Enable_Disable(BOOL bEnableDisable)
{
    #define KEY_DISABLETASKMGR  "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"
    #define VAL_DISABLETASKMGR  "DisableTaskMgr"

    HKEY    hKey;
    DWORD   val;
    LONG    r;

    if (RegOpenKey(HKEY_CURRENT_USER, KEY_DISABLETASKMGR, &hKey) != ERROR_SUCCESS)
        if (RegCreateKey(HKEY_CURRENT_USER, KEY_DISABLETASKMGR, &hKey) != ERROR_SUCCESS)
            return 0;

    if (bEnableDisable) // Enable
    {
        r = RegDeleteValue(hKey, VAL_DISABLETASKMGR);
    }
    else                // Disable
    {
        val = 1;
        r = RegSetValueEx(hKey, VAL_DISABLETASKMGR, 0, REG_DWORD, (BYTE *)&val, sizeof(val));
    }

    RegCloseKey(hKey);

    return (r == ERROR_SUCCESS ? 1 : 0) ;
}

int WINAPI StartButton_Show_Hide( BOOL bShowHide )
{
    HWND    hWnd;

    hWnd = GetDlgItem( FindWindow( TASKBAR, NULL ), ID_STARTBUTTON ) ;
    if ( hWnd == NULL )
       return 0 ;

    ShowWindow( hWnd, bShowHide ? SW_SHOW : SW_HIDE) ;
    UpdateWindow( hWnd );

    return 1 ;
}

int WINAPI Taskbar_Show_Hide( BOOL bShowHide )
{
    HWND    hWnd;

    hWnd = FindWindow( TASKBAR, NULL ) ;
    if ( hWnd == NULL )
        return 0 ;

    ShowWindow( hWnd, bShowHide ? SW_SHOW : SW_HIDE ) ;
    UpdateWindow(hWnd) ;

    return 1 ;
}

int WINAPI Desktop_Show_Hide( BOOL bShowHide )
{
    OSVERSIONINFO   osvi ;
    BOOL            bIsWindowsNT4SP3orLater ;
    int             iServicePack ;
    char           *p ;

    // Determine the current windows version
    osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO ) ;
    GetVersionEx( &osvi );
    for (p = osvi.szCSDVersion; *p  && ! isdigit( *p ) ; *p++ ) ;
    iServicePack = atoi( p ) ;
    bIsWindowsNT4SP3orLater = ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) &&
                               ( ( ( osvi.dwMajorVersion == 4 ) && ( iServicePack >= 3 ) ) ||
                                     ( osvi.dwMajorVersion > 4 ) ) ;

    if ( ! bShowHide )
    {
        if ( ! hHook )
        {
            hHook  = SetWindowsHookEx( bIsWindowsNT4SP3orLater ? WH_MOUSE_LL : WH_MOUSE,
                                      bIsWindowsNT4SP3orLater ? ( HOOKPROC )LowLevelMouseHookProc : ( HOOKPROC )MouseHookProc,
                             hInst, 0 ) ;
            if ( ! hHook )
                return 0 ;
        }
    }
    else
    {
        UnhookWindowsHookEx(hHook);
        hHook = NULL;
    }

    return SetWindowPos( FindWindow( NULL, PROGRAM_MANAGER ), NULL, 0, 0, 0, 0,
                        bShowHide ? SWP_SHOWWINDOW : SWP_HIDEWINDOW | SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER);
}

LRESULT CALLBACK LowLevelMouseHookProc( int nCode, WORD wParam, DWORD lParam )
{
    PMSLLHOOKSTRUCT p = (PMSLLHOOKSTRUCT)lParam ;
    HWND hWnd = WindowFromPoint( p->pt ) ;

    if( nCode >= 0 )
    {
        if ( ( wParam == WM_LBUTTONDOWN || wParam == WM_RBUTTONDOWN ) && hWnd == GetDesktopWindow() )
        {
            return 1 ;
        }
    }

    return CallNextHookEx( hHook, nCode, wParam, lParam ) ;
}

LRESULT CALLBACK MouseHookProc( int nCode, WORD wParam, DWORD lParam )
{
    if( nCode >= 0 )
    {
        if ( wParam == WM_LBUTTONDBLCLK )
        {
            if ( ( ( MOUSEHOOKSTRUCT * )lParam )->hwnd == GetDesktopWindow() )
            {
                return 1 ;
            }
        }
    }

    return CallNextHookEx( hHook, nCode, wParam, lParam ) ;
}

int WINAPI Process_Desktop(char *szDesktopName, char *szPath )
{
    HDESK   hOriginalThread ;
    HDESK   hOriginalInput ;
    HDESK   hNewDesktop ;

    // Save original ...
    hOriginalThread = GetThreadDesktop( GetCurrentThreadId() ) ;
    hOriginalInput = OpenInputDesktop( 0, FALSE, DESKTOP_SWITCHDESKTOP ) ;

    // Create a new Desktop and switch to it
    hNewDesktop = CreateDesktop( szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL ) ;
    SetThreadDesktop( hNewDesktop ) ;
    SwitchDesktop( hNewDesktop ) ;

    // Execute process in new desktop
    StartProcess( szDesktopName, szPath ) ;

    // Restore original ...
    SwitchDesktop( hOriginalInput ) ;
    SetThreadDesktop( hOriginalThread ) ;

    // Close the Desktop
    CloseDesktop( hNewDesktop ) ;

    return 0 ;
}

BOOL StartProcess( char *szDesktopName, char *szPath )
{
    STARTUPINFO         si ;
    PROCESS_INFORMATION pi ;

    // Zero these structs
    ZeroMemory( &si, sizeof( si ) ) ;
    si.cb = sizeof( si ) ;
     si.lpTitle = szDesktopName ;
     si.lpDesktop = szDesktopName ;
    ZeroMemory( &pi, sizeof( pi ) ) ;

    // Start the child process
    if (!CreateProcess( NULL,    // No module name (use command line).
                        szPath,  // Command line.
                        NULL,    // Process handle not inheritable.
                        NULL,    // Thread handle not inheritable.
                        FALSE,   // Set handle inheritance to FALSE.
                        0,       // No creation flags.
                        NULL,    // Use parent's environment block.
                        NULL,    // Use parent's starting directory.
                        &si,     // Pointer to STARTUPINFO structure.
                        &pi ) )  // Pointer to PROCESS_INFORMATION structure.
    {
        return FALSE ;
    }

    // Wait until process exits
    WaitForSingleObject( pi.hProcess, INFINITE ) ;

    // Close process and thread handles
    CloseHandle( pi.hProcess ) ;
    CloseHandle( pi.hThread ) ;

    return TRUE ;
}

int WINAPI Clock_Show_Hide( BOOL bShowHide )
{
    HWND    hWnd ;

    hWnd = GetDlgItem( FindWindow( TASKBAR, NULL ), ID_TRAY ) ;
     hWnd = GetDlgItem( hWnd, ID_CLOCK ) ;
    if ( hWnd == NULL )
        return 0 ;

    ShowWindow( hWnd, bShowHide ? SW_SHOW : SW_HIDE ) ;
    UpdateWindow( hWnd ) ;

    return 1 ;
}

int WINAPI AltTab_Enable_Disable( HWND hWnd, BOOL bEnableDisable )
{
    #define m_nHotKeyID 100

    if ( ! bEnableDisable )
    {
        if ( ! RegisterHotKey( hWnd, m_nHotKeyID+0, MOD_ALT, VK_TAB ) )     // Alt+Tab
            return 0 ;
      if ( ! RegisterHotKey( hWnd, m_nHotKeyID+1, MOD_ALT, VK_ESCAPE ) )    // Alt+Esc
            return 0 ;
    }
    else
    {
        if ( ! UnregisterHotKey( hWnd, m_nHotKeyID + 0 ) )
            return 0 ;
        if ( ! UnregisterHotKey( hWnd, m_nHotKeyID + 1 ) )
            return 0 ;
    }
    return 1 ;
}
#pragma ENDDUMP

/*
Saludos

Manuel Mercado
*/

 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7315
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Tecla TAB desde codigo

Postby El Loco » Sun Apr 17, 2022 1:16 pm

Gracias Karinha.
Ya me pongo a investigar y probar
Nuevamente muchas gracias
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby nageswaragunupudi » Sun Apr 17, 2022 1:56 pm

El Loco wrote:Buenos días y felices pascuas para todos.
Como puedo impedir/suprimir en un control generado desde código llegar a el con la tecla TAB (VK_TAB) ?
Desde ya muchísimas gracias.
Abrazo


After creating the control, add this code in the next line
Code: Select all  Expand view

oControl:WinStyle( WS_TAB, .f. )
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10295
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Tecla TAB desde codigo

Postby El Loco » Mon Apr 18, 2022 1:21 am

Gracias RAO... pero no....presionando la tecla TAB los controles sigue recibiendo el foco
Abrazo
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby nageswaragunupudi » Mon Apr 18, 2022 4:59 am

1) Sorry, my mistake. It is WS_TABSTOP. Not WS_TAB.
2) Please always let us know the FWH version you are using, whenever you post. This helps us the provide a solution that works with your version of FWH. If you do not mention your version, we normally advise which works with recent versions. Such a solution may not work for you, if your version is too old.
3) The following sample works with many recent versions:
Code: Select all  Expand view
#include "fivewin.ch"

function Main()

   local n1 := 100, n2 := 200, n3 := 300
   local oDlg, oFont, oGet

   SetGetColorFocus()

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-20
   DEFINE DIALOG oDlg SIZE 400,400 PIXEL TRUEPIXEL FONT oFont

   @  30,30 GET n1 SIZE 100,30 PIXEL OF oDlg RIGHT

   @  80,30 GET oGet VAR n2 SIZE 100,30 PIXEL OF oDlg RIGHT
   oGet:WinStyle( WS_TABSTOP, .f. )

   @ 130,30 GET n3 SIZE 100,30 PIXEL OF oDlg RIGHT

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
 

Pressing Tab key always skips the second get.
Please build and test this sample.
If you still have problems, let us know and also inform your FWH version.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10295
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Tecla TAB desde codigo

Postby El Loco » Mon Apr 18, 2022 6:36 am

RAO la versión de Fivewin que tengo es muy vieja 14.04
Probando tu código ya de entrada me da un error en:
DEFINE DIALOG oDlg SIZE 400,400 PIXEL TRUEPIXEL FONT oFont
sacando el "TRUEPIXEL" compila, pero aún así no funciona, presionando la tecla TAB pasa por todos los get
Abrazos
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby nageswaragunupudi » Mon Apr 18, 2022 7:56 am

Please try:
Code: Select all  Expand view
  local n1 := 100, n2 := 200, n3 := 300
   local oDlg, oFont, oGet

   SetGetColorFocus()

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-20
   DEFINE DIALOG oDlg SIZE 400,400 PIXEL FONT oFont

   @  20,30 GET n1 SIZE 100,20 PIXEL OF oDlg RIGHT

   @  50,30 GET oGet VAR n2 SIZE 100,20 PIXEL OF oDlg RIGHT

   @  80,30 GET n3 SIZE 100,20 PIXEL OF oDlg RIGHT

   ACTIVATE DIALOG oDlg CENTERED ON INIT oGet:WinStyle( WS_TABSTOP, .f. )
   RELEASE FONT oFont
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10295
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Tecla TAB desde codigo

Postby El Loco » Mon Apr 18, 2022 11:38 pm

Si RAO, funciona perfectamente este último código... ahora voy a ver como lo incorporo a lo mío.
Muchísimas gracias
Abrazo
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby El Loco » Tue Apr 19, 2022 12:00 am

RAO si bien funciona en mi código anula la validación del get o dicho de otra manera cuando ingreso el dato en el get y presiono ENTER se queda ahí ... recién cuando presiono con el mouse sobre cualquier de los BtnBmp que les saque la posibilidad del TAB valida el get y hace la busqueda.
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina

Re: Tecla TAB desde codigo

Postby El Loco » Tue Apr 19, 2022 12:48 am

RAO si bien funciona en mi código anula la validación del get o dicho de otra manera cuando ingreso el dato en el get y presiono ENTER se queda ahí ... recién cuando presiono con el mouse sobre cualquier de los BtnBmp que les saque la posibilidad del TAB valida el get y hace la busqueda.
FWH 32/64 14.04
Harbour 3.2.0 (r1306211258)
PellesC
El Loco
 
Posts: 328
Joined: Fri May 19, 2006 4:08 pm
Location: Buenos Aires - Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 29 guests