ウィンドウハンドルを使って外部アプリの窓を操作する

作品プログラム
動作環境
プロデル1.7.1023以降
投稿者
ゆうと
更新日
2020-09-22 17:46:53
ダウンロード数
373

作品のプログラム

「notepad」を開いてメモ帳プロセスとする
メモ帳プロセスからウィンドウハンドルを取得する
その位置を報告する
その内容を報告する
それを最前面化する

/*
「無題 - メモ帳」というウィンドウハンドルを取得する
その位置を報告する
その位置は、{100,100}
その大きさを報告する
その大きさは、{640,480}
それをアクティブ化する
*/

/*
「無題 - メモ帳」というウィンドウハンドルを取得する
それを点滅させる
*/

/*
アクティブウィンドウハンドルを取得する
その位置を報告する
その大きさを報告する
*/

/*
{10,10}からウィンドウハンドルを取得する
その位置を報告する
*/
終了する

【アプリ:プロセス】からウィンドウハンドルを、取得する手順
  H=アプリのメインウィンドウハンドル
  10回繰り返す
    もしHが0でないなら繰り返しから抜け出す
    0.1秒待つ
    H=アプリのメインウィンドウハンドル
  繰り返し終わり
  もしHが0なら、「[タイトル]というウィンドウは見つかりません。」というエラーを発生させる
  ウィンドウハンドル情報(H)を作る
  それを返す
終わり

【タイトル】というウィンドウハンドルを、取得する手順
  ウィンドウ制御のFindWindowを{無, タイトル}で呼び出してHとする
  もしHが0なら、「[タイトル]というウィンドウは見つかりません。」というエラーを発生させる
  ウィンドウハンドル情報(H)を作る
  それを返す
終わり
【座標】から、ウィンドウハンドルを、取得する手順
  PTというPOINTを作る
  PTのx=座標(1)
  PTのy=座標(2)
  ウィンドウ制御のWindowFromPointを{座標(1),座標(2)}で呼び出してHとする
  もしHが0なら、「ウィンドウは見つかりません。」というエラーを発生させる
  ウィンドウハンドル情報(H)を作る
  それを返す
終わり
アクティブウィンドウハンドルを、取得する手順
  ウィンドウ制御のGetForegroundWindowを{}で呼び出してHとする
  もしHが0なら、「アクティブウィンドウは見つかりません。」というエラーを発生させる
  ウィンドウハンドル情報(H)を作る
  それを返す
終わり

ウィンドウ制御とは
  単一種類
  +FindWindow
  +GetForegroundWindow
  +SetForegroundWindow
  +GetWindowRect
  +GetWindowText
  +SetWindowText
  +WindowFromPoint
  +FlashWindowEx
  
  +HWND_TOPMOST=-1
  +HWND_NOTOPMOST=-2
  +SWP_NOSIZE=0x0001
  +SWP_NOMOVE=0x0002
  +FLASHW_ALL=0x3
  はじめの手順
    FindWindowは、ネイティブ関数(ファイル名「user32.dll」,関数名「FindWindowA」,戻り値型整数)を作る
    FindWindowの引数型一覧は、{文字列, 文字列}
    WindowFromPointは、ネイティブ関数(ファイル名「user32.dll」,関数名「WindowFromPoint」,戻り値型整数)を作る
    WindowFromPointの引数型一覧は、{整数, 整数}
    GetForegroundWindowは、ネイティブ関数(ファイル名「user32.dll」,関数名「GetForegroundWindow」,戻り値型整数)を作る
    GetForegroundWindowの引数型一覧は、{}
    SetForegroundWindowは、ネイティブ関数(ファイル名「user32.dll」,関数名「SetForegroundWindow」,戻り値型整数)を作る
    SetForegroundWindowの引数型一覧は、{整数}
    GetWindowRectは、ネイティブ関数(ファイル名「user32.dll」,関数名「GetWindowRect」,戻り値型整数)を作る
    GetWindowRectの引数型一覧は、{整数,RECT}
    SetWindowPosは、ネイティブ関数(ファイル名「user32.dll」,関数名「SetWindowPos」)を作る
    SetWindowPosの引数型一覧は、{整数, 整数, 整数, 整数, 整数, 整数, 整数}
    SetWindowPosの戻り値型は、整数
    GetWindowTextは、ネイティブ関数(ファイル名「user32.dll」,関数名「GetWindowTextA」,戻り値型整数)を作る
    GetWindowTextの引数型一覧は、{整数,文字列,整数}
    SetWindowTextは、ネイティブ関数(ファイル名「user32.dll」,関数名「SetWindowTextA」,戻り値型整数)を作る
    SetWindowTextの引数型一覧は、{整数,文字列}
    FlashWindowExは、ネイティブ関数(ファイル名「user32.dll」,関数名「FlashWindowEx」,戻り値型整数)を作る
    FlashWindowExの引数型一覧は、{FLASHWINFO}
  終わり
