250 lines
7.3 KiB
C
250 lines
7.3 KiB
C
#include <time.h>
|
|
#include <math.h>
|
|
|
|
HWND ParentWindow = NULL ; // HWND de la fenêtre parente
|
|
|
|
char * get_param_str( char * str ) ;
|
|
|
|
void TestIfParentIsKiTTY( void ) {
|
|
ParentWindow = GetForegroundWindow() ;
|
|
char buffer[256] ;
|
|
GetClassName( ParentWindow, buffer, 256 ) ;
|
|
if( strcmp( buffer, "KiTTY" ) && strcmp( buffer, "PuTTY" ) ) ParentWindow = NULL ;
|
|
//SendMessage(ParentWindow, WM_CHAR, buffer[i], 0) ;
|
|
}
|
|
|
|
void ActiveParent( void ) { if( IsIconic( ParentWindow ) ) ShowWindow(ParentWindow,SW_RESTORE) ; }
|
|
|
|
void Send2Window( HWND SrcWnd, HWND TargetWnd, char * buffer ) {
|
|
int i ;
|
|
if( (buffer!=NULL) && (strlen( buffer) > 0 ) ) {
|
|
if( IsIconic( TargetWnd ) ) {
|
|
ShowWindow( TargetWnd, SW_RESTORE ) ;
|
|
for( i=0; i< strlen( buffer ) ; i++ )
|
|
if( buffer[i] == '\n' ) { SendMessage( TargetWnd, WM_KEYDOWN, VK_RETURN, 0 ) ; }
|
|
else if( buffer[i] == '\r' ) { }
|
|
else SendMessage( TargetWnd, WM_CHAR, buffer[i], 0 ) ;
|
|
if( SrcWnd!=NULL ) { SetForegroundWindow( SrcWnd ) ; }
|
|
} else {
|
|
BringWindowToTop( TargetWnd ) ;
|
|
for( i=0; i< strlen( buffer ) ; i++ )
|
|
if( buffer[i] == '\n' ) { SendMessage( TargetWnd, WM_KEYDOWN, VK_RETURN, 0 ) ; }
|
|
else if( buffer[i] == '\r' ) { }
|
|
else SendMessage( TargetWnd, WM_CHAR, buffer[i], 0 ) ;
|
|
if ( SrcWnd!=NULL ) { BringWindowToTop( SrcWnd ) ; }
|
|
}
|
|
}
|
|
}
|
|
|
|
void Send2Parent( HWND ChildWnd , char * buffer ) {
|
|
if( (ParentWindow != NULL) && (buffer!=NULL) ) {
|
|
Send2Window( ChildWnd, ParentWindow, buffer ) ;
|
|
}
|
|
}
|
|
|
|
void InitKiTTYNotepad( HWND hwnd ) {
|
|
if( ParentWindow!=NULL ) {
|
|
int pw=0, ph=0, px=0, py=0 ;
|
|
RECT Rect ;
|
|
GetWindowRect( ParentWindow, &Rect ) ;
|
|
px=Rect.left+20 ;
|
|
py=Rect.top+20 ;
|
|
pw=Rect.right-Rect.left+1 ;
|
|
ph=Rect.bottom-Rect.top+1 ;
|
|
SetWindowPos(hwnd, NULL, px, py, pw, ph, SWP_NOZORDER) ;
|
|
}
|
|
}
|
|
|
|
static int CRLF_flag = 1 ;
|
|
static int Semic_flag = 1 ;
|
|
static int Slash_flag = 0 ;
|
|
static int Tilde_flag = 0 ;
|
|
|
|
// Fonction pour récuperer le contenu de la fenêtre Edit
|
|
int GetEditContent( HWND hWndEdit, char * buffer ) {
|
|
int d,f,i;
|
|
char CharLim = '\n' ;
|
|
|
|
if( Semic_flag ) CharLim = ';' ;
|
|
if( Slash_flag ) CharLim = '/' ;
|
|
if( Tilde_flag ) CharLim = '~' ;
|
|
if( CRLF_flag ) CharLim = '\n' ;
|
|
|
|
GetWindowText(hWndEdit,buffer,32000);
|
|
SendMessage( hWndEdit, EM_GETSEL, (WPARAM)&d, (LPARAM)&f ) ;
|
|
|
|
if( d==f ) {
|
|
while( (d>0)&&(buffer[d-1]!=CharLim) ) d-- ;
|
|
while( (buffer[f]!=CharLim)&&(buffer[f]!='\0') ) f++ ;
|
|
|
|
if( buffer[f-1] != CharLim ) { buffer[f] = CharLim ; buffer[f+1] = '\0' ; f++ ; }
|
|
else { buffer[f] = '\0' ; }
|
|
|
|
SendMessage( hWndEdit, EM_SETSEL, (WPARAM)d, (LPARAM)f ) ;
|
|
}
|
|
else buffer[f] = '\0' ;
|
|
|
|
if( Slash_flag ) if( buffer[f-1]=='/' ) {
|
|
i = f-2 ;
|
|
while( (i>0)&&( (buffer[i]==' ')||(buffer[i]==' ')||(buffer[i]=='\n')||(buffer[i]=='\r') ) ) i-- ;
|
|
if( (i>0) && (buffer[i]==';') ) buffer[f-1]=' ' ;
|
|
}
|
|
|
|
if( CRLF_flag && (buffer[strlen(buffer)-1]!='\n') ) strcat( buffer, "\n" ) ;
|
|
return d ;
|
|
}
|
|
|
|
void ChangeToCRLF( HWND hWndEdit ) {
|
|
char buffer[32000];
|
|
int i,j;
|
|
if( GetWindowText(hWndEdit,buffer,32000)>0 ) if( buffer[0]!='\0' ) {
|
|
i=0;
|
|
while( buffer[i]!='\0' ) {
|
|
if( (buffer[i]=='\r') && (buffer[i+1]!='\n') ) {
|
|
for( j=strlen(buffer)+1 ; j>(i+1) ; j-- ) { buffer[j] = buffer[j-1] ; }
|
|
buffer[i+1] = '\n' ;
|
|
i++ ;
|
|
}
|
|
i++;
|
|
}
|
|
i=0;
|
|
while( buffer[i]!='\0' ) {
|
|
if( (buffer[i]=='\n') && ((i==0)||(buffer[i-1]!='\r')) ) {
|
|
for( j=strlen(buffer)+1 ; j>i ; j-- ) { buffer[j] = buffer[j-1] ; }
|
|
buffer[i] = '\r' ;
|
|
i++ ;
|
|
}
|
|
i++;
|
|
}
|
|
SetWindowText(hWndEdit,buffer);
|
|
}
|
|
}
|
|
|
|
// Fonction pour envoyer une chaîne à la fenetre parente
|
|
void SendStrToParent( HWND hWndEdit ) {
|
|
char buffer[32000] = "" ;
|
|
int d = GetEditContent( hWndEdit, buffer ) ;
|
|
|
|
//sprintf( buffer,"#%d -> %d#",d,f);MessageBox(hWndEdit, buffer,"Info",MB_OK);GetWindowText(hWndEdit,buffer,32000);
|
|
if( strlen(buffer)>0 ) {
|
|
Send2Parent( GetParent( hWndEdit ), buffer+d ) ;
|
|
SetFocus( hWndEdit ) ;
|
|
SendMessage( hWndEdit, EM_SETSEL, (WPARAM)d, (LPARAM)d ) ;
|
|
}
|
|
}
|
|
|
|
// Fonctions pour envoyer une chaîne à toutes les fenêtres KiTTY
|
|
BOOL CALLBACK SendToAllProc( HWND hwnd, LPARAM lParam ) {
|
|
char buffer[256] ;
|
|
GetClassName( hwnd, buffer, 256 ) ;
|
|
if( !strcmp( buffer, get_param_str("CLASS") ) )
|
|
Send2Window( NULL, hwnd, (char*)lParam ) ;
|
|
return TRUE ;
|
|
}
|
|
|
|
void SendStrToAll( HWND hWndEdit ) {
|
|
char buffer[32000] = "" ;
|
|
int d = GetEditContent( hWndEdit, buffer ) ;
|
|
|
|
if( strlen(buffer)>0 ) {
|
|
EnumWindows( SendToAllProc, (LPARAM)(buffer+d) ) ;
|
|
SetFocus( hWndEdit ) ;
|
|
SendMessage( hWndEdit, EM_SETSEL, (WPARAM)d, (LPARAM)d ) ;
|
|
}
|
|
}
|
|
|
|
void SetWindowsSize( HWND hwnd ) {
|
|
//int w=GetSystemMetrics(SM_CXSCREEN), h=GetSystemMetrics(SM_CYSCREEN) ;
|
|
int w=GetSystemMetrics(SM_CXFULLSCREEN), h=GetSystemMetrics(SM_CYFULLSCREEN) ;
|
|
|
|
//char buffer[256];
|
|
//sprintf( buffer, "%d %d %d %d",w,h,GetSystemMetrics(SM_CXFULLSCREEN),GetSystemMetrics(SM_CYFULLSCREEN));
|
|
//MessageBox(hwnd, buffer,"Info",MB_OK);
|
|
|
|
//SetWindowPos(ParentWindow, NULL, 0, 0, w, (int)(h/2.), SWP_NOZORDER) ;
|
|
//SetWindowPos(hwnd, NULL, 0, (int)(h/2.)+1, w, h, SWP_NOZORDER) ;
|
|
|
|
MoveWindow( ParentWindow, 0, 0, w, (int)(h/2.), TRUE );
|
|
MoveWindow( hwnd, 0, (int)(h/2.)+1, w, (int)(h/2.), TRUE );
|
|
}
|
|
|
|
// Denombre le nombre de fenetre KiTTY
|
|
static int nbProgWin = 0 ;
|
|
BOOL CALLBACK CountProgWinProc( HWND hwnd, LPARAM lParam ) {
|
|
char buffer[256] ;
|
|
GetClassName( hwnd, buffer, 256 ) ;
|
|
if( !strcmp( buffer, get_param_str("CLASS") ) ) nbProgWin++ ;
|
|
return TRUE ;
|
|
}
|
|
|
|
int CountProgWin( HWND hwnd ) {
|
|
nbProgWin=0 ;
|
|
EnumWindows( CountProgWinProc, 0 ) ;
|
|
return nbProgWin ;
|
|
}
|
|
|
|
// Redimensionne toutes les fenêtres
|
|
BOOL CALLBACK ResizeAllWindowsProc( HWND hwnd, LPARAM lParam ) {
|
|
char buffer[256] ;
|
|
int cxScreen, cyScreen ;
|
|
//cxScreen = GetSystemMetrics (SM_CXFULLSCREEN);
|
|
//cyScreen = GetSystemMetrics (SM_CYFULLSCREEN);
|
|
cxScreen = GetSystemMetrics (SM_CXSCREEN);
|
|
cyScreen = GetSystemMetrics (SM_CYSCREEN)-40 ;
|
|
int nbCol = floor(sqrt(nbProgWin));
|
|
int nbLig = ceil(1.0*nbProgWin/nbCol) ;
|
|
int *i=(int*)lParam;
|
|
int larg, haut;
|
|
larg = (int)(cxScreen/nbCol) ;
|
|
haut = (int)(cyScreen/nbLig) ;
|
|
|
|
GetClassName( hwnd, buffer, 256 ) ;
|
|
if( !strcmp( buffer, get_param_str("CLASS") ) ) {
|
|
int num=nbProgWin-*i;
|
|
int px=0, py=0 ;
|
|
if( num>0 ) {
|
|
int j ;
|
|
for( j=1 ; j<=num ; j++ ) {
|
|
px++ ;
|
|
if( px>= nbCol ) { py++ ; px=0 ; }
|
|
}
|
|
}
|
|
//char b[256];sprintf(b,"nbProgWin=%d nbCol=%d nbLig=%d num=%d px=%d py=%d",nbProgWin,nbCol,nbLig,num,px,py);MessageBox(NULL,b,"info",MB_OK);
|
|
MoveWindow( hwnd, px*larg, py*haut, larg, haut, TRUE ) ;
|
|
SetForegroundWindow(hwnd); ;
|
|
*i=*i-1;
|
|
}
|
|
return TRUE;
|
|
}
|
|
void ResizeAllWindows( HWND hwnd ) {
|
|
int i;
|
|
i=CountProgWin( hwnd ) ;
|
|
EnumWindows( ResizeAllWindowsProc,(LPARAM)&i) ;
|
|
}
|
|
|
|
// Cascade toute les fenêtres KiTTY
|
|
BOOL CALLBACK CascadeAllWindowsProc( HWND hwnd, LPARAM lParam ) {
|
|
char buffer[256] ;
|
|
int cxScreen, cyScreen ;
|
|
cxScreen = GetSystemMetrics (SM_CXSCREEN);
|
|
cyScreen = GetSystemMetrics (SM_CYSCREEN)-40 ;
|
|
int *i=(int*)lParam;
|
|
int larg, haut, dec=30;
|
|
larg = (int)(cxScreen-dec*nbProgWin) ;
|
|
haut = (int)(cyScreen-dec*nbProgWin) ;
|
|
|
|
GetClassName( hwnd, buffer, 256 ) ;
|
|
if( !strcmp( buffer, get_param_str("CLASS") ) ) {
|
|
int num=nbProgWin-*i;
|
|
MoveWindow( hwnd, num*dec, num*dec, larg, haut, TRUE ) ;
|
|
SetForegroundWindow(hwnd); ;
|
|
*i=*i-1;
|
|
}
|
|
return TRUE;
|
|
}
|
|
void CascadeAllWindows( HWND hwnd ) {
|
|
int i;
|
|
i=CountProgWin( hwnd ) ;
|
|
EnumWindows( CascadeAllWindowsProc,(LPARAM)&i) ;
|
|
}
|