★★Access2000VBA・Excel2000VBA独学~Win32API(64bit用の簡単事例も追加!)。起動したソフトのウィンドウの位置とサイズを変更する方法・Googl eChromeを例に。(Excel、Word、Access、などが32bit版のモノでしか使えませんが、OSは64bitでも大丈夫です。)~
  
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
  
目次

※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。
  
  

「起動したソフトのウィンドウの位置とサイズを変更する方法」については、UWSCを使う方法があります。

それだと、例えば、
『 ACW(GETID("Microsoft Visual Basic for Applications","wndclass_desked_gsk"),10,10,1000,700,0) 』
という1行で、VBEが開いてさえいれば、VBEの画面を、
Top10ピクセル、
Left10ピクセル、の位置に、
ヨコ1000ピクセル
タテ700ピクセル、の大きさで、
サイズの自動調整をしてくれます。
「Microsoft Visual Basic for Applications」の部分を、ウィンドウのタイトルバーの文言の一部を指定します。

これは、VBAにて、そのUWSファイルをShell関数を使って開けば、それがそのままVBAでもやれます。

また、ショートカットアイコンでもできるそうです。
Chromeを起動したときに表示されるウィンドウの位置と大きさを指定する方法
引用:「 "C:\Program Files\Google\Chrome\Application\chrome.exe" --window-position=150,10 --window-size=1190,880 」
  
  
ただ、「どうしてもAPIでやりたい」というときは、以降に挙げたようなコードで可能です。

「GoogleChromeのウィンドウをリサイズする」ということでのサンプルです。

まず以降のコードをすべて丸ごと標準モジュールにコピペして、
・必ずGoogleChromeを開いてから
・一番最後の「AtherWinPosiSIzeChange01()」プロシージャを実行
してみます。

実際には、
・Shell関数か何かでGoogleChromeを起動してから、
・最初のページが表示されるまでDoEventか何かして、
・完了した後に、「AtherWinPosiSIzeChange01()」プロシージャを実行

みたいな感じになるかと思います。
(当方のテストでは、「最初のページが表示されるまで」待たなくても、Chromeの画面が表示された直後なら大丈夫でしたけど念のため・・・)

「AtherWinPosiSIzeChange01()」はウィンドウのタイトルバーの文言の一部でやっていますが、それでダメなら、「タスクID(プロセスID)からリサイズする。」のほうの関数(「app_window_risize_for_p_id()」)をCallしてみます。

「タスクID」は、Shell関数でアプリを起動した際の戻り値で良かったかも?です。

※繰り返しますが、64bit版のExcelでは動きません。すみません。

  

★以下、64bitのExcelやAccess用の簡単な事例
(最前面にする機能などはなし。ガワのウィンドウサイズの変更のみ。)

MOUGのサンプルを64bit用にしただけのものです。
Excelファイルを開いたときに、Auto_Openプロシージャにより、
ガワのサイズを「1000×640」に自動変更しています。

64bitのAccessやWordなどでも動くと思います。

64bitのAccessでは、AutoExecマクロに「プロシージャの実行」で自動実行させたら
ちゃんと動きました。

  

  

★ 以下、最初のAccessMDBファイルの32bit用のコードの、64bit版。
(最前面に固定する機能もあり。ガワのウィンドウサイズの変更ももちろんあり。通常はAPIのウィンドウ操作は最前面固定もよく求められるので、基本、こちらを使います。)

32bit用のDeclare文の「Function」の前に、「PtrSafe 」を付けるコード
   ↓
Public Declare PtrSafe Function GetForegroundWindow Lib "user32" () As Long

Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long

Declare PtrSafe Function FindWindow% Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As Any, _
ByVal lpCaption As Any)
Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
  

  

「hWnd 」や「hWndInsertAfter 」などのポインタ系の値のデータ型を「Long」から「LongPtr」に変更するコード
(LongPtrは64bitならLongLong、32bitならLongに自動変換してくれるデータ型だそうです。64bitしか絶対に使わないなら、LongPtrをLongLongにしてもOK。逆に、「32bitAccessでも使うかも?と心配なら、LongPtrのほうがいいそうです。)
   ↓
Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hWnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long

Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long