終わり
ウィンドウハンドル情報とは
  +ハンドル
  はじめ(ハンドル)の手順
    このハンドルは、ハンドル
  終わり
  自分をアクティブ化する手順
    ウィンドウ制御のSetForegroundWindowを{ハンドル}で呼び出してRとする
  終わり
  自分を最前面化する手順
    ウィンドウ制御のSetWindowPosを{ハンドル,ウィンドウ制御のHWND_TOPMOST,0,0,0,0,ウィンドウ制御のSWP_NOSIZEとウィンドウ制御のSWP_NOMOVEの論理和}で呼び出してRとする
  終わり
  自分で最前面を解除する手順
    ウィンドウ制御のSetWindowPosを{ハンドル,ウィンドウ制御のHWND_NOTOPMOST,0,0,0,0,ウィンドウ制御のSWP_NOSIZEとウィンドウ制御のSWP_NOMOVEの論理和}で呼び出してRとする
  終わり
  自分を点滅させる手順
    EXというFLASHWINFOを作る
    EXのcbSizeは、EXの構造体バイト数
    EXのdwFlagsは、ウィンドウ制御のFLASHW_ALL
    EXのhwndは、ハンドル
    EXのuCountは、5
    ウィンドウ制御のFlashWindowExを{EX}で呼び出してRとする
  終わり
  位置という属性
    取得する手順
      RTというRECTを作る
      ウィンドウ制御のGetWindowRectを{ハンドル,RT}で呼び出す
      {RTのLeft,RTのTop}を返す
    終わり
    設定する手順
      V=設定値
      ウィンドウ制御のSetWindowPosを{H,0,V(1),V(2),0,0,ウィンドウ制御のSWP_NOSIZE}で呼び出してRとする
    終わり
  終わり
  大きさという属性
    取得する手順
      RTというRECTを作る
      ウィンドウ制御のGetWindowRectを{ハンドル,RT}で呼び出す
      {RTのRight-RTのLeft,RTのBottom-RTのTop}を返す
    終わり
    設定する手順
      V=設定値
      ウィンドウ制御のSetWindowPosを{ハンドル,0,0,0,V(1),V(2),ウィンドウ制御のSWP_NOMOVE}で呼び出してRとする
    終わり
  終わり
  内容という属性
    取得する手順
      Name=ネイティブ参照(型文字列,文字数255)を作る
      ウィンドウ制御のGetWindowTextを{ハンドル, Name,255}で呼び出してRとする
      Nameの値を返す
    終わり
    設定する手順
      ウィンドウ制御のSetWindowTextを{ハンドル,設定値}で呼び出してRとする
    終わり
  終わり
終わり

RECTとは
  ネイティブ構造体を受け継ぐ
  +Left:整数
  +Top:整数
  +Right:整数
  +Bottom:整数

  はじめの手順
    自分で初期化する
  終わり
終わり
POINTとは
  ネイティブ構造体を受け継ぐ
  +x:整数
  +y:整数

  はじめの手順
    自分で初期化する
  終わり
終わり
FLASHWINFOとは
  ネイティブ構造体を受け継ぐ
  +cbSize:整数
  +hwnd:整数
  +dwFlags:整数
  +uCount:整数
  +dwTimeout:整数

  はじめの手順
    自分で初期化する
  終わり
終わり
	

▲ページの先頭へ