114 lines
2.5 KiB
C
114 lines
2.5 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (C) Microsoft Corporation, 1994 - 1999
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Async.c
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Some common routines for the Async tests.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Kamen Moutafov (kamenm) 20-Apr-1998
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include <rpcperf.h>
|
||
|
|
||
|
unsigned int RPC_ENTRY WindowProc(IN void * hWnd, IN unsigned int Message,
|
||
|
IN unsigned int wParam, IN unsigned long lParam)
|
||
|
{
|
||
|
LRESULT Res = 0;
|
||
|
if (Message == PERF_TEST_NOTIFY)
|
||
|
{
|
||
|
// no-op
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Res = DefWindowProc((HWND)hWnd, Message, wParam, lParam);
|
||
|
}
|
||
|
return (unsigned int)Res;
|
||
|
}
|
||
|
|
||
|
void RunMessageLoop(HWND hWnd)
|
||
|
{
|
||
|
MSG msg;
|
||
|
UINT nTimerID = 1;
|
||
|
SetTimer(hWnd, nTimerID, 5000, NULL);
|
||
|
|
||
|
// run the message loop
|
||
|
while (GetMessage(&msg, 0, 0, 0))
|
||
|
{
|
||
|
TranslateMessage(&msg);
|
||
|
DispatchMessage(&msg);
|
||
|
}
|
||
|
|
||
|
KillTimer(hWnd, nTimerID);
|
||
|
}
|
||
|
|
||
|
void PumpMessage(void)
|
||
|
{
|
||
|
MSG msg;
|
||
|
|
||
|
GetMessage(&msg, NULL, 0, 0);
|
||
|
TranslateMessage(&msg);
|
||
|
DispatchMessage(&msg);
|
||
|
}
|
||
|
|
||
|
HWND CreateSTAWindow(char *lpszWinName)
|
||
|
{
|
||
|
HWND hWnd;
|
||
|
WNDCLASSA wc;
|
||
|
DWORD dwCurProcessId;
|
||
|
char WNDCLASSNAME[100];
|
||
|
|
||
|
dwCurProcessId = GetCurrentProcessId();
|
||
|
|
||
|
wsprintfA(WNDCLASSNAME, "Windows WMSG BVT %lx", dwCurProcessId);
|
||
|
|
||
|
if (GetClassInfoA(GetModuleHandle(NULL), WNDCLASSNAME, &wc) == FALSE)
|
||
|
{
|
||
|
DWORD dwError;
|
||
|
dwError = GetLastError();
|
||
|
|
||
|
wc.style = 0;
|
||
|
wc.lpfnWndProc = (WNDPROC) WindowProc;
|
||
|
wc.cbWndExtra = 4;
|
||
|
wc.cbClsExtra = 0;
|
||
|
wc.hInstance = GetModuleHandle(NULL);
|
||
|
wc.hIcon = NULL;
|
||
|
wc.hCursor = NULL;
|
||
|
wc.hbrBackground = NULL;
|
||
|
wc.lpszMenuName = NULL;
|
||
|
wc.lpszClassName = WNDCLASSNAME;
|
||
|
|
||
|
if (RegisterClassA(&wc) == 0)
|
||
|
{
|
||
|
return (NULL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Create hidden window to receive RPC messages
|
||
|
hWnd = CreateWindowExA(WS_EX_NOPARENTNOTIFY,
|
||
|
WNDCLASSNAME,
|
||
|
"temp",
|
||
|
WS_OVERLAPPEDWINDOW | WS_CHILD | WS_POPUP,
|
||
|
CW_USEDEFAULT,
|
||
|
CW_USEDEFAULT,
|
||
|
CW_USEDEFAULT,
|
||
|
CW_USEDEFAULT,
|
||
|
GetDesktopWindow(),
|
||
|
(HMENU)NULL,
|
||
|
GetModuleHandle(NULL),
|
||
|
(LPVOID)0);
|
||
|
|
||
|
SetWindowLongPtr(hWnd, GWLP_USERDATA, (long)GetCurrentThreadId());
|
||
|
SetWindowTextA(hWnd, lpszWinName);
|
||
|
return (hWnd);
|
||
|
}
|