天天看點

c語言findwindow函數_findwindow函數

大家好,又見面了,我是你們的朋友全棧君。

轉自:http://blog.csdn.net/coolszy/article/details/5523486

[DllImport(“User32.dll”, EntryPoint = “FindWindow”)]

句柄,是整個Windows程式設計的基礎。一個句柄是指使用的一個唯一的整數值,即一個4位元組(64位程式中為8位元組)長的數值,來辨別應用程式中的不同對象和同類中的不同的指針,程式不能利用句柄來直接閱讀檔案中的資訊。如果句柄不在I/O檔案中,它是毫無用處的。 句柄是Windows用來标志應用程式中建立的或是使用的唯一整數,Windows大量使用了句柄來辨別對象。

函數功能:該函數獲得一個頂層視窗的句柄,該視窗的類名和視窗名與給定的字元串相比對。這個函數不查找子視窗。在查找時不區分大小寫。

函數型:HWND FindWindow(LPCTSTR IpClassName,LPCTSTR IpWindowName);

參數:

IpClassName :指向一個指定了類名的空結束字元串,或一個辨別類名字元串的成員的指針。如果該參數為一個成員,則它必須為前次調用theGlobafAddAtom函數産生的全局成員。該成員為16位,必須位于IpClassName的低 16位,高位必須為 0。

IpWindowName:指向一個指定了視窗名(視窗标題)的空結束字元串。如果該參數為空,則為所有視窗全比對。

傳回值:如果函數成功,傳回值為具有指定類名和視窗名的視窗句柄;如果函數失敗,傳回值為NULL。 C#中使用該函數首先導入命名空間:

using System.Runtime.InteropServices;

然後寫API引用部分的代碼,放入 class 内部

[DllImport(“user32.dll”, EntryPoint = “FindWindow”)]

private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

這個函數有兩個參數,第一個是要找的視窗的類,第二個是要找的視窗的标題。在搜尋的時候不一定兩者都知道,但至少要知道其中的一個。有的視窗的标題是比較容易得到的,如”電腦”,是以搜尋時應使用标題進行搜尋。但有的軟體的标題不是固定的,如”記事本”,如果打開的檔案不同,視窗标題也不同,這時使用視窗類搜尋就比較友善。如果找到了滿足條件的視窗,這個函數傳回該視窗的句柄,否則傳回0。例如:

IntPtr hwnd = FindWindow(null, “電腦”);

if (hwnd != IntPtr.Zero)

{

MessageBox.Show(“找到電腦視窗”);

}

else

{

MessageBox.Show(“沒有找到電腦視窗”);

}

hwnd = FindWindow(“Notepad”, null);

if (hwnd != IntPtr.Zero)

{

MessageBox.Show(“找到記事本視窗”);

}

else

{

MessageBox.Show(“沒有找到記事本視窗”);

}

從上面的讨論中可以看出,如果要搜尋的外部程式的視窗标題比較容易得到,問題是比較簡單的。可如果視窗的标題不固定或者根本就沒有标題,怎麼得到視窗的類呢?這時我們可使用Microsoft Spy++,運作Spy++,按ALT+F3,在彈出的界面中拖動目标圖示到程式上即可。

釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/170207.html原文連結:https://javaforall.cn