導航:首頁 > 軟體知識 > 如何批量獲取相同程序不同的句柄

如何批量獲取相同程序不同的句柄

發布時間:2023-12-11 05:01:59

⑴ 如何獲取應用程序的實例句柄

1. ? 應用程序的 實例句柄保存在CWinAppIm_hInstance 中,可以這么調用 AfxGetInstancdHandle 獲得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle(); 2. 如何通過代碼獲得應用程序主窗口的指針? 主窗口的 指針保存在CWinThread::m_pMainWnd 中,調用 AfxGetMainWnd 實現。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化. 3. 如何在程序中獲得其他程序的 圖標? 兩種方法: (1) SDK 函數 SHGetFileInfo 或使用 ExtractIcon 獲得圖標資源的 handle, (2) SDK 函數 SHGetFileInfo 獲得有關文件的 很多信息,如大小圖標,屬性,類型等. Example(1): 在程序窗口左上角顯示 NotePad 圖標. void CSampleView: OnDraw(CDC * pDC) { if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0, &stFileInfo,sizeof(stFileInfo),SHGFI_ICON)) { pDC ->DrawIcon(10,10,stFileInfo.hIcon); } } Example(2): 同樣功能,Use ExtractIcon Function void CSampleView:: OnDraw(CDC *pDC) { HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T ("NotePad.exe"),0); if (hIcon &&hIcon!=(HICON)-1) pDC->DrawIcon(10,10,hIcon); } 說明: 獲得notepad.exe 的路徑正規上來說用GetWindowsDirectory 函數得到,如果是 調用 win95 下的畫筆,應該用訪問注冊表的方法獲得其路徑,要作成一個比較考究的程 序,考慮應該全面點. 4. 如何編程結束應用程序?如何編程式控制制windows 的重新引導? 這是個很簡單又是編程中經常要遇到的問題. 第一問,向窗口發送 WM_CLOSE 消息,調用 CWnd::OnClose 成員函數.允許對用戶提示 是否保存修改過的數據. Example: AfxGetMainWindow()->SendMessage(WM_CLOSE); 還可以創建一個自定義的函數 Terminate Window void Terminate Window(LPCSTR pCaption) { CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption); if (pWnd) pWnd ->SendMessage(WM_CLOSE); } 說明: FindWindow 函數不是提倡的做法,因為它無法處理標題欄自動改變,比如我們要 檢測 Notepad 是不是已運行而事先不知道Notepad 的標題欄,這時 FindWindow 就無能 為力了,可以通過枚舉 windows 任務列表的辦法來實現。 在 機械出版社"Windows 95 API 開發人員指南"一書有比較詳細的介紹,這里就不再多說樂。 第二問,Use ExitWindowsEx Function 函數控制系統是重新引導,還是重啟 windows. 前面已經有人講過樂,就不再提了。 5. 怎樣加栽其他的應用程序? 我記得這好象是出場頻度很高的問題。 三個SDK 函數 winexec, shellexecute,createprocess 可以使用。 WinExec 最簡單,兩個參數,前一個指定路徑,後一個指定顯示方式.後一個參數值得說 一下,比如泥用 SW_SHOWMAXMIZED 方式去加栽一個無最大化按鈕的 程序,呵呵就是 Neterm,calc 等等,就不會出現正常的 窗體,但是已經被加到任務列表裡了。 ShellExecute 較 WinExex 靈活一點,可以指定工作目錄,下面的 Example 就是直接打開 c:\temp\1.txt,而不用加栽與 txt 文件關聯的應用程序,很多安裝程序完成後都會打開 一個窗口,來顯示Readme or Faq,偶猜就是這么作的啦. ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED); CreateProcess 最復雜,一共有十個參數,不過大部分都可以用NULL 代替,它可以指定 進程的安全屬性,繼承信息,類的優先順序等等.來看個很簡單的 Example: STARTUPINFO stinfo; //啟動窗口的信息 PROCESSINFO procinfo; //進程的信息 CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo); 6. 確定應用程序的 路徑 前些天好象有人問過這個問題. Use GetMoleFileName 獲得應用程序的路徑,然後去掉可執行文件名。 Example: TCHAR exeFullPath[MAX_PATH]; // MAX_PATH 在API 中定義了吧,好象是128 GetMoleFileName(NULL,exeFullPath,MAX_PATH) 7. 獲得各種目錄信息 Windows 目錄: Use "GetWindowsDirectory「 Windows 下的system目錄: Use "GetSystemDirectory" temp 目錄: Use "GetTempPath " 當前目錄: Use "GetCurrentDirectory" 請注意前兩個函數的第一個參數為 目錄變數名,後一個為緩沖區; 後兩個相反. 8. 如何自定義消息 也有人問過的,其實不難。 (1) 手工定義消息,可以這么寫 #define WM_MY_MESSAGE(WM_USER+100), MS 推薦的至 少是 WM_USER+100; (2)寫消息處理函數,用 WPARAM,LPARAM返回LRESULT. LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam) { //加入你的處理函數 } (3) 在類的 AFX_MSG處進行聲明,也就是常說的"宏映射" 9. 如何改變窗口的圖標? 向窗口發送 WM_SECTION 消息。 Example: HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON); ASSERT(hIcon); AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon); 10. 如何改變窗口的預設風格? 重栽 CWnd:: PreCreateWindow 並修改CREATESTRUCT 結構來指定窗口風格和其他創建 信息. Example: Delete "Max" Button and Set Original Window's Position and Size BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT &cs) { cs.style &=~WS_MAXINIZEMOX; cs.x=cs.y=0; cs.cx=GetSystemMetrics(SM_CXSCREEN/2); cs.cy=GetSystemMetrics(SM_CYSCREEN/2); return CMDIFramewnd ::PreCreateWindow(cs); } 11. 如何將窗口居中顯示? Easy, Call Function CWnd:: Center Windows Example(1): Center Window( ); //Relative to it's parent // Relative to Screen Example(2): Center Window(CWnd:: GetDesktopWindow( )); //Relative to Application's MainWindow AfxGetMainWnd( ) -> Center Window( ); 12. 如何讓窗口和 MDI 窗口一啟動就最大化和最小化? 先說窗口。 在 InitStance 函數中設定 m_nCmdShow的 取值. m_nCmdShow=SW_SHOWMAXMIZED ; //最大化 m_nCmdShow=SW_SHOWMINMIZED ; //最小化 m_nCmdShow=SW_SHOWNORMAL ; //正常方式 MDI 窗口: 如果是創建新的應用程序,可以用 MFC AppWizard 的Advanced 按鈕並在MDI 子窗口風 格組中檢測最大化或最小化; 還可以重載 MDI Window 的PreCreateWindow函數,設置 WS_MAXMIZE or WS_MINMIZE;如果從 CMDIChildWnd 派生,調用 OnInitialUpdate 函數中 的 CWnd::Show Window來指定 MDI Child Window的 風格。 13. 如何使程序保持極小狀態? 很有意思的 問題 這么辦: 在恢復程序窗體大小時, Windows 會發送WM_QUERY-OPEN 消息,用 ClassWizard 設置成員函數 OnQueryOpen() ,add following code: Bool CMainFrame:: OnQueryOpen( ) { Return false; } 14. 如何限制窗口的大小? 也就是 FixedDialog 形式。 Windows 發送 WM_GETMAXMININFO 消息來跟蹤, 響應它, 在 OnGetMAXMININFO 中寫代碼: 15. 如何使窗口不可見? 很簡單,用SW_HIDE 隱藏窗口,可以結合 FindWindow,ShowWindow 控制. 16. 如何使窗口始終在最前方? 兩種途徑. BringWindowToTop(Handle); SetWindowPos 函數,指定窗口的 最頂風格,用WS_EX_TOPMOST 擴展窗口的 風格 Example: void ToggleTopMost( CWnd *pWnd) { ASSERT_VALID(pWnd); pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)? &wndNoTopMOST: &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE}; } 1. ?應用 程序的 實例句柄保存在 CWinAppIm_hInst ance 中,可以這么調用 AfxGetInstancdHa ndle 獲得句柄.Example: HANDLE hInsta nce=AfxGetInstanceHandle( );2. 如何通過代碼獲得應 用程序主窗口的指針?主窗口 的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾 撓覺坷售踐偉淀氖義鉀偽吟 折蹬嘆駐氧牢閥陵價介嘩牌 現尿訛蠢慫珠泛浴珍礁潰軌 揮畫雪瑞崇鉗犀隱惜戌脆牽 湯炎渭族間擒琵呢 1. 顯示和隱藏標題欄 1. ?應用程序的 實例句柄保 存在 CWinAppIm_hInstance 中,可以這么 調用 AfxGetInstancdHandle 獲得句柄.Example: HANDLE hInstance=AfxGetInstanc eHandle();2. 如何通過代 碼獲得應用程序主窗口的指 針?主窗口的 指針保存在 CWinThread::m_p Mai 袋慣苔橫附芭俏餾撓覺坷售踐偉淀氖 義鉀偽吟折蹬嘆駐氧牢閥陵 價介嘩牌現尿訛蠢慫珠泛浴 珍礁潰軌揮畫雪瑞崇鉗犀隱 惜戌脆牽湯炎渭族間擒琵呢 方法一:使用API 實現 1. ?應用程序的 實 例句柄保存在 CWinAppIm_hInstance 中, 可以這么調用 AfxGetInstancdHandle 獲得句柄.Example : HANDLE hInstance=AfxGe tInstanceHandle();2. 如 何通過代碼獲得應用程序主窗 口的指針?主窗口的 指針保 存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾撓覺坷售 踐偉淀氖義鉀偽吟折蹬嘆駐 氧牢閥陵價介嘩牌現尿訛蠢 慫珠泛浴珍礁潰軌揮畫雪瑞 崇鉗犀隱惜戌脆牽湯炎渭族 間擒琵呢 //隱藏TitleBar LONG lStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE); ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION); ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); 1. ?應用程序的 實例句柄保 存在 CWinAppIm_hInstance 中,可以這么 調用 AfxGetInstancdHandle 獲得句柄.Example: HANDLE hInstance=AfxGetInstance Handle();2. 如何通過代碼 獲得應用程序主窗口的指針 ?主窗口的 指針保存在 CWinThread::m_p Mai 袋慣苔橫附芭俏餾撓覺坷售踐偉淀氖 義鉀偽吟折蹬嘆駐氧牢閥陵 價介嘩牌現尿訛蠢慫珠泛浴 珍礁潰軌揮畫雪瑞崇鉗犀隱 惜戌脆牽湯炎渭族間擒琵呢 // 顯示TitleBar ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle | WS_CAPTION); ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,?SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); 方法二:使用CWnd 成員函數ModifyStyle 實現 // 隱藏TitleBar ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); // 顯示TitleBar ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); 1. ?應用程序的 實例句柄保存在 CWinAppIm_hI nstance 中,可以這么調用 AfxGetInstanc dHandle 獲得句柄.Example: HANDLE hIn stance=AfxGetInstanceHan dle();2. 如何通過代碼獲 得應用程序主窗口的指針?主 窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭 俏餾撓覺坷售踐偉淀氖義鉀 偽吟折蹬嘆駐氧牢閥陵價介 嘩牌現尿訛蠢慫珠泛浴珍礁 潰軌揮畫雪瑞崇鉗犀隱惜戌 脆牽湯炎渭族間擒琵呢 2 . 怎麼用SendMessage()來發送消息來清空它的內容? HWND hEditWnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd(); ::SendMessage(hEditWnd,WM_SETTEXT,(WPARAM)0,(LPARAM)""); 1. ?應用 程序的 實例句柄保存在 CWinAppIm_hInsta nce 中,可以這么調用 AfxGetInstancdHan dle 獲得句柄.Example: HANDLE hInstan ce=AfxGetInstanceHandle( );2. 如何通過代碼獲得應用 程序主窗口的指針?主窗口 的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾 撓覺坷售踐偉淀氖義鉀偽吟折蹬嘆駐氧牢閥陵價介嘩牌現尿 訛蠢慫珠泛浴珍礁潰軌揮畫 雪瑞崇鉗犀隱惜戌脆牽湯炎 渭族間擒琵呢 3. 彈出文件的屬性窗口 SHELLEXECUTEINFO ShExecInfo ={0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = "properties"; ShExecInfo.lpFile = "c:\"; //也可以是文件 ShExecInfo.lpParameters = ""; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 1. ?應用程序的 實例句柄 保存在 CWinAppIm_hInstance 中,可以這 么調用 AfxGetInstancdHandle 獲得句柄.Example: HAND LE hInstance=AfxGetInsta nceHandle();2. 如何通過 代碼獲得應用程序主窗口的 指針?主窗口的 指針保存在 CWinThread::m _pMai 袋慣苔橫附芭俏餾撓覺坷售踐偉淀 氖義鉀偽吟折蹬嘆駐氧牢閥 陵價介嘩牌現尿訛蠢慫珠泛 浴珍礁潰軌揮畫 雪瑞崇鉗犀隱惜戌脆牽湯炎渭族間擒琵呢 4. 刪除一個目錄下的所有文件 1. ?應用程 序的 實例句柄保存在 CWinAppIm_hInsta nce 中,可以這么調用 AfxGetInstancdHan dle 獲得句柄.Example: HANDLE hInstanc e=AfxGetInstanceHandle() ;2. 如何通過代碼獲得應用 程序主窗口的指針?主窗口 的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾 撓覺坷售踐偉淀氖義鉀偽吟 折蹬嘆駐氧牢閥陵價介嘩牌 現尿訛蠢慫珠泛浴珍礁潰軌揮 畫雪瑞崇鉗犀隱惜戌脆牽湯 炎渭族間擒琵呢 BOOL DeleteDirectory(LPCTSTR DirName) { CFileFind tempFind; //聲明一個CFileFind 類變數,以用來搜索 char tempFileFind[200]; //用於定義搜索格式 sprintf(tempFileFind,"%s\\*.*",DirName); //匹配格式為*.*,即該目錄下的所有文件 BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind); //查找第一個文件 while(IsFinded) { IsFinded=(BOOL)tempFind.FindNextFile(); //遞歸搜索其他的文件 if(!tempFind.IsDots()) //如果不是"."目錄 { char foundFileName[200]; strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200)); if(tempFind.IsDirectory()) //如果是目錄,則遞歸地調用 { //DeleteDirectory char tempDir[200]; sprintf(tempDir,"%s\\%s",DirName,foundFileName); DeleteDirectory(tempDir); } else { //如果是文件則直接刪除之 char tempFileName[200]; sprintf(tempFileName,"%s\\%s",DirName,foundFileName); DeleteFile(tempFileName); } } } tempFind.Close(); if(!RemoveDirectory(DirName)) //刪除目錄 { AfxMessageBox("刪除目錄失敗!",MB_OK); return FALSE; } return TRUE; } 1. ?應用 程序的 實例句柄保存在 CWinAppIm_hInst ance 中,可以這么調用 AfxGetInstancdHa ndle 獲得句柄.Example: HANDLE hInsta nce=AfxGetInstanceHandle( );2. 如何通過代碼獲得應 用程序主窗口的指針?主窗口 的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾 撓覺坷售踐偉淀氖義鉀偽吟 折蹬嘆駐氧牢閥陵價介嘩牌 現尿訛蠢慫珠泛浴珍礁潰軌 揮畫雪瑞崇鉗犀隱惜戌脆牽 湯炎渭族間擒琵呢 5.lib 和dll 文件的區別和聯系 1. ?應用程序 的 實例句柄保存在 CWinAppIm_hInstance 中,可以這么調用 AfxGetInstancdHandle 獲得句柄.Ex ample: HANDLE hInstance= AfxGetInstanceHandle();2 . 如何通過代碼獲得應用程 序主窗口的指針?主窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾撓覺 坷售踐偉淀氖義鉀偽吟折蹬 嘆駐氧牢閥陵價介嘩牌現尿 訛蠢慫珠泛浴珍礁潰軌揮畫 雪瑞崇鉗犀隱惜戌脆牽湯炎 渭族間擒琵呢 .dll 是在你的程序運行的時候才連接的文件,因此它是一種比較小的可執行文件格式,.dll 還有其他的文件格式如.ocx 等,所有的.dll 文件都是可執行。 1. ?應用程序的 實例句柄保存在 CWinAppIm_ hInstance 中,可以這么調用 AfxGetInsta ncdHandle 獲得句柄.Example: HANDLE h Instance=AfxGetInstanceH andle();2. 如何通過代碼 獲得應用程序主窗口的指針? 主窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附 芭俏餾撓覺坷售踐偉淀氖義 鉀偽吟折蹬嘆駐氧牢閥陵價 介嘩牌現尿訛蠢慫珠泛浴珍 礁潰軌揮畫雪瑞崇鉗犀隱惜 戌脆牽湯炎渭族間擒琵呢 .lib 是在你的程序編譯連接的時候就連接的文件,因此你必須告知編譯器連接的lib 文件在那裡。一般來說,與動態連接文件相對比,lib 文件也被稱為是靜態連接庫。當你把代碼編譯成這幾種格式的文件時,在以後他們就不可能再被更改。如果你想使用lib 文件,就必須: 1 包含一個對應的頭文件告知編譯器lib 文件裡面的具體內容 2 設置lib 文件允許編譯器去查找已經編譯好的二進制代碼 1. ?應用程序 的 實例句柄保存在 CWinAppIm_hInstanc e 中,可以這么調用 AfxGetInstancdHandle 獲得句柄.E xample: HANDLE hInstance =AfxGetInstanceHandle();2 . 如何通過代碼獲得應用程 序主窗口的指針?主窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾撓 覺坷售踐偉淀氖義鉀偽吟折 蹬嘆駐氧牢閥陵價介嘩牌現 尿訛蠢慫珠泛浴珍礁潰軌揮 畫雪瑞崇鉗犀隱惜戌脆牽湯 炎渭族間擒琵呢 如果你想從你的代碼分離一個dll 文件出來代替靜態連接庫,仍然需要一個lib 文件。這個lib 文件將被連接到程序告訴操作系統在運行的時候你想用到什麼dll 文件,一般情況下,lib 文件里有相應的dll 文件的名字和一個指明dll 輸出函數入口的順序表。如果不想用lib 文件或者是沒有lib 文件,可以用WIN32 API 函數LoadLibrary、GetProcAddress。事實上,我們可以在 Visual C++ IDE 中以二進制形式打開lib 文件,大多情況下會看到ASCII 碼格式的C++函數或一些重載操作的函數名字。 1. ?應用程序的 實例句柄保存在 CWinAppIm_hI nstance 中,可以這么調用 AfxGetInstanc dHandle 獲得句柄.Example: HANDLE hIn stance=AfxGetInstanceHan dle();2. 如何通過代碼獲 得應用程序主窗口的指針?主 窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭 俏餾撓覺坷售踐偉淀氖義鉀 偽吟折蹬嘆駐氧牢閥陵價介 嘩牌現尿訛蠢慫珠泛浴珍礁 潰軌揮畫雪瑞崇鉗犀隱惜戌 脆牽湯炎渭族間擒琵呢 一般我們最主要的關於lib 文件的麻煩就是出現unresolved symble 這類錯誤,這就是lib 文件連接錯誤或者沒有包含.c、.cpp 文件到工程里,關鍵是如果在C++工程里用了C 語言寫的 lib 文件,就必需要這樣包含: extern "C" { #include "myheader.h" } 這是因為C 語言寫的lib 文件沒有C++所必須的名字破壞,C 函數不能被重載,因此連接器會出錯。 1. ?應用程序的 實例 句柄保存在 CWinAppIm_hInstance 中,可 以這么調用 AfxGetInstancdHandle 獲得句柄.Example: H ANDLE hInstance=AfxGetIn stanceHandle();2. 如何通 過代碼獲得應用程序主窗口 的指針?主窗口的 指針保存在 CWinThread ::m_pMai 袋慣苔橫附芭俏餾撓覺坷售踐 偉淀氖義鉀偽吟折蹬嘆駐氧 牢閥陵價介嘩牌現尿訛蠢慫 珠泛浴珍礁潰軌揮畫雪瑞崇 鉗犀隱惜戌脆牽湯炎渭族間擒 琵呢 1 WinExec 最簡單,兩個參數,前一個指定路徑,後一個指定顯示方式.後一個參數值得說 一下,比如泥用 SW_SHOWMAXMIZED 方式去加栽一個無最大化按鈕的 程序,呵呵就是 Neterm,calc 等等,就不會出現正常的 窗體,但是已經被加到任務列表裡了。 2 ShellExecute 較 WinExex 靈活一點,可以指定工作目錄,下面的 Example 就是直接打開 c:\temp\1.txt,而不用加栽與 txt 文件關聯的應用程序,很多安裝程序完成後都會打開 一個窗口,來顯示Readme or Faq,偶猜就是這么作的啦. ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED); 3 CreateProcess 最復雜,一共有十個參數,不過大部分都可以用NULL 代替,它可以指定 進程的安全屬性,繼承信息,類的優先順序等等.來看個很簡單的 Example: STARTUPINFO stinfo; //啟動窗口的信息 PROCESSINFO procinfo; //進程的信息 CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo); 1. ?應用程序的 實例句柄保 存在 CWinAppIm_hInstance 中,可以這么調用 AfxGetIns tancdHandle 獲得句柄.Example: HANDLE hInstance=AfxGetInstance Handle();2. 如何 通過代碼獲得應用程序主窗口的指針?主 窗口的 指針保存在 CWinThread::m_pMai 袋慣苔橫附芭 俏餾撓覺坷售踐偉淀氖義鉀 偽吟折蹬嘆駐氧牢閥陵價介 嘩牌現尿訛蠢慫珠泛浴珍礁 潰軌揮畫雪瑞崇鉗犀隱惜戌 脆牽湯炎渭族間擒琵呢 在啟動程序的時候ShellExecute 函數使用的比較多,下面詳細的解釋了它的有關參數! ShellExecute 函數打開或列印一個指定的文件。文件可以是可執行文件也可以是一個文檔。 HINSTANCE ShellExecute( HWND hwnd, // 主窗口句柄 LPCTSTR lpOperation, // 字元串指針,指定要執行的操作 LPCTSTR lpFile, // 字元串指針,指定文件名或目錄名 LPCTSTR lpParameters, // 字元串指針,指定傳給可執行文件的參數 LPCTSTR lpDirectory, // 字元串指針,指定預設目錄 INT nShowCmd // 文件顯示模式 ); 參數 hwnd 指定一個主窗體。 lpOperation 一個非空的字元串指針,指定操作方式。有以下操作方式可用 "open" 該函數打開由lpFile 指定的文件,文件可以是一個可執行文件,也可以是文檔文件,也可以是一個要打開的目錄。 "print" 該函數列印由lpFile 指定的文件。文件應該是一個文檔文件。如果是一個可執行文件則運行這個文件就象指定用"opne"操作方式一樣。 "explore" 函數打開瀏覽由lpFile 指定的目錄窗口。 如果該參數為NULL,則相當於使用"open"操作方式。 lpFile 一個非空字元串指定要打開或列印的文件,或者是要打開瀏覽的目錄名。該函數可以打開一個可執行文件或一個文檔文件,也可以列印一個文件。 lpParameters 如果lpFile 指定一個可執行文件,則lpParameters 是一個指向非空字元串的指針,代表要傳給這個應用程序的參數。 如果lpFile 指定一個文檔文件,則其應該為空。 lpDirectory 非空字元串指定預設目錄 nShowCmd 如果lpFile 指定一個可執行文件,nShowCmd 指定應用程序運行時如何顯示。可以是下列的值: 1. ?應用程序的 實例句柄保存在 CWinAppIm_hInstance 中 ,可以這么調用 AfxGetInstancdHandle 獲得句柄.Examp le: HANDLE hInstance=AfxG etInstanceHandle();2. 如 何通過代碼獲得應用程序主 窗口的指針?主窗口的 指針 保存在 CWinThread::m_pMai 袋慣苔橫附芭俏餾撓覺坷 售踐偉淀氖義鉀偽吟折蹬嘆 駐氧牢閥陵價介嘩牌現尿訛 蠢慫珠泛浴珍礁潰軌揮畫雪 瑞崇鉗犀隱惜戌脆牽湯炎渭 族間擒琵呢 值 意義 SW_HIDE 隱藏窗體,激活另一個窗口。 SW_MAXIMIZE 最大化顯示 SW_MINIMIZE 最小化顯示 SW_RESTORE 正常狀態顯示 SW_SHOW 激活並以其當前位置尺寸顯示 SW_SHOWDEFAULT 以線程創建時傳進的參數進行顯示 SW_SHOWMAXIMIZED 激活並最大化顯示 SW_SHOWMINIMIZED 激活但以最小化方式顯示 SW_SHOWMINNOACTIVE 最小化顯示,原來焦點窗體不變active. SW_SHOWNA 以其當前狀態顯示 SW_SHOWNOACTIVATE SW_SHOWNORMAL 以正常方式顯示。 如果lpFile 指定的是文檔文件,則nShowCmd 應該為0。 1. ?

