STARTUPINFO結構

1.結構原型

typedef struct _STARTUPINFO {

  DWORD cb;

  LPTSTR lpReserved;

  LPTSTR lpDesktop;

  LPTSTR lpTitle;

  DWORD dwX;

  DWORD dwY;

  DWORD dwXSize;

  DWORD dwYSize;

  DWORD dwXCountChars;

  DWORD dwYCountChars;

  DWORD dwFillAttribute;

  DWORD dwFlags;

  WORD wShowWindow;

  WORD cbReserved2;

  LPBYTE lpReserved2;

  HANDLE hStdInput;

  HANDLE hStdOutput;

  HANDLE hStdError;

  } STARTUPINFO, *LPSTARTUPINFO;

2.參數說明

STARTUPINFO結構 該結構用于指定新進程的主窗口特性 

  DWORD cb; //包含STARTUPINFO結構中的字節數.如果Microsoft將來擴展該結構,它可用作版本控制手段.

  應用程序必須將cb初始化為sizeof(STARTUPINFO)

  PSTR lpReserved; //保留。必須初始化為N U L L

  PSTR lpDesktop; //用于標識啟動應用程序所在的桌面的名字。如果該桌面存在,新進程便與指定的桌面相關聯。

  如果桌面不存在,便創建一個帶有默認屬性的桌面,并使用為新進程指定的名字。

  如果lpDesktop是NULL(這是最常見的情況),那么該進程將與當前桌面相關聯

  PSTR lpTitle; //用于設定控制臺窗口的名稱。如果l p Ti t l e 是N U L L ,則可執行文件的名字將用作窗口名

  DWORD dwX; //用于設定應用程序窗口在屏幕上應該放置的位置的x 和y 坐標(以像素為單位)。

  DWORD dwY; 只有當子進程用CW_USEDEFAULT作為CreateWindow的x參數來創建它的第一個重疊窗口時,

  才使用這兩個坐標。若是創建控制臺窗口的應用程序,這些成員用于指明控制臺窗口的左上角

  DWORD dwXSize; //用于設定應用程序窗口的寬度和長度(以像素為單位)只有dwYsize

  DWORD dwYSize; 當子進程將C W _ U S E D E FA U LT 用作C r e a t e Wi n d o w 的

  n Wi d t h參數來創建它的第一個重疊窗口時,才使用這些值。

  若是創建控制臺窗口的應用程序,這些成員將用于指明控制臺窗口的寬度

  DWORD dwXCountChars; //用于設定子應用程序的控制臺窗口的寬度和高度(以字符為單位)

  DWORD dwYCountChars;

  DWORD dwFillAttribute; //用于設定子應用程序的控制臺窗口使用的文本和背景顏色

  DWORD dwFlags; //請參見下一段和表4 - 7 的說明

  WORD wShowWindow; //用于設定如果子應用程序初次調用的S h o w Wi n d o w 將S W _ S H O W D E FA U LT 作為

  n C m d S h o w 參數傳遞時,該應用程序的第一個重疊窗口應該如何出現。

  本成員可以是通常用于Show Wi n d o w 函數的任何一個S W _ *標識符

  WORD cbReserved2; //保留。必須被初始化為0

  PBYTE lpReserved2; //保留。必須被初始化為N U L L

  HANDLE hStdInput; //用于設定供控制臺輸入和輸出用的緩存的句柄。

  按照默認設置,h S t d I n p u t 用于標識鍵盤緩存,

  h S t d O u t p u t 和h S t d E r r o r用于標識控制臺窗口的緩存

  HANDLE hStdOutput;

  HANDLE hStdError;

  當Wi n d o w s 創建新進程時,它將使用該結構的有關成員。大多數應用程序將要求生成的應用程序僅僅使用默認值。至少應該將該結構中的所有成員初始化為零,然后將c b 成員設置為該結構的大小:

  STARTUPINFO si = { sizeof(si) };

  CreateProcess(...,&si,...);

  表4-7 dwFlags 使用標志及含義

  標志 含義

  STARTF_USESIZE // 使用d w X S i z e 和d w Y S i z e 成員

  STARTF_USESHOWWINDOW //使用w S h o w Wi n d o w 成員

  STARTF_USEPOSITION //使用d w X 和d w Y 成員

  STARTF_USECOUNTCHARS //使用d w X C o u n t C h a r s 和dwYCount Chars 成員

  STARTF_USEFILLATTRIBUTE //使用d w F i l l A t t r i b u t e 成員

  STARTF_USESTDHANDLES //使用h S t d I n p u t 、h S t d O u t p u t 和h S t d E r r o r 成員

  STARTF_RUN_FULLSCREEN //強制在x 8 6 計算機上運行的控制臺應用程序以全屏幕方式啟動運行

  另外還有兩個標志,即STARTF_FORCEONFEEDBACK 和STARTF_+FORCEOFFF -EEDBACK ,當啟動一個新進程時,它們可以用來控制鼠標的光標。由于Windows支持真正的多任務搶占式運行方式,因此可以啟動一個應用程序,然后在進程初始化時,使用另一個程序。為了向用戶提供直觀的反饋信息,C r e a t e P r o c e s s 能夠臨時將系統的箭頭光標改為一個新光標,即沙漏箭頭光標:

  該光標表示可以等待出現某種情況,也可以繼續使用系統。當啟動另一個進程時,CreateProcess函數使你能夠更好地控制光標。當設定STARTF_FORCEONFEEDBACK標志時,C r e a t e P r o c e s s 并不將光標改為沙漏。

  STARTF_FORCEONFEEDBACK可使CreateProcess能夠監控新進程的初始化,并可根據結果來改變光標。當使用該標志來調用CreateProcess時,光標改為沙漏。過2 s 后,如果新進程沒有調用G U I ,CreateProcess 將光標恢復為箭頭。

  如果該進程在2 s 內調用了GUI ,CreateProcess將等待該應用程序顯示一個窗口。這必須在進程調用G U I 后5 s內發生。如果沒有顯示窗口,CreateProcess就會恢復原來的光標。如果顯示了一個窗口,CreateProcess將使沙漏光標繼續保留5s 。如果某個時候該應用程序調用了G e t M e s s a g e 函數,指明它完成了初始化,那么C r e a t e P r o ce s s 就會立即恢復原來的光標,并且停止監控新進程。

  在結束這一節內容的介紹之前,我想講一講S TA RT U P I N F O 的w S h o w Wi n d o w成員。你將該成員初始化為傳遞給( w ) Wi n M a i n 的最后一個參數n C m d S h o w的值。該成員顯示你想要傳遞給新進程的( w ) Wi n M a i n 函數的最后一個參數n C m d S h o w的值。它是可以傳遞給S h o w Wi n d o w 函數的標識符之一。通常,n C m d S h o w 的值既可以是S W _ SH O W N O R M A L ,也可以是SW_ SHOWMINNOACTIVE 。但是,它有時可以是S W _ S H O W D EFA U LT 。

  當在E x p l o r e r 中啟動一個應用程序時,該應用程序的( w ) Wi n M a i n 函數被調用,而S W _ SH O W N O R M A L 則作為n C m d S h o w參數來傳遞。如果為該應用程序創建了一個快捷方式,可以使用快捷方式的屬性頁來告訴系統,應用程序的窗口最初應該如何顯示。圖4 - 3 顯示了運行No t e p a d 的快捷方式的屬性頁。注意,使用R u n 選項的組合框,就能夠設定如何顯示N o t e p a d 的窗口。

  當使用E x p l o r e r 來啟動該快捷方式時,E x p l o r e r 會正確地準備S TA RT U P I N FO 結構并調用C r e a t e P r o c e s s 。這時N o t e p a d 開始運行,并且為n C m d S h ow 參數將S W _ S H O W M I N N O A C T I V E傳遞給它的( w ) Wi n M a i n 函數。

  運用這樣的方法,用戶能夠很容易地啟動一個應用程序,其主窗口可以用正常狀態、最小或最大狀態進行顯示。

  最后,應用程序可以調用下面的函數,以便獲取由父進程初始化的S TA RT U P I N F O 結構的拷貝。子進程可以查看該結構,并根據該結構的成員的值來改變它的行為特性。

  VOID GetStartupInfo(LPSTARTUPINFO pStartupInfo);

  注意雖然Wi n d o w s 文檔沒有明確地說明,但是在調用G e t S t a r t I n f o 函數之前,必須像下面這樣對該結構的c b 成員進行初始化:

  STARTUPINFO si = { sizeof(si) };

  GetStartupInfo(&si);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374984.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring聲明式事務示例

