找到當前Windows顯示的最前端的窗體程式

2021-08-25 14:14:22 字數 1241 閱讀 1749

最近幫朋友做乙個監控程式,需要知道當前系統的最前端程序。

搜了半天,一般出來的是下面這個。

[dllimport("user32", charset = charset.ansi, setlasterror = true)]

private

extern

static

intgetwindowlong(

system.intptr hwnd,

system.int32 nindex

);private

bool

iswndtopmost(intptr hwnd)

這段**的意思就是判斷是否有topmost屬性,也就是是否設定置頂屬性。

一般上所有程式都可以設定topmost屬性,如果你是最後乙個設定的,那很好,windows顯示的最前端的程式就你剛才設定的那個。如果不是,就不會是你想要的那個程式視窗。

事實上我想知道的是當前windows顯示的最前端的窗體程式,其實很簡單,下面的函式就可以了。

intptr getforegroundwindow();

具體的例子如下(c#實現), 通過定時器獲取當前的最前端窗體的控制代碼,然後通過process找到程序資訊。

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.diagnostics;

using system.drawing;

using system.runtime.interopservices;

using system.text;

using system.windows.forms;

[dllimport("user32.dll")]

private

static

extern intptr getforegroundwindow();

private

void

timer1_tick(object sender, eventargs e)}}

private

void

form1_load(object sender, eventargs e)

}}

獲取當前顯示的activity

用activitymanager裡面可以獲取到當前執行的所有任務,所有程序和所有服務,這是任務管理器的核心。仔細看getrunningtasks的文件,裡面說獲取的是系統中 running 的所有task,running 狀態包括已經被系統凍結的task。而且返回的這個列表是按照順序排列的,也就是說...

獲取當前顯示的ViewController

關於獲取當前viewcontroller的實現 上網查了很多,但是不全。自己整合了一下 思路通過過responder 來一步一步的找到最上層的viewcontroller uiviewcontroller result nil uiwindow window if window.windowleve...

史上最簡單的windows程式

一直想把mfc與sdk聯絡起來,似乎難以直接查到相應的資料.前不久,一位發布了乙個帖子,題為 書上例子也有錯誤嗎?更使得我這個想法變得明確.對於sdk來說,不必這麼複雜.以下是所給出的程式 cpp demo2 2.cpp a message box define win32 lean and mea...