1. 程式人生 > >C++根據程序獲取主視窗的控制代碼

C++根據程序獲取主視窗的控制代碼

原帖網址:http://www.cnblogs.com/ylhome/archive/0001/01/01/1529681.html

// processenum.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <Psapi.h>
#include <string.h>
#pragma comment ( lib, "Psapi.lib" )

HWND lmshwnd;

BOOL CALLBACK EnumWindowsProc(HWND hwnd,DWORD lParam)

 DWORD mpid;
 GetWindowThreadProcessId(hwnd,&mpid);

 if (mpid==lParam)
 {
  int i=GetWindowTextLength(hwnd);
  char szhello[255];  
  char lmschar[255]=_T("名稱");
  GetWindowText(hwnd,szhello,i+1);
  if (strstr(szhello,lmschar))
  {
   printf("%s\n",szhello);
   lmshwnd=hwnd;
  }
  
 }
 return TRUE;
}

void PrintProcessNameAndID( DWORD processID )
{
 TCHAR szProcessName[MAX_PATH] = TEXT("unknow");
 //根據程序ID,開啟程序返回程序的控制代碼
 HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID );
 //得到程序名
 if (NULL!=hProcess )
 {
  HMODULE hMod;
  DWORD cbNeeded;
  //EnumProcessModules根據控制代碼獲取例項,儲存到hMod中
  if (EnumProcessModules( hProcess,&hMod,sizeof(hMod),&cbNeeded) )
  {
   //獲取根據程序控制代碼獲取程序名稱 szProcessName
   GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName)/sizeof(TCHAR) );
  }
 }
 //列印程序名和程序ID,其程序控制代碼為hProcess
 TCHAR *lmsname=TEXT("LMSVirtualLab.EXE");
 if (!strcmp(szProcessName,lmsname))
 {
  _tprintf( TEXT("%s  (PID: %x)\n"),szProcessName,processID);
  EnumWindows((WNDENUMPROC)EnumWindowsProc,processID);
  //HDESK hDesk=OpenDesktop(_T(""),0,FALSE,DESKTOP_ENUMERATE);   
  //EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowsProc,processID); 
 }

 CloseHandle( hProcess );
}

int _tmain(int argc, _TCHAR* argv[])
{
 // 得到程序ID的列表
 DWORD aProcesses[1024], cbNeeded, cProcesses;
 unsigned int i;
 //列舉所有程序的ID,返回到aProcesses陣列中
 if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
  return 0;
 //計算一共返回了多少個程序ID
 cProcesses = cbNeeded / sizeof(DWORD);
 //列印每個程序的名稱和對應的ID
 for ( i = 0; i < cProcesses; i++ )
 {
  if( aProcesses[i] != 0 )
  {
   PrintProcessNameAndID(aProcesses[i]);
  }
 }
 printf("%x\n",lmshwnd);
 ShowWindow(lmshwnd,SW_MAXIMIZE);
 return 0;
}

相關推薦

C++根據程序獲取視窗控制

原帖網址:http://www.cnblogs.com/ylhome/archive/0001/01/01/1529681.html // processenum.cpp : Defines the entry point for the console applica

根據程序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

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

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

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

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

C#獲得windows工作列視窗控制及一些操作(放大、縮小、關閉、隱藏……)

需呼叫API函式 需在開頭引入名稱空間using System.Runtime.InteropServices; 1、通過視窗名字查詢 [DllImport("user32.dll", EntryPoint = "FindWindow")] public static extern In

如何獲取控制檯視窗控制 (HWND)

HWND GetConsoleHwnd(void) { #define MY_BUFSIZE 1024 // Buffer size for console window titles. HWND hwndFound; // This is what

從父視窗獲取視窗控制以及其例項控制

獲取父視窗控制代碼 HWND hWnddlg = AfxGetMainWnd()->m_hWnd;  //主視窗控制代碼 或者 HWND hWnddlg = this->m_hWnd; //主視窗控制代碼 獲取子視窗控制代碼 如果子視窗是控制元件,並有控制元件

獲取桌面視窗控制

GetDesktopWindow獲取的是頂層顯示桌面控制代碼,也就是說,如果應用程式視窗在桌面上,那麼它的視窗也算是所獲取的視窗的一部分,如果使用GetDC(NULL)作圖,則永遠是在最頂層。 那麼如何獲取包含桌面圖示的視窗控制代碼呢? 我們可以用Spy++來檢視。 可以

spy++只能讀取視窗控制而無法讀取到子控制元件控制的原因

看完DIRECTUI簡介就明白了: DirectUI意為直接在父視窗上繪圖(Paint on parent dc directly)。即子視窗不以視窗控制代碼的形式建立(windowless),只是邏

根據程序ID 獲取視窗控制

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

在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

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

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

C# 影象處理: 獲取當前活動視窗控制,獲取視窗大小及位置

C# 影象處理: 獲取當前活動視窗控制代碼,獲取視窗大小及位置 需呼叫API函式 需在開頭引入名稱空間 using System.Runtime.InteropServices; 獲取當前視窗控制代碼:GetForegroundWindow() [DllImport("us

AutoIt3 使用程序獲取視窗控制

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

mfc 根據視窗控制(HWND)殺死程序

先列舉桌面所有的視窗的標題或者類名。根據類名或者標題得知該視窗的控制代碼(HWND)。然後再殺死程序。看程式碼: BOOL bTerminateProcess = FALSE; HWND hwndE

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

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

WPF 視窗控制獲取和設定

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

按鍵精靈 -獲取視窗控制

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