事務是具有ACID (原子的,一致的,隔離的和持久的)屬性的工作單元。 原子意味著所有更改都發生或什么都沒有發生。 如果從一個帳戶借錢并貸記到另一個帳戶,則交易將確保借記和貸項均已完成或均未完成。 一致表示更改使數…

路徑 (Path)–nodejs

本模塊包含一套用于處理和轉換文件路徑的工具集。幾乎所有的方法只做字符串變換, 不會調用文件系統檢查路徑是否有效。 通過 require(path) 來加載此模塊。以下是本模塊所提供的方法: path.normalize(p) 規范化字符串路徑,注意 .. 和 . 部分 …

OllyDBG反匯編快速找到程序入口一點分析

出處:http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html 先聲明下:這個和脫殼沒關系,不是找殼里面的程序入口哦,只是程序本身的入口,個別朋友不要誤會哈。其實這個應該是基礎,但我經常找…

簡單的Twitter:Heroku上的Play框架,AJAX,CRUD

因此,重大的公告發布了– Heroku開始為Play Framework應用程序提供本機支持! 如果您還沒有聽說過,請在Heroku的博客上查看Jesper Joergensen的帖子 。 因此,對于演示,我將建立一個非常基本的Twitter副本; 它…

Cron表達式

CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日歷的概念,而非SimpleTrigger完全指定的時間間隔,復發的發射工作的時間表。CronTrigger,你可以指定觸發的時間表如“每星期五中午”,或“每個工作日…

