請問我如何從已知Handle得到Application的FileName |
答題得分者是:change.jian
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
我在MSDN找到這個東東,
可不可以請那位大大, 幫忙改寫改Delphi, 謝謝!! BOOL GetFileNameFromHandle(HANDLE hFile) { BOOL bSuccess = FALSE; TCHAR pszFilename[MAX_PATH 1]; HANDLE hFileMap; // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); if( dwFileSizeLo == 0 && dwFileSizeHi == 0 ) { printf("Cannot map a file with a length of zero.\n"); return FALSE; } // Create a file mapping object. hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (hFileMap) { // Create a file mapping to get the file name. void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1); if (pMem) { if (GetMappedFileName (GetCurrentProcess(), pMem, pszFilename, MAX_PATH)) { // Translate path with device name to drive letters. TCHAR szTemp[MAX_PATH]; szTemp[0] = '\0'; if (GetLogicalDriveStrings(MAX_PATH-1, szTemp)) { TCHAR szName[MAX_PATH]; TCHAR szDrive[3] = TEXT(" :"); BOOL bFound = FALSE; TCHAR* p = szTemp; do { // Copy the drive letter to the template string *szDrive = *p; // Look up each device name if (QueryDosDevice(szDrive, szName, MAX_PATH)) { UINT uNameLen = _tcslen(szName); if (uNameLen < MAX_PATH) { bFound = _tcsnicmp(pszFilename, szName, uNameLen) == 0; if (bFound) { // Reconstruct pszFilename using szTemp // Replace device path with DOS path TCHAR szTempFile[MAX_PATH]; _stprintf(szTempFile, TEXT("%s%s"), szDrive, pszFilename uNameLen); _tcsncpy(pszFilename, szTempFile, MAX_PATH); } } } // Go to the next NULL character. while (*p ); } while (!bFound && *p); // end of string } } bSuccess = TRUE; UnmapViewOfFile(pMem); } CloseHandle(hFileMap); } printf("File name is %s\n", pszFilename); return(bSuccess); } |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
首先感謝各位先進的指導,
我目前使用GetForegroundWindow, 取到Handle之後, 由該Handle, 可以正確的取得GetWindowText, 但是一直無法取到該Handle的FileName, 參考了CreateToolhelp32Snapshot, Process32First, Process32Next, 確實可以取得所有執行中Application的FileName, 但是依然沒辦法取到GetForegroundWindow.Handle的FileName, 目前看來由GetForegroundWindow取得Handle, 並無法對慼到該Application的FileName, 請問是否還有其他方向, 讓我參考呢?? 感激不盡!!! |
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
得到 window handle 後,透過 GetWindowThreadProcessId ,可以得到相關的 ProcessID 及 ThreadID
然後,再輔以 CreateToolhelp32Snapshot ,就可以找到你要的東西了 ===================引 用 文 章=================== 首先感謝各位先進的指導, 我目前使用GetForegroundWindow, 取到Handle之後, 由該Handle, 可以正確的取得GetWindowText, 但是一直無法取到該Handle的FileName, 參考了CreateToolhelp32Snapshot, Process32First, Process32Next, 確實可以取得所有執行中Application的FileName, 但是依然沒辦法取到GetForegroundWindow.Handle的FileName, 目前看來由GetForegroundWindow取得Handle, 並無法對慼到該Application的FileName, 請問是否還有其他方向, 讓我參考呢?? 感激不盡!!! |
max5020
資深會員 發表:30 回覆:277 積分:321 註冊:2003-06-04 發送簡訊給我 |
|
japhen
中階會員 發表:2 回覆:57 積分:71 註冊:2006-08-16 發送簡訊給我 |
A、抓自己的檔名用 Application.exename
B、抓別的程式窗口的HANDLE,索取該程式的檔
------
歡迎在大陸的台商加入我們的行列 台商小棧 www.twgocn.com |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |