1. 程式人生 > >AutoIt3 使用程序名獲取視窗控制代碼

AutoIt3 使用程序名獲取視窗控制代碼

背景

需要用AutoIt3控制QQ音樂播放器,首先要獲取QQ音樂的視窗控制代碼

問題

WinGetHandle方法不能滿足要求
QQ音樂的Title會根據當前播放的歌曲動態改變
而QQ音樂與QQ的視窗Class又相同,同時開啟時無法用視窗Class拿到QQ音樂視窗控制代碼

解決辦法

自己寫一個_WinGetHandleByPnmAndCls方法,使用程序名(QQMusic.exe)和視窗Class(TXGuiFoundation)獲得視窗控制代碼

程式碼如下

#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3> Local $hWnd = _WinGetHandleByPnmAndCls("QQMusic.exe", "TXGuiFoundation") If Not $hWnd Then MsgBox($MB_SYSTEMMODAL, "", "視窗沒找到") Exit EndIf WinActivate($hWnd) ; 根據pname和class獲取視窗控制代碼,找不到則返回0 Func _WinGetHandleByPnmAndCls($pname, $class) ; 根據程序名查詢程序id Local $pid
= ProcessExists($pname) ; 如果程序存在,繼續 If $pid Then return _WinGetHandleByPidAndCls($pid, $class) Else Return 0 EndIf EndFunc ; 根據pid和class獲取視窗控制代碼,找不到則返回0 Func _WinGetHandleByPidAndCls($pid, $class) ; 這裡使用列舉所有頂層視窗方法,WinList方法會返回大量隱藏視窗 Local $winArr = _WinAPI_EnumWindowsTop() ; 遍歷所有視窗,程序id與指定程序id比較 For $i
=1 To $winArr[0][0] If $pid=WinGetProcess($winArr[$i][0]) And $winArr[$i][1]=$class Then ; 一個程序會有多個視窗,所以要用class來篩選 return $winArr[$i][0] EndIf Next Return 0 EndFunc

相關推薦

AutoIt3 使用程序獲取視窗控制

背景 需要用AutoIt3控制QQ音樂播放器,首先要獲取QQ音樂的視窗控制代碼 問題 WinGetHandle方法不能滿足要求 QQ音樂的Title會根據當前播放的歌曲動態改變

根據程序ID 獲取視窗控制

 using namespace System;using namespace System::Diagnostics;using namespace System::ComponentModel; Process *m_pCurProcess = Process::GetProcessById(

按鍵精靈 -獲取視窗控制

MessageBox "視窗右下角座標:" get_window_pos //得到當前最前面的視窗控制代碼-就是把需要的視窗啟用在最前面 Hwnd = Plugin.Window.Foreground() //得到滑鼠指向的視窗控制代碼Hwnd = Plugin.Window.Mo

Selenium:多視窗切換(獲取視窗控制handle)

我們在操作網頁的時候,點選有些頁面的連結,會重新開啟一個視窗,我們要在新頁面上操作,就得切換視窗 比如在百度首頁的登入框點選註冊,會重新開啟一個註冊的新頁面,要在新頁面註冊,就得先切進新頁面 那我們怎麼在這兩個視窗之間進行切換呢?每個瀏覽器視窗都有一個唯一的屬性控制代碼(handle)來表示,我們就可

MFC獲取視窗控制的方法

AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回

[WinAPI] 獲取視窗控制的幾種方法

1、使用FindWindow函式獲取視窗控制代碼 示例:使用FindWindow函式獲取視窗控制代碼,然後獲得視窗大小,並且移動視窗到指定位置。 我們想獲得酷我音樂盒的視窗控制代碼並移動它,該怎麼辦呢? 首先開啟VC或者VS裡面tool中的SPY++點選查詢視

VC中獲取視窗控制的各種方法

AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。 函式原型:HWND GetTop

幾個獲取視窗控制函式

AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。 函式

C#獲取視窗控制概念和方法例項

在Windows中,控制代碼是一個系統內部資料結構的引用。例如當你操作一個視窗,或說是一個Delphi窗體時,系統會給你一個該視窗的控制代碼,系統會通知你:你正在操作142號視窗,就此你的應用程式就能要求系統對142號視窗進行操作——移動視窗、改變視窗大小、把視窗極小化為圖

VC++實現spy++獲取視窗控制的功能

在WM_MOUSEMOVE 訊息中實現如下程式碼: void CInputMethodTestDlg::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值if (GetCapture(

VC中獲取視窗控制的各種方法 .

 AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。 函

根據程序id獲取視窗控制

struct ProcessWindowData { HWND hWnd; unsigned long lProcessId; }; BOOL CALLBACK EnumWindowCallback(HWND hWnd, LPARAM lParam) { ProcessWindowData&

C# 根據程序獲取程式主視窗控制(包括最小化和隱藏程式)

namespace Applications.UI {     class CurrentProcess     {             private static Hashtable processWnd = null;             public del

在DLL中獲取程序視窗控制

有的時候難免需要在DLL中獲取主程序的視窗控制代碼,比如在DLL注入的時候等等。那麼如何在DLL中獲取主程序的視窗控制代碼呢?可以通過EnumWindows來實現。先通過GetCurrentProcessId獲取程序的PID,然後在EnumWindows中呼叫GetWind

根據視窗控制獲取程序ID

[DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID

WPF 視窗控制獲取和設定

WPF 視窗控制代碼設定和獲取 1、控制代碼類 WHwnd.cs public class WHwnd { /// <summary> /// 主窗體控制代碼 /// </summar

MFC 獲取當前視窗控制,或者父子視窗控制

父子視窗 在子視窗中,需要用到父視窗的控制代碼: AfxGetMainWnd()->m_hWnd 注:在父視窗中,也可以這麼用來呼叫自己視窗的控制代碼 在子視窗中,需要用到自己視窗的控制代碼 ChildDlg *pChildDlg ; pChildDlg->m_h

獲取ArcMap視窗控制,通過WinAPI獲取工作空間中點選要素的系統桌面座標

這裡用了個“桌面座標”,是希望區分一下ArcGis的“螢幕座標”(與之對應的還有一個“地理座標”)。 什麼是“螢幕座標”呢?使用ITool介面的OnMouseDown方法獲取的“x,y”值即是,其原點值在“工作空間”窗體左上角。 什麼是我所稱謂的“工作空間”呢?它是資料編輯區域,用Spy++檢視一下其窗體

C#獲取當前活動視窗控制

c# 獲取當前活動視窗控制代碼,獲取視窗大小及位置 2018年04月26日 13:48:21 漂泊_人生 閱讀數:1889   需呼

GetWindow、GetTopWindow和GetNextWindow(視窗控制獲取!!!)

GetWindow //uCmd 可選值:   GW_HWNDFIRST = 0; {同級別第一個}   GW_HWNDLAST  = 1; {同級別最後一個}   GW_HWNDNEXT  = 2; {同級別下一個}   GW_HWNDPREV  = 3;