日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

win32汇编系统函数简单小示例图解

發布時間:2025/4/14 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win32汇编系统函数简单小示例图解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 打開 計算器 窗口,最小化 計算器 窗口

從 Console Build All 菜單構建;?

?代碼;

.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.dataFindName db "計算器",0heName db "calc",0hhandle dd ?.code start:invoke FindWindow,NULL,addr FindNamemov handle,eax.if(handle != 0) ; 找到則最小化窗口invoke ShowWindow,handle,SW_SHOWMINIMIZED.else ; 沒有找到則打開進程invoke WinExec, addr eName ,SW_SHOW.endifinvoke ExitProcess,NULL end start

? ? 運行;第一次運行c3.exe,如果沒有打開 計算器,則會打開計算器;第二次運行c3.exe,則會最小化 計算器 窗口;

窗口顯示方式的定義如下;

ShowWindow 函數顯示方式(第二個參數)的定義:

預定義值?? ?等 效 值
?SW_HIDE?? ? 隱藏窗口,大小不變,激活狀態不變
?SW_MAXIMIZE?? ? 最大化窗口,顯示狀態不變,激活狀態不變
?SW_MINIMIZE?? ? 最小化窗口,顯示狀態不變,激活狀態不變
?SW_RESTORE?? ? 從最大化或最小化恢復正常大小,顯示狀態不變,激活狀態不變
?SW_SHOW?? ? 顯示并激活窗口,大小狀態不變
?SW_SHOWMAXIMIZED?? ? 顯示并激活窗口,以最大化顯示
?SW_SHOWMINIMIZED?? ? 顯示并激活窗口,以最小化顯示
?SW_SHOWMINNOACTIVE?? ? 顯示窗口并最小化,激活狀態不變
?SW_SHOWNA?? ? 顯示窗口,大小狀態不變,激活狀態不變
?SW_SHOWNOACTIVATE?? ? 顯示并從最大化或最小化恢復正常大小,激活狀態不變
?SW_SHOWNORMAL?? ? 顯示并激活窗口,恢復正常大小(初始化時用這個參數)

2 獲取當前目錄?

運行情況如下;

代碼;

.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.datastStartUp STARTUPINFO <?> .constszCaption db '當前目錄',0.code start:invoke GetStartupInfo,addr stStartUp;mov eax,stStartUp.lpDesktop;mov eax,stStartUp.lpTitle ; 當前軟件目錄invoke MessageBox, NULL, stStartUp.lpTitle, addr szCaption, MB_OKinvoke ExitProcess,NULL end start

3 獲取當前時間

代碼如下;

.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.datasystime SYSTEMTIME <?> .constszCaption db '當前時間',0.code start:invoke GetLocalTime,addr systime ; 獲取當前時間;mov ax,systime.wYear;mov bx,systime.wMonth;mov cx,systime.wDay;invoke SetLocalTime,addr systime ; 設置當前時間invoke MessageBox, NULL, systime.wMonth, addr szCaption, MB_OKinvoke ExitProcess,NULL end start

如前構建,構建成功;但是運行,不會顯示消息框;為什么?

看一下結構體的定義;

typedef struct _STARTUPINFO?
{?
? ? ?DWORD cb;
? ? ?PSTR lpReserved;
? ? ?PSTR lpDesktop;
? ? ?PSTR lpTitle;
? ? ?DWORD dwX;?
? ? ?DWORD dwY;

? ? ?DWORD dwXSize;
? ? ?DWORD dwYSize;
? ? ?DWORD dwXCountChars;
? ? ?DWORD dwYCountChars;?
? ? ?DWORD dwFillAttribute;?
? ? ?DWORD dwFlags;
? ? ?WORD wShowWindow;?
? ? ?WORD cbReserved2;
? ? ?PBYTE lpReserved2;
? ? ?HANDLE hStdInput;
? ? ?HANDLE hStdOutput;?
? ? ?HANDLE hStdError;?
} STARTUPINFO, *LPSTARTUPINFO;

typedef struct _SYSTEMTIME {?
? ? WORD wYear;?
? ? WORD wMonth;?
? ? WORD wDayOfWeek;?
? ? WORD wDay;?
? ? WORD wHour;?
? ? WORD wMinute;?
? ? WORD wSecond;?
? ? WORD wMilliseconds;?
} SYSTEMTIME, *PSYSTEMTIME;?

程序2獲取了以后可以MessageBox出來,因為使用的結構體的字段lpTitle的類型是PSTR,程序3獲取了以后,wMonth字段是WORD類型;下回再處理此問題;

4 獲取操作系統和系統版本信息

.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.dataversion OSVERSIONINFO <?>lpsystem SYSTEM_INFO <?> .constszCaption db '系統信息',0.code start:invoke GetSystemInfo,addr lpsystem;mov ax,lpsystem.wProcessorArchitectureinvoke MessageBox, NULL, lpsystem.wProcessorArchitecture, addr szCaption, MB_OKinvoke GetVersionEx,addr version;mov eax,version.dwBuildNumberinvoke MessageBox, NULL, version.dwBuildNumber, addr szCaption, MB_OKinvoke ExitProcess,NULL end start

問題和程序3一樣,不會顯示消息框;

如果把

invoke?? ?MessageBox, NULL, lpsystem.wProcessorArchitecture, addr szCaption, MB_OK

改為

invoke?? ?MessageBox, NULL, addr lpsystem.wProcessorArchitecture, addr szCaption, MB_OK

則顯示如下;

下回再處理此問題;

5 獲取所有驅動器

看一下代碼,addr lpDrives+4,?加4后顯示下一個;

.386 .model flat, stdcall option casemap :noneinclude S:\masm32\include\windows.inc include S:\masm32\include\user32.inc include S:\masm32\include\kernel32.inc include S:\masm32\include\gdi32.inc includelib S:\masm32\lib\user32.lib includelib S:\masm32\lib\kernel32.lib includelib S:\masm32\lib\gdi32.lib.datalpLength BYTE ?lpDrives DWORD 0 dup(1024) .constszCaption db '磁盤信息',0.code start:invoke GetLogicalDrives ; 獲取卷標invoke GetLogicalDriveStrings,addr lpLength,addr lpDrives ; 同上;lea esi,[lpDrives] ; 顯示C盤;lea esi,[lpDrives+4] ; 顯示D盤invoke MessageBox, NULL, addr lpDrives, addr szCaption, MB_OKinvoke MessageBox, NULL, addr lpDrives+4, addr szCaption, MB_OKinvoke ExitProcess,NULL end start

?

總結

以上是生活随笔為你收集整理的win32汇编系统函数简单小示例图解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。