hInstance HINSTANCE?

CommandLine LPSTR?

.code

include wmi. asm

include strings. asm

start:

       invoke GetModuleHandle, NULL

       mov  hInstance, eax

       invoke GetCommandLine

       mov CommandLine, eax

  call WMIProc

  invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT

       invoke ExitProcess, eax

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD

       LOCAL wc:WNDCLASSEX

       LOCAL msg:MSG

       LOCAL hwnd:HWND

       mov  wc. cbSize, SIZEOF WNDCLASSEX

       mov  wc. style, CS_HREDRAW or CS_VREDRAW

       mov  wc. lpfnWndProc, OFFSET WndProc

       mov  wc. cbClsExtra, NULL

       mov  wc. cbWndExtra, NULL

       push  hInst

       pop  wc. hInstance

       mov  wc. hbrBackground, COLOR_WINDOW+1

       mov  wc. lpszMenuName, NULL

       mov  wc. lpszClassName, OFFSET ClassName

       invoke LoadIcon, NULL, IDI_APPLICATION

       mov  wc. hIcon, eax

Продолжение Приложения А

       mov  wc. hIconSm,0

       invoke LoadCursor, NULL, IDC_ARROW

НЕ нашли? Не то? Что вы ищете?

       mov  wc. hCursor, eax

       invoke RegisterClassEx, addr wc

       INVOKE CreateWindowEx, NULL, ADDR ClassName, ADDR AppName,\

  WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,\

  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL,\

  hInst, NULL

       mov  hwnd, eax

       INVOKE ShowWindow, hwnd, SW_SHOWNORMAL

       INVOKE UpdateWindow, hwnd

       .WHILE TRUE

  INVOKE GetMessage, ADDR msg, NULL,0,0

  .BREAK. IF (!eax)

  INVOKE TranslateMessage, ADDR msg

  INVOKE DispatchMessage, ADDR msg

       .ENDW

       mov  eax, msg. wParam

       ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

       LOCAL hdc:HDC

       LOCAL ps:PAINTSTRUCT

       LOCAL rect:RECT

       .IF uMsg==WM_DESTROY

               invoke PostQuitMessage, NULL

       .ELSEIF uMsg==WM_PAINT

               invoke BeginPaint, hWnd, ADDR ps

               mov  hdc, eax

  invoke GetClientRect, hWnd, ADDR rect

  invoke _lstrcat, ADDR bufStr, ADDR processorItemStr

  invoke _lstrcat, ADDR bufStr, ADDR processorNameStr

  invoke _lstrcat, ADDR bufStr, ADDR processorNameResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR processorMaxClockSpeedStr

  invoke _lstrcat, ADDR bufStr, ADDR processorMaxClockSpeedResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR processorNumOfCoresStr

Продолжение Приложения А

  invoke _lstrcat, ADDR bufStr, ADDR processorNumberOfCoresResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR processorIdStr

  invoke _lstrcat, ADDR bufStr, ADDR processorIdResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR reLine 

  invoke _lstrcat, ADDR bufStr, ADDR videoItemStr

  invoke _lstrcat, ADDR bufStr, ADDR videoNameStr

  invoke _lstrcat, ADDR bufStr, ADDR videoNameResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR videoProcessorStr

  invoke _lstrcat, ADDR bufStr, ADDR videoProcessorResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR videoMemSizeStr

  invoke _lstrcat, ADDR bufStr, ADDR videoMemSizeResult

  ;invoke _lstrcat, ADDR bufStr, ADDR reLine

  ;invoke _lstrcat, ADDR bufStr, ADDR reLine

  ;invoke _lstrcat, ADDR bufStr, ADDR motherboardItemStr

  ;invoke _lstrcat, ADDR bufStr, ADDR motherboardNameStr

  ;invoke _lstrcat, ADDR bufStr, ADDR motherboardNameResult

  ;invoke _lstrcat, ADDR bufStr, ADDR reLine

  ;invoke _lstrcat, ADDR bufStr, ADDR reLine

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryItemStr

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryNameStr

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryNameResult

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryModelStr

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryModelResult

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryManufacturerStr

  ;invoke _lstrcat, ADDR bufStr, ADDR physicalMemoryManufacturerResul

  invoke _lstrcat, ADDR bufStr, ADDR reLine 

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR diskDriveItemStr

  invoke _lstrcat, ADDR bufStr, ADDR diskDriveNameStr

  invoke _lstrcat, ADDR bufStr, ADDR diskDriveNameResult

  ;invoke _lstrcat, ADDR bufStr, ADDR reLine

