bool initializeKeyhook() { std::thread([=](){ if (g_hook != nullptr) { if (g_keyboardHookedCallback) g_keyboardHookedCallback(false); return; } g_hook = SetWindowsHookExA(WH_KEYBOARD_LL, lowLevelKeyboardProc, GetModuleHandle(0), 0); if (g_keyboardHookedCallback) g_keyboardHookedCallback(g_hook != nullptr); MSG msg; while (GetMessageA(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } }).detach(); return true; }
void Visor(void *data) { MSG msg; unsigned long idThrd; while (PeekMessage(&msg, 0, WM_USER, WM_USER + 5, PM_REMOVE)); while(1) { GetMessageA(&msg, 0, MAIN_READY, MAIN_READY); GetMessageA(&msg, 0, THRD_READY, THRD_READY); idThrd = msg.lParam; PostThreadMessageA(MainThreadID, MAIN_START, 0, 0); PostThreadMessageA(idThrd, THRD_START, 0, 0); } }
static void test_messages(void) { WNDCLASSA cls; HWND win; MSG msg; HANDLE thread; DWORD tid; InitializeCriticalSection(&clipboard_cs); memset(&cls, 0, sizeof(cls)); cls.lpfnWndProc = clipboard_wnd_proc; cls.hInstance = GetModuleHandleA(NULL); cls.lpszClassName = "clipboard_test"; RegisterClassA(&cls); win = CreateWindowA("clipboard_test", NULL, 0, 0, 0, 0, 0, NULL, 0, NULL, 0); ok(win != NULL, "CreateWindow failed: %d\n", GetLastError()); thread = CreateThread(NULL, 0, clipboard_thread, (void*)win, 0, &tid); ok(thread != NULL, "CreateThread failed: %d\n", GetLastError()); while(GetMessageA(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } ok(WaitForSingleObject(thread, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); CloseHandle(thread); UnregisterClassA("clipboard_test", GetModuleHandleA(NULL)); DeleteCriticalSection(&clipboard_cs); }
unsigned WINAPI CreateWndThreadA( LPVOID pThreadParam) { HWND hWnd = CreateWindowA( "Azureus Window Hook", NULL, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if( hWnd == NULL){ printf( "Failed to create window\n" ); return( 0 ); }else{ MSG Msg; while(GetMessageA(&Msg, hWnd, 0, 0)) { TranslateMessage(&Msg); DispatchMessageA(&Msg); } return Msg.wParam; } }
int OGLTest::Run() { bool fFirst = true; MSG msg; do { BOOL fGotMessage; if (miRenderStep) { fGotMessage = GetMessageA(&msg, 0, 0, 0); } else { fGotMessage = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); } if (fGotMessage) { TranslateMessage(&msg); DispatchMessageA(&msg); } float dt = 0.0f; /* Time in seconds since last render step. @todo Measure. */ BOOL fDoRender = FALSE; if (miRenderStep) { if (msg.message == WM_CHAR) { if (msg.wParam == ' ') { fDoRender = TRUE; dt = fFirst ? 0.0f : 0.1f; /* 0.1 second increment per step. */ } } } else { fDoRender = TRUE; } if (fDoRender) { if (mpRender) { setCurrentGLCtx(mhGLRC); mpRender->TimeAdvance(dt); mpRender->DoRender(); setCurrentGLCtx(NULL); fFirst = false; } } } while (msg.message != WM_QUIT); return msg.wParam; }
/****************************************************************** * mmTaskBlock (WINMM.@) */ VOID WINAPI mmTaskBlock(DWORD tid) { MSG msg; do { GetMessageA(&msg, 0, 0, 0); if (msg.hwnd) DispatchMessageA(&msg); } while (msg.message != WM_USER); }
static void cleanup(void) { MSG msg; PostMessageA(hProgressParentWnd, WM_CLOSE, 0, 0); while (GetMessageA(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } UnregisterClassA(progressTestClass, GetModuleHandleA(NULL)); }
static void cleanup(void) { MSG msg; PostMessageA(hComboExParentWnd, WM_CLOSE, 0, 0); while (GetMessageA(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } DestroyWindow(hComboExParentWnd); UnregisterClassA(ComboExTestClass, GetModuleHandleA(NULL)); }
static DWORD WINAPI drop_window_therad(void *arg) { struct DragParam *param = arg; WNDCLASSA cls; WINDOWINFO info; BOOL r; MSG msg; memset(&cls, 0, sizeof(cls)); cls.lpfnWndProc = drop_window_proc; cls.hInstance = GetModuleHandleA(NULL); cls.lpszClassName = "drop test"; RegisterClassA(&cls); param->hwnd = CreateWindowA("drop test", NULL, 0, 0, 0, 0, 0, NULL, 0, NULL, 0); ok(param->hwnd != NULL, "CreateWindow failed: %d\n", GetLastError()); memset(&info, 0, sizeof(info)); info.cbSize = sizeof(info); r = GetWindowInfo(param->hwnd, &info); ok(r, "got %d\n", r); ok(!(info.dwExStyle & WS_EX_ACCEPTFILES), "got %08x\n", info.dwExStyle); DragAcceptFiles(param->hwnd, TRUE); memset(&info, 0, sizeof(info)); info.cbSize = sizeof(info); r = GetWindowInfo(param->hwnd, &info); ok(r, "got %d\n", r); ok((info.dwExStyle & WS_EX_ACCEPTFILES), "got %08x\n", info.dwExStyle); SetEvent(param->ready); while ((r = GetMessageA(&msg, NULL, 0, 0)) != 0) { if (r == (BOOL)-1) { ok(0, "unexpected return value, got %d\n", r); break; } DispatchMessageA(&msg); } DestroyWindow(param->hwnd); UnregisterClassA("drop test", GetModuleHandleA(NULL)); return 0; }
void __fastcall TMainForm::ToolButton3Click(TObject *Sender) { String FileName = "ExpMtr\\mtr.xml"; TSendThread *Client; int mr, r, cnt; String err; MSG msg; if ((err = cVerifData()) != "") { ShowMessage(err); return; } LoginForm->UserEdit->Text = /*"sc910001" + */"sc" + IntToStr(School.SchoolCode); LoginForm->PasswordEdit->Text = "jXCHJQQo"; Client = new TSendThread(true); if (LoginForm->ShowModal() != mrOk) return; Client->idVisor = idVisor; Client->User = LoginForm->UserEdit->Text; Client->Password = LoginForm->PasswordEdit->Text; Client->ms = new TMemoryStream; SaveXMLToStream(Client->ms); Client->CommandID = "3"; Client->srv = GetServerIP(); Client->FreeOnTerminate = true; SendForm->Show(); SendForm->Memo1->Lines->Append("Соединение с сервером."); while (PeekMessage(&msg, this->Handle, WM_USER, THRD_END, PM_REMOVE)); //инициализация и отчистка очереди Client->Resume(); GetMessageA(&msg, 0, THRD_READY, THRD_READY); while (!PeekMessageA(&msg, 0, THRD_END, THRD_END, PM_NOREMOVE)) { Application->ProcessMessages(); WaitMessage(); } PostThreadMessageA(0, MAIN_READY, 0, 0); ShowMessage(ThreadMsg); }
static DWORD WINAPI create_window(LPVOID param) { wnd_param *param1 = param; DWORD ret; MSG msg; ret = SetThreadDesktop(param1->hdesk); ok(ret, "SetThreadDesktop failed!\n"); param1->hwnd = CreateWindowA("test_class", param1->wnd_name, WS_POPUP, 0, 0, 100, 100, NULL, NULL, NULL, NULL); ok(param1->hwnd != 0, "CreateWindowA failed!\n"); ret = SetEvent(param1->hevent); ok(ret, "SetEvent failed!\n"); while (GetMessageA(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } return 0; }
FORCEINLINE int WINAPI WinMain2(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; if (MyRegisterClass(hInstance) == 0) { MessageBoxA(NULL, "RegisterClassEx() failed", NULL, 64); return -1; } if (InitInstance(hInstance, nCmdShow) == FALSE) { MessageBoxA(NULL, "CreateWindowEx() failed", NULL, 64); return -2; } while (GetMessageA(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
/************************************************************************** * MMSYSTEM_MidiStream_MessageHandler [internal] */ static BOOL MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWINE_MIDI lpwm, LPMSG msg) { LPMIDIHDR lpMidiHdr; LPMIDIHDR* lpmh; LPBYTE lpData; BOOL paused = FALSE; for (;;) { switch (msg->message) { case WM_QUIT: return FALSE; case WINE_MSM_STOP: TRACE("STOP\n"); /* this is not quite what MS doc says... */ midiOutReset(lpMidiStrm->hDevice); /* empty list of already submitted buffers */ lpMidiHdr = lpMidiStrm->lpMidiHdr; lpMidiStrm->lpMidiHdr = NULL; while (lpMidiHdr) { LPMIDIHDR lphdr = lpMidiHdr; lpMidiHdr = lpMidiHdr->lpNext; lphdr->dwFlags |= MHDR_DONE; lphdr->dwFlags &= ~MHDR_INQUEUE; DriverCallback(lpwm->mod.dwCallback, lpMidiStrm->wFlags, (HDRVR)lpMidiStrm->hDevice, MM_MOM_DONE, lpwm->mod.dwInstance, (DWORD_PTR)lphdr, 0); } return TRUE; case WINE_MSM_RESUME: /* FIXME: send out cc64 0 (turn off sustain pedal) on every channel */ lpMidiStrm->dwStartTicks = GetTickCount() - lpMidiStrm->dwPositionMS; return TRUE; case WINE_MSM_PAUSE: /* FIXME: send out cc64 0 (turn off sustain pedal) on every channel */ paused = TRUE; break; /* FIXME(EPP): "I don't understand the content of the first MIDIHDR sent * by native mcimidi, it doesn't look like a correct one". * this trick allows us to throw it away... but I don't like it. * It looks like part of the file I'm trying to play and definitively looks * like raw midi content. * I'd really like to understand why native mcimidi sends it. Perhaps a bad * synchronization issue where native mcimidi is still processing raw MIDI * content before generating MIDIEVENTs ? * * 4c 04 89 3b 00 81 7c 99 3b 43 00 99 23 5e 04 89 L..;..|.;C..#^.. * 3b 00 00 89 23 00 7c 99 3b 45 00 99 28 62 04 89 ;...#.|.;E..(b.. * 3b 00 00 89 28 00 81 7c 99 3b 4e 00 99 23 5e 04 ;...(..|.;N..#^. * 89 3b 00 00 89 23 00 7c 99 3b 45 00 99 23 78 04 .;...#.|.;E..#x. * 89 3b 00 00 89 23 00 81 7c 99 3b 48 00 99 23 5e .;...#..|.;H..#^ * 04 89 3b 00 00 89 23 00 7c 99 3b 4e 00 99 28 62 ..;...#.|.;N..(b * 04 89 3b 00 00 89 28 00 81 7c 99 39 4c 00 99 23 ..;...(..|.9L..# * 5e 04 89 39 00 00 89 23 00 82 7c 99 3b 4c 00 99 ^..9...#..|.;L.. * 23 5e 04 89 3b 00 00 89 23 00 7c 99 3b 48 00 99 #^..;...#.|.;H.. * 28 62 04 89 3b 00 00 89 28 00 81 7c 99 3b 3f 04 (b..;...(..|.;?. * 89 3b 00 1c 99 23 5e 04 89 23 00 5c 99 3b 45 00 .;...#^..#.\.;E. * 99 23 78 04 89 3b 00 00 89 23 00 81 7c 99 3b 46 .#x..;...#..|.;F * 00 99 23 5e 04 89 3b 00 00 89 23 00 7c 99 3b 48 ..#^..;...#.|.;H * 00 99 28 62 04 89 3b 00 00 89 28 00 81 7c 99 3b ..(b..;...(..|.; * 46 00 99 23 5e 04 89 3b 00 00 89 23 00 7c 99 3b F..#^..;...#.|.; * 48 00 99 23 78 04 89 3b 00 00 89 23 00 81 7c 99 H..#x..;...#..|. * 3b 4c 00 99 23 5e 04 89 3b 00 00 89 23 00 7c 99 ;L..#^..;...#.|. */ case WINE_MSM_HEADER: /* sets initial tick count for first MIDIHDR */ if (!lpMidiStrm->dwStartTicks) lpMidiStrm->dwStartTicks = GetTickCount(); lpMidiHdr = (LPMIDIHDR)msg->lParam; lpData = (LPBYTE)lpMidiHdr->lpData; TRACE("Adding %s lpMidiHdr=%p [lpData=0x%p dwBytesRecorded=%u/%u dwFlags=0x%08x size=%lu]\n", (lpMidiHdr->dwFlags & MHDR_ISSTRM) ? "stream" : "regular", lpMidiHdr, lpData, lpMidiHdr->dwBytesRecorded, lpMidiHdr->dwBufferLength, lpMidiHdr->dwFlags, msg->wParam); #if 0 /* dumps content of lpMidiHdr->lpData * FIXME: there should be a debug routine somewhere that already does this */ for (dwToGo = 0; dwToGo < lpMidiHdr->dwBufferLength; dwToGo += 16) { DWORD i; BYTE ch; for (i = 0; i < min(16, lpMidiHdr->dwBufferLength - dwToGo); i++) printf("%02x ", lpData[dwToGo + i]); for (; i < 16; i++) printf(" "); for (i = 0; i < min(16, lpMidiHdr->dwBufferLength - dwToGo); i++) { ch = lpData[dwToGo + i]; printf("%c", (ch >= 0x20 && ch <= 0x7F) ? ch : '.'); } printf("\n"); } #endif if (((LPMIDIEVENT)lpData)->dwStreamID != 0 && ((LPMIDIEVENT)lpData)->dwStreamID != 0xFFFFFFFF && ((LPMIDIEVENT)lpData)->dwStreamID != (DWORD)lpMidiStrm) { FIXME("Dropping bad %s lpMidiHdr (streamID=%08x)\n", (lpMidiHdr->dwFlags & MHDR_ISSTRM) ? "stream" : "regular", ((LPMIDIEVENT)lpData)->dwStreamID); lpMidiHdr->dwFlags &= ~MHDR_INQUEUE; lpMidiHdr->dwFlags |= MHDR_DONE; DriverCallback(lpwm->mod.dwCallback, lpMidiStrm->wFlags, (HDRVR)lpMidiStrm->hDevice, MM_MOM_DONE, lpwm->mod.dwInstance, (DWORD_PTR)lpMidiHdr, 0); break; } lpMidiHdr->lpNext = 0; for (lpmh = &lpMidiStrm->lpMidiHdr; *lpmh; lpmh = &(*lpmh)->lpNext); *lpmh = lpMidiHdr; break; default: FIXME("Unknown message %d\n", msg->message); break; } if (!paused) return TRUE; GetMessageA(msg, 0, 0, 0); } }
/************************************************************************** * MMSYSTEM_MidiStream_Player [internal] */ static DWORD CALLBACK MMSYSTEM_MidiStream_Player(LPVOID pmt) { WINE_MIDIStream* lpMidiStrm = pmt; WINE_MIDI* lpwm; MSG msg; DWORD dwToGo; DWORD dwCurrTC; LPMIDIHDR lpMidiHdr; DWORD dwOffset; TRACE("(%p)!\n", lpMidiStrm); if (!lpMidiStrm || (lpwm = (LPWINE_MIDI)MMDRV_Get(lpMidiStrm->hDevice, MMDRV_MIDIOUT, FALSE)) == NULL) goto the_end; /* force thread's queue creation */ PeekMessageA(&msg, 0, 0, 0, PM_NOREMOVE); lpMidiStrm->dwStartTicks = 0; lpMidiStrm->dwPulses = 0; lpMidiStrm->lpMidiHdr = 0; /* midiStreamOpen is waiting for ack */ SetEvent(lpMidiStrm->hEvent); start_header: lpMidiHdr = lpMidiStrm->lpMidiHdr; if (!lpMidiHdr) { /* for first message, block until one arrives, then process all that are available */ GetMessageA(&msg, 0, 0, 0); do { if (!MMSYSTEM_MidiStream_MessageHandler(lpMidiStrm, lpwm, &msg)) goto the_end; } while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)); goto start_header; } dwOffset = 0; while (dwOffset + offsetof(MIDIEVENT,dwParms) <= lpMidiHdr->dwBytesRecorded) { LPMIDIEVENT me = (LPMIDIEVENT)(lpMidiHdr->lpData+dwOffset); /* do we have to wait ? */ if (me->dwDeltaTime) { lpMidiStrm->dwPositionMS += MMSYSTEM_MidiStream_Convert(lpMidiStrm, me->dwDeltaTime); lpMidiStrm->dwPulses += me->dwDeltaTime; dwToGo = lpMidiStrm->dwStartTicks + lpMidiStrm->dwPositionMS; TRACE("%d/%d/%d\n", dwToGo, GetTickCount(), me->dwDeltaTime); while ((dwCurrTC = GetTickCount()) < dwToGo) { if (MsgWaitForMultipleObjects(0, NULL, FALSE, dwToGo - dwCurrTC, QS_ALLINPUT) == WAIT_OBJECT_0) { /* got a message, handle it */ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) { if (!MMSYSTEM_MidiStream_MessageHandler(lpMidiStrm, lpwm, &msg)) goto the_end; /* is lpMidiHdr still current? */ if (lpMidiHdr != lpMidiStrm->lpMidiHdr) { goto start_header; } } } else { /* timeout, so me->dwDeltaTime is elapsed, can break the while loop */ break; } } } switch (MEVT_EVENTTYPE(me->dwEvent & ~MEVT_F_CALLBACK)) { case MEVT_COMMENT: FIXME("NIY: MEVT_COMMENT\n"); /* do nothing, skip bytes */ break; case MEVT_LONGMSG: midiOutLongMsg(lpMidiStrm->hDevice, lpMidiStrm->lpMidiHdr, MEVT_EVENTPARM(me->dwEvent)); break; case MEVT_NOP: break; case MEVT_SHORTMSG: midiOutShortMsg(lpMidiStrm->hDevice, MEVT_EVENTPARM(me->dwEvent)); break; case MEVT_TEMPO: lpMidiStrm->dwTempo = MEVT_EVENTPARM(me->dwEvent); break; case MEVT_VERSION: break; default: FIXME("Unknown MEVT (0x%02x)\n", MEVT_EVENTTYPE(me->dwEvent & ~MEVT_F_CALLBACK)); break; } if (me->dwEvent & MEVT_F_CALLBACK) { /* native fills dwOffset regardless of the cbMidiHdr size argument to midiStreamOut */ lpMidiHdr->dwOffset = dwOffset; DriverCallback(lpwm->mod.dwCallback, lpMidiStrm->wFlags, (HDRVR)lpMidiStrm->hDevice, MM_MOM_POSITIONCB, lpwm->mod.dwInstance, (LPARAM)lpMidiHdr, 0L); } dwOffset += offsetof(MIDIEVENT,dwParms); if (me->dwEvent & MEVT_F_LONG) dwOffset += (MEVT_EVENTPARM(me->dwEvent) + 3) & ~3; } /* done with this header */ lpMidiStrm->lpMidiHdr = lpMidiHdr->lpNext; lpMidiHdr->dwFlags |= MHDR_DONE; lpMidiHdr->dwFlags &= ~MHDR_INQUEUE; DriverCallback(lpwm->mod.dwCallback, lpMidiStrm->wFlags, (HDRVR)lpMidiStrm->hDevice, MM_MOM_DONE, lpwm->mod.dwInstance, (DWORD_PTR)lpMidiHdr, 0); goto start_header; the_end: TRACE("End of thread\n"); return 0; }
void __fastcall TMainForm::ToolButton6Click(TObject *Sender) { String FileName = "ExpMtr\\mtr.xml"; TStringList *list = new TStringList; TSendThread *Client; int mr; String err, s; char c[512]; MSG msg; if ((err = cVerifData()) != "") { ShowMessage(err); return; } LoginForm->UserEdit->Text = /*"sc910001" + */"sc" + IntToStr(School.SchoolCode); LoginForm->PasswordEdit->Text = "jXCHJQQo"; Client = new TSendThread(true); if (LoginForm->ShowModal() != mrOk) return; Client->User = LoginForm->UserEdit->Text; Client->Password = LoginForm->PasswordEdit->Text; Client->ms = new TMemoryStream; s = "SchoolCode=" + Client->User.SubString(3, 6); Client->ms->Write(s.c_str(), 512); // Client->ms->Write('\0', 1); Client->CommandID = "4"; Client->srv = GetServerIP(); Client->FreeOnTerminate = true; SendForm->Show(); SendForm->Memo1->Lines->Append("Соединение с сервером..."); while (PeekMessage(&msg, this->Handle, WM_USER, THRD_END, PM_REMOVE)); //инициализация и отчистка очереди Client->Resume(); GetMessageA(&msg, 0, THRD_READY, THRD_READY); while (!PeekMessageA(&msg, 0, THRD_END, THRD_END, PM_NOREMOVE)) { Application->ProcessMessages(); WaitMessage(); } if (!PostThreadMessageA(Client->ThreadID, MAIN_READY, 0, 0)) { Client->Suspend(); Client->Terminate(); ShowMessage("Непредвиденная ошибка при попытке отправить сообщение окну."); } if (msg.wParam) ShowMessage("WParam=" + IntToStr(msg.wParam)); if (msg.lParam) { SendForm->Close(); FillServerMatrixForm(ReceiveStream); ServerMatrixForm->Show(); } else { ShowMessage("Ошибка при получении списка матриц."); } }
static void test_Load(void) { static const WCHAR xmlview_xmlW[] = {'/','x','m','l','/','x','m','l','v','i','e','w','.','x','m','l',0}; static const WCHAR res[] = {'r','e','s',':','/','/',0}; WCHAR buf[1024]; IPersistMoniker *pers_mon; IConnectionPointContainer *cpc; IConnectionPoint *cp; IMoniker *mon; IBindCtx *bctx; IHTMLElement *elem; HRESULT hres; MSG msg; BSTR source; lstrcpyW(buf, res); GetModuleFileNameW(NULL, buf+lstrlenW(buf), (sizeof(buf)-sizeof(res))/sizeof(WCHAR)); lstrcatW(buf, xmlview_xmlW); if(!pCreateURLMoniker) { win_skip("CreateURLMoniker not available\n"); return; } hres = CoCreateInstance(&CLSID_XMLView, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER, &IID_IPersistMoniker, (void**)&pers_mon); if(FAILED(hres)) { win_skip("Failed to create XMLView instance\n"); return; } ok(hres == S_OK, "CoCreateInstance returned %x, expected S_OK\n", hres); hres = IPersistMoniker_QueryInterface(pers_mon, &IID_IHTMLDocument2, (void**)&html_doc); ok(hres == S_OK, "QueryInterface(HTMLDocument2) returned %x, expected S_OK\n", hres); hres = IPersistMoniker_QueryInterface(pers_mon, &IID_IConnectionPointContainer, (void**)&cpc); ok(hres == S_OK, "QueryInterface(IConnectionPointContainer) returned %x, expected S_OK\n", hres); hres = IConnectionPointContainer_FindConnectionPoint(cpc, &IID_IDispatch, &cp); ok(hres == S_OK, "FindConnectionPoint returned %x, expected S_OK\n", hres); hres = IConnectionPoint_Advise(cp, (IUnknown*)&HTMLEvents, NULL); ok(hres == S_OK, "Advise returned %x, expected S_OK\n", hres); IConnectionPoint_Release(cp); IConnectionPointContainer_Release(cpc); hres = CreateBindCtx(0, &bctx); ok(hres == S_OK, "CreateBindCtx returned %x, expected S_OK\n", hres); hres = pCreateURLMoniker(NULL, buf, &mon); ok(hres == S_OK, "CreateUrlMoniker returned %x, expected S_OK\n", hres); loaded = FALSE; hres = IPersistMoniker_Load(pers_mon, TRUE, mon, bctx, 0); ok(hres == S_OK, "Load returned %x, expected S_OK\n", hres); IBindCtx_Release(bctx); IMoniker_Release(mon); while(!loaded && GetMessageA(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessageA(&msg); } hres = IHTMLDocument2_get_body(html_doc, &elem); ok(hres == S_OK, "get_body returned %x, expected S_OK\n", hres); hres = IHTMLElement_get_outerHTML(elem, &source); ok(hres == S_OK, "get_outerHTML returned %x, expected S_OK\n", hres); ok(!html_src_compare(source, xmlview_html), "Incorrect HTML source: %s\n", wine_dbgstr_w(source)); IHTMLElement_Release(elem); SysFreeString(source); IHTMLDocument2_Release(html_doc); html_doc = NULL; IPersistMoniker_Release(pers_mon); }
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; int dwRefresh; LARGE_INTEGER LargeInt; if (InitInstance(hInstance) == FALSE) { return FALSE; } //Init random seed QueryPerformanceCounter(&LargeInt); srand(LargeInt.LowPart); //////////////////////////////////////// InitializeCriticalSection(&crsCurPiece); ClearBoard(); dwRefresh = GetTickCount(); PushRandomPiece(); DrawBoard(); UpdateScreen(); while (1) { if (PeekMessageA(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE) { if (GetMessageA(&msg, NULL, 0, 0) == FALSE) { return 0; } TranslateMessage(&msg); DispatchMessage(&msg); } else { if (GetTickCount() >= (DWORD)(dwRefresh + FallingPieceSpeed)) { DrawBoard(); UpdateScreen(); dwRefresh = GetTickCount(); EnterCriticalSection(&crsCurPiece); if (IsActionPossible(CurPiece.Piece, CurPiece.PosX, CurPiece.PosY + 1) == TRUE) { CurPiece.PosY++; } else { if (SaveCurPiece() == TRUE) { MessageBoxA(NULL, "Game Over!", NULL, MB_OK); ExitProcess(0); } DeleteLines(); PushRandomPiece(); } LeaveCriticalSection(&crsCurPiece); } Sleep(100); //give that CPU some rest } } return 0; }