findwindow

findwindow

FindWindow這個函式檢索處理頂級視窗的類名和視窗名稱匹配指定的字元串。這個函式不搜尋子視窗。

基本介紹

  • 中文名:FindWindow
  • 外文名:FindWindow
  • 類型:函式
  • 特點:不搜尋子視窗
簡述,函式原型,參數表,返回值,C#中,C++中,聲明,

簡述

lpClassName參數指向類名,lpWindowName指向視窗名,如果有指定的類名和視窗的名字則表示成功返回一個視窗的句柄。否則返回零。
FindWindow,
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
HWND hWnd, // handle of window
LPDWORD lpdwProcessId // address of variable for process identifier
);
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance flag
DWORD dwProcessId // process identifier
);
HANDLE hProcess, // handle to process whose memory is written to
LPVOID lpBaseAddress, // address to start writing to
LPVOID lpBuffer, // pointer to buffer to write data to
DWORD nSize, // number of bytes to write
LPDWORD lpNumberOfBytesWritten // actual number of bytes written
);
const
ResourceOffset: dword = $004219F4;
resource: dword = 3113226621;
ResourceOffset1: dword = $004219F8;
resource1: dword = 1940000000;
ResourceOffset2: dword = $0043FA50;
resource2: dword = 1280185;
ResourceOffset3: dword = $0043FA54;
resource3: dword = 3163064576;
ResourceOffset4: dword = $0043FA58;
resource4: dword = 2298478592;
var
hw: HWND;
pid: dword;
h: THandle;
tt: Cardinal;
begin
hw := FindWindow('XX', nil);
if hw = 0 then
Exit;
GetWindowThreadProcessId(hw, @pid);
h := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if h = 0 then
Exit;
if flatcheckbox1.Checked=true then
begin
WriteProcessMemory(h, Pointer(ResourceOffset), @Resource, sizeof(Resource), tt);
WriteProcessMemory(h, Pointer(ResourceOffset1), @Resource1, sizeof(Resource1), tt);
end;
if flatcheckbox2.Checked=true then
begin
WriteProcessMemory(h, Pointer(ResourceOffset2), @Resource2, sizeof(Resource2), tt);
WriteProcessMemory(h, Pointer(ResourceOffset3), @Resource3, sizeof(Resource3), tt);
WriteProcessMemory(h, Pointer(ResourceOffset4), @Resource4, sizeof(Resource4), tt);
end;
CloseHandle(h);
close

函式原型

HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);

參數表

lpClassName
指向一個以NULL字元結尾的、用來指定類名的字元串或一個可以確定類名字元串的原子。如果這個參數是一個原子,那么它必須是一個在調用此函式前已經通過GlobalAddAtom函式創建好的全局原子。這個原子(一個16bit的值),必須被放置在lpClassName的低位位元組中,lpClassName的高位位元組置零。
如果該參數為null時,將會尋找任何與lpWindowName參數匹配的視窗。
lpWindowName
指向一個以NULL字元結尾的、用來指定視窗名(即視窗標題)的字元串。如果此參數為NULL,則匹配所有視窗名。

返回值

如果函式執行成功,則返回值是擁有指定視窗類名或視窗名的視窗的句柄。
如果函式執行失敗,則返回值為 NULL 。可以通過調用GetLastError函式獲得更加詳細的錯誤信息。

C#中

導入庫:user32.lib
頭檔案:winuser.h
***.Net 中運用
命名空間 using System.Runtime.InteropServices;
導入庫 [DllImport("user32.dll")]
函式原型 public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
參數說明 lpClassName String,指向包含了視窗類名的空中止(C語言)字串的指針;或設為零,表示接收任何類
lpWindowName String,指向包含了視窗文本(或標籤)的空中止(C語言)字串的指針;或設為零,表示接收 任何視窗標題
返回值 :句柄

C++中

頭檔案:afxwin.h
例子:
//Activate an application with a window with as pecific class nameBOOLCMyApp::FirstInstance(){CWnd*pWndPrev,*pWndChild;//Determine if a window with the class name exists...pWndPrev=CWnd::FindWindow(_T("MyNewClass"),NULL);if(NULL!=pWndPrev){//If so, does it have any popups?pWndChild=pWndPrev->GetLastActivePopup();//If iconic, restore the main windowif(pWndPrev->IsIconic())pWndPrev->ShowWindow(SW_RESTORE);//Bring the main window or its popup to the foregroundpWndChild->SetForegroundWindow();//And you are done activating theother applicationreturnFALSE;}returnTRUE;}

聲明

VB6.0中的聲明:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
FINDWINDOWSDelphi簡單例子:
var
t:thandle;
begin
t:=findwindow(nil,'計算器'); //運行windows計算器,獲取計算器的句柄
showmessage(inttostr(t));
end;
易語言中的聲明:
.版本 2
.DLL命令 FindWindow, 整數型, "user32.dll", "FindWindowA"
.參數 類名, 文本型
.參數 標題, 文本型

相關詞條

熱門詞條

聯絡我們