Files
harbour-core/harbour/contrib/hbwhat32/_winmsg.c
Viktor Szakats d55c772ac7 2008-06-17 23:33 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/rtl/tget.prg
     % Minor opt.

   * contrib/hbwhat32/_winkbrd.c
   * contrib/hbwhat32/_wintext.c
   * contrib/hbwhat32/_windc.c
   * contrib/hbwhat32/_winsys.c
   * contrib/hbwhat32/_windir.c
   * contrib/hbwhat32/_winmsg.c
   * contrib/hbwhat32/_winmisc.c
   * contrib/hbwhat32/_winfont.c
   * contrib/hbwhat32/_winreg.c
     ! Potential warning fixes.
2008-06-17 21:35:42 +00:00

537 lines
15 KiB
C

/*
* $Id$
*/
// Windows message functions
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <shlobj.h>
//#include <commctrl.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"
//-----------------------------------------------------------------------------
HB_FUNC( _ISDIALOGMESSAGE )
{
hb_retl(IsDialogMessage( (HWND) hb_parnl(1), (MSG*) hb_parcx(2) )) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI TranslateMDISysAccel( IN HWND hWndClient, IN LPMSG lpMsg);
HB_FUNC( TRANSLATEMDISYSACCEL )
{
hb_retl( TranslateMDISysAccel( (HWND) hb_parnl( 1 ), (MSG*) hb_parcx( 2 ) ) ) ;
}
//-----------------------------------------------------------------------------
HB_FUNC( TRANSLATEMESSAGE )
{
hb_retl(TranslateMessage( (MSG*) hb_parcx(1))) ;
}
//-----------------------------------------------------------------------------
HB_FUNC( DISPATCHMESSAGE )
{
hb_retnl(DispatchMessage( (MSG*) hb_parcx(1))) ;
}
//-----------------------------------------------------------------------------
HB_FUNC( POSTQUITMESSAGE )
{
PostQuitMessage(hb_parni(1));
}
//-----------------------------------------------------------------------------
HB_FUNC( POSTMESSAGE )
{
char *cText = NULL;
if (ISBYREF(4))
{
cText = (char*) hb_xgrab( hb_parcsiz(4) );
hb_xmemcpy( cText, hb_parcx(4), hb_parcsiz(4) );
}
hb_retnl( (LONG) PostMessage( (HWND) hb_parnl( 1 ), (UINT) hb_parni( 2 ),
(ISNIL(3) ? 0 : (WPARAM) hb_parnl( 3 )) ,
(ISNIL(4) ? 0 : ( ISBYREF(4)? (LPARAM) (LPSTR) cText : ( ISCHAR(4) ? (LPARAM)(LPSTR) hb_parcx(4) : (LPARAM) hb_parnl( 4 ))))
)
);
if( ISBYREF( 4 ) )
{
hb_storclen( cText, hb_parcsiz(4), 4 ) ;
hb_xfree( cText );
}
}
//-----------------------------------------------------------------------------
HB_FUNC( SENDMESSAGE )
{
char *cText = NULL;
if( ISBYREF(4) )
{
cText = (char*) hb_xgrab( hb_parcsiz(4) );
hb_xmemcpy( cText, hb_parcx(4), hb_parcsiz(4) );
}
hb_retnl( (ULONG) SendMessage( (HWND) hb_parnl( 1 ), (UINT) hb_parni( 2 ),
(ISNIL(3) ? 0 : (WPARAM) hb_parnl( 3 )) ,
(ISNIL(4) ? 0 : ( ISBYREF(4)? (LPARAM) (LPSTR) cText : ( ISCHAR(4) ? (LPARAM)(LPSTR) hb_parcx(4) : (LPARAM) hb_parnl( 4 ))))
)
);
if (ISBYREF( 4 ))
{
hb_storclen( cText, hb_parcsiz(4), 4 ) ;
hb_xfree( cText );
}
}
//-----------------------------------------------------------------------------
HB_FUNC( SENDDLGITEMMESSAGE )
{
char *cText;
PHB_ITEM pText = hb_param( 5, HB_IT_STRING );
if( pText )
{
cText = (char*) hb_xgrab( hb_itemGetCLen( pText )+1 ); //pText->item.asString.length + 1 );
//hb_xmemcpy( cText, pText->item.asString.value, pText->item.asString.length + 1 );
hb_xmemcpy( cText, hb_itemGetC( pText ), hb_itemGetCLen( pText ) + 1 );
}
else
{
cText = NULL;
}
hb_retnl( (LONG) SendDlgItemMessage( (HWND) hb_parnl( 1 ) ,
(int) hb_parni( 2 ) ,
(UINT) hb_parni( 3 ) ,
(ISNIL(4) ? 0 : (WPARAM) hb_parnl( 4 )) ,
(cText ? (LPARAM) cText : (LPARAM) hb_parnl( 5 ))
)
);
// Will be ignored if not BYREF.
if( pText )
{
//hb_storclen( cText, pText->item.asString.length, 5 ) ;
hb_storclen( cText, hb_itemGetCLen( pText ), 5 ) ;
}
if( cText )
{
hb_xfree( cText );
}
/*
hb_retnl( SendDlgItemMessage( (HWND) hb_parnl(1) , // handle of dialog box
(int) hb_parni(2) , // identifier of control
(UINT) hb_parni(3) , // message to send
(ISNIL(4) ? 0 : (WPARAM) hb_parni(4) ) , // first message parameter
(ISNIL(5) ? 0 : (hb_parinfo(5)==HB_IT_STRING ? (LPARAM) (LPSTR) hb_parcx(5) : (LPARAM) hb_parnl( 5 )) ) // second message parameter
));
*/
}
//-----------------------------------------------------------------------------
// consider passing an array instead of MSG string ( but it will be slower )
// add error handling and recovery
HB_FUNC( GETMESSAGE )
{
MSG Msg ;
if (GetMessage( &Msg,
ISNIL(2) ? NULL : (HWND) hb_parnl(2),
ISNIL(3) ? 0 : hb_parnl(3),
ISNIL(4) ? 0 : hb_parnl(4) ) )
{
hb_storclen( (LPSTR) &Msg, sizeof(MSG), 1 ) ;
hb_retl( 1 ) ;
}
else
hb_retl ( 0 ) ;
}
//-----------------------------------------------------------------------------
HB_FUNC( PEEKMESSAGE )
{
MSG Msg ;
if (PeekMessage( (MSG*) &Msg,
ISNIL(2) ? NULL :(HWND) hb_parnl(2),
ISNIL(3) ? 0 : hb_parnl(3),
ISNIL(4) ? 0 : hb_parnl(4),
ISNIL(5) ? PM_NOREMOVE : hb_parnl(5)))
{
hb_storclen( (LPSTR) &Msg, sizeof(MSG),1) ;
hb_retl( 1 ) ;
}
else
hb_retl ( 0 ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI UINT WINAPI RegisterWindowMessage( IN LPCWSTR lpString);
HB_FUNC( REGISTERWINDOWMESSAGE )
{
hb_retni( RegisterWindowMessageA( (LPCSTR) hb_parcx( 1 ) ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI SetMessageQueue( IN int cMessagesMax);
HB_FUNC( SETMESSAGEQUEUE )
{
hb_retl( SetMessageQueue( hb_parni( 1 ) ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI DWORD WINAPI GetMessagePos( VOID);
HB_FUNC( GETMESSAGEPOS )
{
hb_retnl( (LONG) GetMessagePos( ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI LONG WINAPI GetMessageTime( VOID);
HB_FUNC( GETMESSAGETIME )
{
hb_retnl( (LONG) GetMessageTime( ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI LPARAM WINAPI GetMessageExtraInfo( VOID);
HB_FUNC( GETMESSAGEEXTRAINFO )
{
hb_retnl( (LONG) GetMessageExtraInfo( ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI LPARAM WINAPI SetMessageExtraInfo( IN LPARAM lParam);
HB_FUNC( SETMESSAGEEXTRAINFO )
{
hb_retnl( (LONG) SetMessageExtraInfo( (LPARAM) hb_parnl( 1 ) ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI LRESULT WINAPI SendMessageTimeoutA( IN HWND hWnd, IN UINT Msg, IN WPARAM wParam, IN LPARAM lParam, IN UINT fuFlags, IN UINT uTimeout, OUT PDWORD_PTR lpdwResult);
/*
HB_FUNC( SENDMESSAGETIMEOUT )
{
PDWORD_PTR lpdwResult ;
// Your code goes here
hb_retnl( (LONG) SendMessageTimeout( (HWND) hb_parnl( 1 ) ,
(UINT) hb_parni( 2 ) ,
(WPARAM) hb_parnl( 3 ),
(LPARAM) hb_parnl( 4 ),
(UINT) hb_parni( 5 ) ,
(UINT) hb_parni( 6 ) ,
lpdwResult
) ) ;
}
*/
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI SendNotifyMessageA( IN HWND hWnd, IN UINT Msg, IN WPARAM wParam, IN LPARAM lParam);
HB_FUNC( SENDNOTIFYMESSAGE )
{
hb_retl( SendNotifyMessage( (HWND) hb_parnl( 1 ) ,
(UINT) hb_parni( 2 ) ,
(WPARAM) hb_parnl( 3 ),
(LPARAM) hb_parnl( 4 )
) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI PostThreadMessageA( IN DWORD idThread, IN UINT Msg, IN WPARAM wParam, IN LPARAM lParam);
HB_FUNC( POSTTHREADMESSAGE )
{
hb_retl( PostThreadMessage( (DWORD) hb_parnl( 1 ) ,
(UINT) hb_parni( 2 ) ,
(WPARAM) hb_parnl( 3 ),
(LPARAM) hb_parnl( 4 )
) ) ;
}
//----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI ReplyMessage( IN LRESULT lResult);
HB_FUNC( REPLYMESSAGE )
{
hb_retl( ReplyMessage( (LRESULT) hb_parnl( 1 ) ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI WaitMessage( VOID);
HB_FUNC( WAITMESSAGE )
{
hb_retl( WaitMessage( ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI DWORD WINAPI WaitForInputIdle( IN HANDLE hProcess, IN DWORD dwMilliseconds);
HB_FUNC( WAITFORINPUTIDLE )
{
hb_retnl( (LONG) WaitForInputIdle( (HANDLE) hb_parnl( 1 ),
(DWORD) hb_parnl( 2 )
) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI InSendMessage( VOID);
HB_FUNC( INSENDMESSAGE )
{
hb_retl( InSendMessage( ) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI DWORD WINAPI InSendMessageEx( IN LPVOID lpReserved);
#if(WINVER >= 0x0500)
HB_FUNC( INSENDMESSAGEEX )
{
hb_retnl( (LONG) InSendMessageEx( NULL ) ) ; // param reserved must be NULL
}
#endif
//-----------------------------------------------------------------------------
// WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjects( IN DWORD nCount, IN CONST HANDLE *pHandles, IN BOOL fWaitAll, IN DWORD dwMilliseconds, IN DWORD dwWakeMask);
HB_FUNC( MSGWAITFORMULTIPLEOBJECTS )
{
hb_retnl( (LONG) MsgWaitForMultipleObjects( (DWORD) hb_parnl( 1 ) ,
(HANDLE *) hb_parnl( 2 ),
hb_parl( 3 ) ,
(DWORD) hb_parnl( 4 ) ,
(DWORD) hb_parnl( 5 )
) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjectsEx( IN DWORD nCount, IN CONST HANDLE *pHandles, IN DWORD dwMilliseconds, IN DWORD dwWakeMask, IN DWORD dwFlags);
HB_FUNC( MSGWAITFORMULTIPLEOBJECTSEX )
{
hb_retnl( (LONG) MsgWaitForMultipleObjectsEx( (DWORD) hb_parnl( 1 ) ,
(HANDLE *) hb_parnl( 2 ),
(DWORD) hb_parnl( 3 ) ,
(DWORD) hb_parnl( 4 ) ,
(DWORD) hb_parnl( 5 )
) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI SendMessageCallbackA( IN HWND hWnd, IN UINT Msg, IN WPARAM wParam, IN LPARAM lParam, IN SENDASYNCPROC lpResultCallBack, IN ULONG_PTR dwData);
/*
HB_FUNC( SENDMESSAGECALLBACK )
{
SENDASYNCPROC lpResultCallBack ;
ULONG_PTR dwData ;
// Your code goes here
hb_retl( SendMessageCallback( (HWND) hb_parnl( 1 ) ,
(UINT) hb_parni( 2 ) ,
(WPARAM) hb_parnl( 3 ),
(LPARAM) hb_parnl( 4 ),
lpResultCallBack ,
dwData
) ) ;
}
*/
//-----------------------------------------------------------------------------
// WINUSERAPI long WINAPI BroadcastSystemMessageA( IN DWORD, IN LPDWORD, IN UINT, IN WPARAM, IN LPARAM);
/*
HB_FUNC( BROADCASTSYSTEMMESSAGE )
{
LPDWORD lpdWord ;
// Your code goes here
hb_retnl( (LONG) BroadcastSystemMessage( (DWORD) hb_parnl( 1 ) ,
lpdWord ,
(UINT) hb_parni( 3 ) ,
(WPARAM) hb_parnl( 4 ),
(LPARAM) hb_parnl( 5 )
) ) ;
}
*/
//-----------------------------------------------------------------------------
// WINUSERAPI long WINAPI BroadcastSystemMessage( IN DWORD, IN LPDWORD, IN UINT, IN WPARAM, IN LPARAM);
/*
HB_FUNC( BROADCASTSYSTEMMESSAGE )
{
LPDWORD lpdWord ;
// Your code goes here
hb_retnl( (LONG) BroadcastSystemMessage( (DWORD) hb_parnl( 1 ) ,
lpdWord ,
(UINT) hb_parni( 3 ) ,
(WPARAM) hb_parnl( 4 ),
(LPARAM) hb_parnl( 5 )
) ) ;
}
*/
//-----------------------------------------------------------------------------
// WINUSERAPI HDEVNOTIFY WINAPI RegisterDeviceNotificationA( IN HANDLE hRecipient, IN LPVOID NotificationFilter, IN DWORD Flags );
/*
HB_FUNC( REGISTERDEVICENOTIFICATION )
{
LPVOID NotificationFilter ;
// Your code goes here
hb_retnl( (LONG) RegisterDeviceNotification( (HANDLE) hb_parnl( 1 ),
NotificationFilter ,
(DWORD) hb_parnl( 3 )
) ) ;
}
*/
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI UnregisterDeviceNotification( IN HDEVNOTIFY Handle );
#if(WINVER >= 0x0500)
HB_FUNC( UNREGISTERDEVICENOTIFICATION )
{
hb_retl( UnregisterDeviceNotification( (HDEVNOTIFY) hb_parnl( 1 ) ) ) ;
}
#endif
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI AttachThreadInput( IN DWORD idAttach, IN DWORD idAttachTo, IN BOOL fAttach);
HB_FUNC( ATTACHTHREADINPUT )
{
hb_retl( AttachThreadInput( (DWORD) hb_parnl( 1 ) ,
(DWORD) hb_parnl( 2 ) ,
hb_parl( 3 )
) ) ;
}
//-----------------------------------------------------------------------------
// WINUSERAPI BOOL WINAPI CallMsgFilterA( IN LPMSG lpMsg, IN int nCode);
HB_FUNC( CALLMSGFILTER )
{
MSG *Msg = (MSG * ) hb_parc( 1 ); //hb_param( 1, HB_IT_STRING )->item.asString.value;
hb_retl( CallMsgFilter( Msg, hb_parni( 2 ) ) ) ;
}