09-15-2022, 01:22 PM
(09-12-2022, 09:25 PM)Spriggsy Wrote: System won't print anything, it just exits the program with that code. The function is basically being called by STR$. Not sure what you're asking for on the other question, though. The events are all there to run the window created by CreateWindow and the callback function is registered with RegisterClass.
I see now that you mean line 381. Anyways, there's no way for it to be firing anything after WinMain because System kills the program. Everything is a bit out of order anyways. You wouldn't want your test outside of the loop that is displaying the window.
UPDATE:
I haven't given up on this Spriggsy! Just got a little busy, is all...
This, the MIDI thing, the WAV file thing, all still in the pipe.
I figured it can't hurt to do some reading up on these API calls - below are my notes in case it helps anyone.
I still am not convinced it's impossible to populate hwndMain with _WindowHandle of the existing app, and get the API functions to act on that.
Also, does the RawInput require an actual window to work?
What about the Windows desktop?
Anyway, I will continue to play with this.
If you have any breakthroughs, let me know! :-D
Code: (Select All)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
WINDOWS API COMMANDS
----------------------------------------------------------------------------------------------------------------------------------------------------------------
GetRawInputDeviceList
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getrawinputdevicelist
Enumerates the raw input devices attached to the system.
RegisterRawInputDevices
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerrawinputdevices
Registers the devices that supply the raw input data.
GetRawInputData
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getrawinputdata
Retrieves the raw input from the specified device.
Parameters:
[in] hRawInput
Type: HRAWINPUT
A handle to the RAWINPUT structure. This comes from the lParam in WM_INPUT.
[in] uiCommand
Type: UINT
The command flag. This parameter can be one of the following values.
Value Meaning
RID_HEADER 0x10000005 Get the header information from the RAWINPUT structure.
RID_INPUT 0x10000003 Get the raw data from the RAWINPUT structure.
[out, optional] pData
Type: LPVOID
A pointer to the data that comes from the RAWINPUT structure.
This depends on the value of uiCommand.
If pData is NULL, the required size of the buffer is returned in *pcbSize.
[in, out] pcbSize
Type: PUINT
The size, in bytes, of the data in pData.
[in] cbSizeHeader
Type: UINT
The size, in bytes, of the RAWINPUTHEADER structure.
Return value
Type: UINT
If pData is NULL and the function is successful, the return value is 0.
If pData is not NULL and the function is successful,
the return value is the number of bytes copied into pData.
If there is an error, the return value is (UINT)-1.
Remarks
GetRawInputData gets the raw input one RAWINPUT structure at a time.
In contrast, GetRawInputBuffer gets an array of RAWINPUT structures.
DrawText
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtext
The DrawText function draws formatted text in the specified rectangle.
It formats the text according to the specified method (expanding tabs,
justifying characters, breaking lines, and so forth).
To specify additional formatting options, use the DrawTextEx function.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
OTHERS:
FillRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-fillrect
The FillRect function fills a rectangle by using the specified brush.
This function includes the left and top borders, but excludes the right and bottom borders of the rectangle.
Parameters
[in] hDC
A handle to the device context.
[in] lprc
A pointer to a RECT structure that contains the logical coordinates of the rectangle to be filled.
[in] hbr
A handle to the brush used to fill the rectangle.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
GetDC function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc
The GetDC function retrieves a handle to a device context (DC) for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the DC. The device context is an opaque data structure, whose values are used internally by GDI.
The GetDCEx function is an extension to GetDC, which gives an application more control over how and whether clipping occurs in the client area.
Parameters
[in] hWnd
A handle to the window whose DC is to be retrieved.
If this value is NULL, GetDC retrieves the DC for the entire screen.
Return value
If the function succeeds, the return value is a handle to the DC for the specified window's client area.
If the function fails, the return value is NULL.
LoadBitmapA function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadbitmapa
LoadBitmapW function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadbitmapw
OffsetRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-offsetrect
RedrawWindow function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-redrawwindow
ReleaseDC function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-releasedc
SetRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setrect
WindowFromDC function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-windowfromdc
BeginPaint function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-beginpaint
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GetModuleHandle
https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea
GetModuleHandleA function (libloaderapi.h)
Retrieves a module handle for the specified module. The module must have been loaded by the calling process.
To avoid the race conditions described in the Remarks section, use the GetModuleHandleEx function.
GetModuleHandleExA function (libloaderapi.h)
https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandleexa
Retrieves a module handle for the specified module and increments the module's reference count
unless GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT is specified.
The module must have been loaded by the calling process.
RegisterClassEx
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerclassexa
RegisterClassExA function (winuser.h)
Registers a window class for subsequent use in calls to the CreateWindow or CreateWindowEx function.
CreateWindowEx
CreateWindowExA function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowexa
Creates an overlapped, pop-up, or child window with an extended window style;
otherwise, this function is identical to the CreateWindow function.
For more information about creating a window
and for full descriptions of the other parameters of CreateWindowEx, see CreateWindow.
CreateWindowA macro (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-createwindowa
ShowWindow
ShowWindow function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
Sets the specified window's show state.
Parameters
[in] hWnd
Type: HWND
A handle to the window.
[in] nCmdShow
Type: int
Controls how the window is to be shown.
This parameter is ignored the first time an application calls ShowWindow,
if the program that launched the application provides a STARTUPINFO structure.
Otherwise, the first time ShowWindow is called, the value should be the value obtained
by the WinMain function in its nCmdShow parameter. In subsequent calls, this parameter
can be one of the following values.
Value Meaning
0 SW_HIDE Hides the window and activates another window.
1 SW_SHOWNORMAL, SW_NORMAL Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
2 SW_SHOWMINIMIZED Activates the window and displays it as a minimized window.
3 SW_SHOWMAXIMIZED, SW_MAXIMIZE Activates the window and displays it as a maximized window.
4 SW_SHOWNOACTIVATE Displays a window in its most recent size and position. This value is similar to SW_SHOWNORMAL, except that the window is not activated.
5 SW_SHOW Activates the window and displays it in its current size and position.
6 SW_MINIMIZE Minimizes the specified window and activates the next top-level window in the Z order.
7 SW_SHOWMINNOACTIVE Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except the window is not activated.
8 SW_SHOWNA Displays the window in its current size and position. This value is similar to SW_SHOW, except that the window is not activated.
9 SW_RESTORE Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
10 SW_SHOWDEFAULT Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.
11 SW_FORCEMINIMIZE Minimizes a window, even if the thread that owns the window is not responding. This flag should only be used when minimizing windows from a different thread.
Return value
Type: BOOL
If the window was previously visible, the return value is nonzero.
If the window was previously hidden, the return value is zero.
UpdateWindow
UpdateWindow function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-updatewindow
The UpdateWindow function updates the client area of the specified window
by sending a WM_PAINT message to the window if the window's update region is not empty.
The function sends a WM_PAINT message directly to the window procedure of the specified window,
bypassing the application queue. If the update region is empty, no message is sent.
Parameters
[in] hWnd
Handle to the window to be updated.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
DefWindowProc
DefWindowProcW function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-defwindowprocw
Calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed.
DefWindowProc is called with the same parameters received by the window procedure.
Parameters
[in] hWnd
Type: HWND
A handle to the window procedure that received the message.
[in] Msg
Type: UINT
The message.
[in] wParam
Type: WPARAM
Additional message information.
The content of this parameter depends on the value of the Msg parameter.
[in] lParam
Type: LPARAM
Additional message information.
The content of this parameter depends on the value of the Msg parameter.
Return value
Type: LRESULT
The return value is the result of the message processing and depends on the message.
DefWindowProcA function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-defwindowproca
Calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed.
DefWindowProc is called with the same parameters received by the window procedure.
Parameters
[in] hWnd
Type: HWND
A handle to the window procedure that received the message.
[in] Msg
Type: UINT
The message.
[in] wParam
Type: WPARAM
Additional message information.
The content of this parameter depends on the value of the Msg parameter.
[in] lParam
Type: LPARAM
Additional message information.
The content of this parameter depends on the value of the Msg parameter.
Return value
Type: LRESULT
The return value is the result of the message processing and depends on the message.
GetClientRect
GetClientRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getclientrect
Retrieves the coordinates of a window's client area.
The client coordinates specify the upper-left and lower-right corners of the client area.
Because client coordinates are relative to the upper-left corner of a window's client area,
the coordinates of the upper-left corner are (0,0).
Parameters
[in] hWnd
Type: HWND
A handle to the window whose client coordinates are to be retrieved.
[out] lpRect
Type: LPRECT
A pointer to a RECT structure that receives the client coordinates.
The left and top members are zero.
The right and bottom members contain the width and height of the window.
Return value
Type: BOOL
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
To get extended error information, call GetLastError.
InvalidateRect
InvalidateRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-invalidaterect
The InvalidateRect function adds a rectangle to the specified window's update region.
The update region represents the portion of the window's client area that must be redrawn.
Parameters
[in] hWnd
A handle to the window whose update region has changed.
If this parameter is NULL, the system invalidates and redraws all windows,
not just the windows for this application, and sends the WM_ERASEBKGND
and WM_NCPAINT messages before the function returns.
Setting this parameter to NULL is not recommended.
[in] lpRect
A pointer to a RECT structure that contains the client coordinates of the rectangle
to be added to the update region.
If this parameter is NULL, the entire client area is added to the update region.
[in] bErase
Specifies whether the background within the update region is to be erased when the
update region is processed. If this parameter is TRUE, the background is erased when
the BeginPaint function is called.
If this parameter is FALSE, the background remains unchanged.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
OffsetRect
OffsetRect function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-offsetrect
The OffsetRect function moves the specified rectangle by the specified offsets.
Parameters
[in, out] lprc
Pointer to a RECT structure that contains the logical coordinates of the rectangle to be moved.
[in] dx
Specifies the amount to move the rectangle left or right.
This parameter must be a negative value to move the rectangle to the left.
[in] dy
Specifies the amount to move the rectangle up or down.
This parameter must be a negative value to move the rectangle up.
Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
BeginPaint
BeginPaint function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-beginpaint
The BeginPaint function prepares the specified window for painting and fills a
PAINTSTRUCT structure with information about the painting.
Parameters
[in] hWnd
Handle to the window to be repainted.
[out] lpPaint
Pointer to the PAINTSTRUCT structure that will receive painting information.
Return value
If the function succeeds, the return value is the handle to a display device context for the specified window.
If the function fails, the return value is NULL, indicating that no display device context is available.
EndPaint
EndPaint function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-endpaint
The EndPaint function marks the end of painting in the specified window.
This function is required for each call to the BeginPaint function, but only after painting is complete.
Parameters
[in] hWnd
Handle to the window that has been repainted.
[in] lpPaint
Pointer to a PAINTSTRUCT structure that contains the painting information retrieved by BeginPaint.
Return value
The return value is always nonzero.
GetMessage
GetMessage function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage
Retrieves a message from the calling thread's message queue.
The function dispatches incoming sent messages until a posted message is available for retrieval.
Unlike GetMessage, the PeekMessage function does not wait for a message to be posted before returning.
(see above URL for details)
TranslateMessage
TranslateMessage function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-translatemessage
Translates virtual-key messages into character messages.
The character messages are posted to the calling thread's message queue,
to be read the next time the thread calls the GetMessage or PeekMessage function.
DispatchMessage
DispatchMessage function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-dispatchmessage
Dispatches a message to a window procedure.
It is typically used to dispatch a message retrieved by the GetMessage function.
SendMessage
SendMessage function (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage
Sends the specified message to a window or windows.
The SendMessage function calls the window procedure for the specified window
and does not return until the window procedure has processed the message.
To send a message and return immediately, use the SendMessageCallback or
SendNotifyMessage function. To post a message to a thread's message queue and
return immediately, use the PostMessage or PostThreadMessage function.
MAKEINTRESOURCE
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makeintresourcea
Converts an integer value to a resource type compatible with the resource-management functions.
This macro is used in place of a string containing the name of the resource.
Library
MAKELPARAM
MAKELPARAM macro (winuser.h)
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makelparam
Creates a value for use as an lParam parameter in a message.
The macro concatenates the specified value
Parameters
l = The low-order word of the new value.
h = The high-order word of the new value.
Return value: None
MAKELONG
MAKELONG macro
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms632660(v=vs.85)
Creates a LONG value by concatenating the specified values.
Parameters
wLow = The low-order word of the new value.
wHigh = The high-order word of the new value.
Return value
Type: DWORD
The return value is a LONG value.
windowsx
GET_Y_LPARAM
GET_Y_LPARAM macro (windowsx.h)
https://docs.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_y_lparam
Retrieves the signed y-coordinate from the given LPARAM value.
Parameters
lp = The data from which the y-coordinate is to be extracted.
Return value
Type: int
Y-coordinate.
Remarks
Use GET_Y_LPARAM instead of HIWORD to extract signed coordinate data.
Negative screen coordinates may be returned on multiple monitor systems.
GET_X_LPARAM
GET_X_LPARAM macro (windowsx.h)
https://docs.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_x_lparam
Retrieves the signed x-coordinate from the specified LPARAM value.
Parameters
lp = The data from which the x-coordinate is to be extracted.
Return value
Type: int
X-coordinate.
Remarks
Use GET_X_LPARAM instead of LOWORD to extract signed coordinate data.
Negative screen coordinates may be returned on multiple monitor systems.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
WINDOWS REFERENCE
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Windows and Messages
https://docs.microsoft.com/en-us/windows/win32/winmsg/windowing
Windows (Windows and Messages)
https://docs.microsoft.com/en-us/windows/win32/winmsg/windows
Window Reference
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-reference
Windows (Windows and Messages) = Discusses windows in general.
https://docs.microsoft.com/en-us/windows/win32/winmsg/windows
Window Constants
https://docs.microsoft.com/en-us/windows/win32/winmsg/constants
Window functions
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-functions
Window Macros
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-macros
Window Messages (Windows and Messages)
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-messages
Window Notifications
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-notifications
Window Structures
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-structures
Window Classes (Windows and Messages) = Describes the types of window classes, how the system locates them, and the elements that define the default behavior of windows that belong to them.
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-classes
Window Procedures = Discusses window procedures. Every window has an associated window procedure that processes all messages sent or posted to all windows of the class.
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-procedures
Messages and Message Queues = Describes messages and message queues and how to use them in your applications.
https://docs.microsoft.com/en-us/windows/win32/winmsg/messages-and-message-queues
Timers = Discusses timers. A timer is an internal routine that repeatedly measures a specified interval, in milliseconds.
https://docs.microsoft.com/en-us/windows/win32/winmsg/timers
Window Properties = Discusses window properties. A window property is any data assigned to a window.
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-properties
Configuration = Describes the functions that can be used to control the configuration of system metrics and various system attributes such as double-click time, screen saver time-out, window border width, and desktop pattern.
https://docs.microsoft.com/en-us/windows/win32/winmsg/configuration
Hooks = Discusses hooks. A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic.
https://docs.microsoft.com/en-us/windows/win32/winmsg/hooks
Multiple Document Interface = Discusses the Multiple Document Interface which is a specification that defines a user interface for applications that enable the user to work with more than one document at the same time.
https://docs.microsoft.com/en-us/windows/win32/winmsg/multiple-document-interface