深入理解JavaScript學習筆記(3)_全面解析Module模式

簡介 Module模式是JavaScript編程中一個非常通用的模式,一般情況下,大家都知道基本用法,本文嘗試著給大家更多該模式的高級使用方式。 首先我們來看看Module模式的基本特征: 模塊化,可重用封裝了變量和function&#x…

匯編----乘指令: MUL、IMUL

MUL: 無符號乘 ;影響 OF、CF 標志位;指令格式:;MUL r/m ;參數是乘數;如果參數是 r8/m8, 將把 AL 做乘數, 結果放在 AX;如果參數是 r16/m16, 將把 AX 做乘數, 結果放在 EAX;如果參數是 r32/m32, 將把 EAX 做乘數, 結果放在 EDX:EAX IMUL: 有符號乘 ;影響 OF、CF 標志位;…

Google App Engine Java功能和命名空間API

功能API 使用Capabilities API,您的應用程序可以檢測特定API功能的停機和計劃停機時間。 您可以使用此API來檢測應用程序何時不可用,然后繞過它來減少應用程序的停機時間。 我們該如何處理,這是個折衷方案? 1.優雅:創…

破解key file時經常用到的幾個API函數及其用法

CreateFile函數 ================================================================================== CreateFile: Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, …

PHP計劃任務之關閉瀏覽器后仍然繼續執行的函數

函數名稱:ignore_user_abort 本函數配置或取得使用端連接中斷后,PHP 程序是否仍繼續執行。默認值為中斷連接后就停止執行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 選項就是配置處。本功能在 PHP 3.0.7 版之后才開始提供。 官方說明…

node--更新數據庫問題

昨天測試blog的comment功能,在新增comment相關的代碼之后,重啟應用,出現Cannot call method forEach of undefined 。反復核對代碼,都沒發現異常,最后將數據庫文件刪除之后,再重啟數據庫,一切正…

U盤做完啟動盤,如何恢復原始容量

(1)右擊“我的電腦”,選擇“管理”選項,之后選擇“磁盤管理”,查看自己U盤的索引,如:Disk 1(2)在運行窗口,輸入cmd,回車,出現Dos運行環…

GWT Spring和Hibernate進入數據網格世界

利用Infinispan數據網格的功能最大化Hibernate性能。 一個GWT , Spring , JPA , Hibernate , Infinispan集成教程。 在本教程中,我們將討論如何將Infinispan用作Hibernate二級緩存提供程序。 Infinispan是JBoss緩存的…

記對一個key file crackme的破解

crackme下載地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

第八章 CTE 遞歸 及 分組匯總 高級部分(多維數據集)

UNION 等集合操作符:UNION 等以第一個 SELECT 的 列明 作為 整個結果集的列明,整個結果集 唯一認可的 唯一邏輯處理階段 是 ORDER BY 這個意思是說 只有 ORDER BY 是對整個結果集作用的,其它都操作都作用在 UINON 兩側的 子集合中。EXCEPT 操…

Java Code Geeks Andygene Web原型

大家好, 我們很高興地宣布,一組Maven原型的第一個版本已經發布!!! 該集合的目的是提供可以滿足各種開發需求的項目模板。 您可以在本文末尾找到JCG路線圖。 該第一個發行版旨在提供項目模板-Web應用程序的體系結構。 …

關于如何用od反匯編win32 控制臺程序

*********************************************************** 如何用od反匯編win32 控制臺程序(類似dos程序)呢?*********************************************************** 注:od是用來調試win32程序的 1.反編譯win32 控制臺程序&…

Chrome/Chromium HTML5 video 視頻播放硬件加速

Chromium站點上有個大致的框圖。描寫敘述了Chromium的video在各個平臺 - 包含Android - 上是怎樣使用硬件資源來做視頻編解碼加速的: 而依據Android Kitkat上的Chromium代碼分析,HTML5 video播放硬件加速,終于是使用MediaCodec.java來利用本地…

.net mvc結合微軟提供的FormsAuthenticationTicket登陸

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…