質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

1回答

1164閲覧

半透明のWINDOWを作って、マウスでDrug-Dropして、他アプリのSCREEN座標を取得したい

yuujiMotoki

総合スコア90

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2020/06/12 02:06

#相談内容

とあるRPAを自作しています。

外部アプリケーションを動かしますが、windowsのDPIが96(100%),144(150%)とか
違うためか、思った場所でマウスクリックできません。

そこでRPAにマウス座標の校正をさせるために、
エリア側で微調させるUIを設けたいと考えています。

#構想

 ユーザーに、四角(半透明のWINDOW)で指定するようにしたいと思います。

 

#VBA

現在、USERFORMで半透明のWINDOWを作りましたが、
このサイズを右下コーナーのドラッグで動かす機能を足したいと思います。

#質問

 ドラッグして動かすには何を足せばいいでしょうか?

イメージ説明

VBA

1Option Explicit 2 3Private Declare Function GetForegroundWindow Lib "user32" () As Long 4Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 5Private Const HWND_TOPMOST As Long = -1 6Private Const SWP_NOSIZE As Long = &H1& 7Private Const SWP_NOMOVE As Long = &H2& 8 9Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long 10Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 11Private Declare Sub SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) 12Private Declare Sub SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) 13Private Declare Sub DrawMenuBar Lib "user32" (ByVal hwnd As Long) 14 15Private Const GWL_EXSTYLE As Long = 0 ' _0 &= -20& 16Private Const WS_EX_LAYERED As Long = 0 '&H80000 17Private Const LWA_ALPHA As Long = 0 '&H2& 18Private Const WS_THICKFRAME = &H40000 19Private Const WS_MINIMIZEBOX = &H20000 20Private Const WS_MAXIMIZEBOX = &H10000 21 22Private Sub UserForm_Initialize() 23 24Dim myFrame As MSForms.Control 25Dim myHwnd As Long 26Dim myWindowLong As Long 27Dim myAlpha As Long 28 29myAlpha = 150 30Set myFrame = Me.Controls.Add("Forms.Frame.1") 31myHwnd = GetParent(GetParent(myFrame.[_GethWnd])) 32Me.Controls.Remove myFrame.name 33Set myFrame = Nothing 34myWindowLong = GetWindowLong(myHwnd, GWL_EXSTYLE) 35myWindowLong = myWindowLong Or WS_EX_LAYERED Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX 36SetWindowLong myHwnd, GWL_EXSTYLE, myWindowLong 37SetLayeredWindowAttributes myHwnd, 0&, myAlpha, LWA_ALPHA 38 39With Me 40.Top = 0 41.Left = 0 42.Width = 200 43.Height = 150 44 45End With 46 47Call SetWindowPos(GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 48 49End Sub 50

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

結局、C#で書くことにしました。
参考ソースコード

イメージ説明

c#

1 2using System.Drawing; 3using System.Runtime.InteropServices; 4using System.Windows.Forms; 5 6namespace ExcelVbaExt 7{ 8 [ComVisible(true)] 9 10 [ClassInterface(ClassInterfaceType.None)] 11 public partial class Form1 : Form 12 { 13 public Form1() => InitializeComponent(); 14 } 15 16 public partial class TransprtScrcn : Form1 17 { 18 public TransprtScrcn() 19 { 20 InitializeComponent(); 21 this.BackColor = Color.Red; 22 this.TransparencyKey = Color.Red; 23 } 24 25 protected override void OnPaintBackground(PaintEventArgs e) 26 { 27 e.Graphics.FillRectangle(Brushes.Red, e.ClipRectangle); 28 } 29 } 30}

VBA

1Sub test() 2 3Dim DLL As ExcelVbaExt.TransprtScrcn 4Set DLL = New ExcelVbaExt.TransprtScrcn 5 6DLL.show 7DLL.dispose 8 9End Sub

投稿2020/06/12 07:18

編集2020/06/12 07:22
yuujiMotoki

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問