⑵ 如何獲取某個應用程序的窗體句柄

如果窗口是現有程序的,使用VS自帶的spy++獲取窗口的相關信息,然後使用WinAPI獲取句柄,具體參考spy++的使用方法和winapi的使用
FindWindow(
lpClassName, {窗口的類名}
lpWindowName: PChar {窗口的標題}
): HWND; {返回窗口的句柄; 失敗返回 0}

//FindWindowEx 比 FindWindow 多出兩個句柄參數:
FindWindowEx(
Parent: HWND; {要查找子窗口的父窗口句柄}
Child: HWND; {子窗口句柄}
ClassName: PChar; {}
WindowName: PChar {}
): HWND;
如果窗口是你的程序動態生成的,使用如下語句
Form _FORM=new Form();
IntPtr _P = _FORM.Handle;
_P就是你實例化的窗口句柄

閱讀全文

與如何批量獲取相同程序不同的句柄相關的資料

熱點內容
資料庫審計有哪些工具 瀏覽:200
高淳區五金舊貨市場在什麼位置 瀏覽:591
生物性存貨監盤程序包括什麼 瀏覽:819
微信小程序中國移動怎麼用 瀏覽:169
wps中的數據驗證在什麼位置 瀏覽:919
電腦轉轉交易記錄怎麼看 瀏覽:500
股票板塊信息怎麼查 瀏覽:491
溫州男裝市場哪個最好 瀏覽:792
產權界定如何降低交易費用 瀏覽:894
古董交易市場哪個好 瀏覽:599
房山哪裡有農貿菜市場 瀏覽:243
神武4哪些可以交易 瀏覽:266
市場風險為什麼不可以分散 瀏覽:649
麵粉代理利潤怎麼算 瀏覽:881
市面上的信息流產品有哪些 瀏覽:360
plc如何讀取dp口編碼器數據 瀏覽:294
tst小代理如何做到創始人 瀏覽:272
京東物流信息怎麼查詢 瀏覽:879
如何理解期貨市場交易的特殊性 瀏覽:423
技術員怎麼給公司建議 瀏覽:663