Окончание Приложения А

  ;invoke _lstrcat, ADDR bufStr, ADDR diskDriveMemSizeStr

  ;invoke _lstrcat, ADDR bufStr, ADDR diskDriveMemSizeResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine 

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR networkAdapterItemStr

  invoke _lstrcat, ADDR bufStr, ADDR networkAdapterNameStr

  invoke _lstrcat, ADDR bufStr, ADDR networkAdapterNameResult

  invoke _lstrcat, ADDR bufStr, ADDR reLine 

  invoke _lstrcat, ADDR bufStr, ADDR reLine

  invoke _lstrcat, ADDR bufStr, ADDR cdROMItemStr

  invoke _lstrcat, ADDR bufStr, ADDR cdROMNameStr

  invoke _lstrcat, ADDR bufStr, ADDR cdROMNameResult

  invoke DrawText, hdc, ADDR bufStr,-1, ADDR rect, DT_LEFT or DT_TOP

               invoke EndPaint, hWnd, ADDR ps

       .ELSE

               invoke DefWindowProc, hWnd, uMsg, wParam, lParam

               ret

       .ENDIF

       xor  eax, eax

       ret

WndProc endp

end start

ПРИЛОЖЕНИЕ Б

(обязательное)

«Код функции WMIProc »

getProcessorInfo proc

  invoke  SysAllocString, offset processorQuery

  mov  query, eax  ;Into BSTR

       mov        edx,  services

       mov        eax, [edx].IWbemServices. lpVtbl

  invoke  [eax].IWbemServicesVtbl. ExecQuery, edx, _language, query, 0, NULL, offset results

  ;--------------------------------------------------

.if        results!=0

       mov        result,0

       mov        returnedCount,0

       C100:

       mov        edx, results

       mov        eax, [edx].IEnumWbemClassObject. lpVtbl ;call eax,[eax]

       invoke  [eax].IEnumWbemClassObjectVtbl. Next, edx,-1, 1,offset result, offset returnedCount

  ;--------------------------------------------------

  ;**************************************************************************************

  .if  eax==0

  mov        edx, result

  mov        eax, [edx].IWbemClassObject. lpVtbl

  invoke  [eax].IWbemClassObjectVtbl. Get, edx, offset nameQuery, 0,offset _name, 0, 0

  ;----------------------------------------------------

  mov esi, offset _name  ;<==Note the _name!

  mov eax,[esi].VARIANT. bstrVal  ;///Key!!VARIANT

  invoke WideCharToMultiByte, CP_ACP, WC_COMPOSITECHECK, eax,-1,offset processorNameResult, processorNameSizeResult,0,0

Продолжение Приложения Б

  mov        edx, result

  mov        eax, [edx].IWbemClassObject. lpVtbl

  invoke  [eax].IWbemClassObjectVtbl. Get, edx, offset processorMaxClockSpeedQuery, 0, offset processorMaxClockSpeedResult, 0, 0

  ;----------------------------------------------------

  mov  esi, offset processorMaxClockSpeedResult  ;<==Note the speed!

  mov  eax,[esi].VARIANT. ulVal  ;///Key!!VARIANT, eax=MaxprocessorClockSpeedResult

  invoke        wsprintf, offset processorMaxClockSpeedResult, offset fmt, eax 

  mov        edx, result

  mov        eax, [edx].IWbemClassObject. lpVtbl

  invoke  [eax].IWbemClassObjectVtbl. Get, edx, offset processorNumCoresQuery, 0, offset processorNumberOfCoresResult, 0, 0

  ;----------------------------------------------------

  mov  esi, offset processorNumberOfCoresResult  ;<==Note the speed!

  mov  eax,[esi].VARIANT. ulVal  ;///Key!!VARIANT, eax=MaxprocessorClockSpeedResult

  invoke        wsprintf, offset processorNumberOfCoresResult, offset fmt, eax 

  mov        edx, result

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6