システムwiki

Word VBAで作成されたメモ帳windows の制御幅は?

KHD2016 解決済 最終更新日:2021-05-01 01:00

次のコードを使用してデバッグ情報をテキストwindows に貼り付ける.デバッグ情報はさまざまな行ですが、1行あたりの文字はほんの数です.コードを実行するたびにwindows の幅を繰り返し狭くしているので、最大化しながら表示することができます.
私の画面スペースの残りの部分.メモ帳windows の幅を固定幅に自動調整するコードを追加する方法はありますか? (私は正しい幅を見つけるために遊ぶことができます、これが可能かどうかを知る必要があるだけでそれを達成する方法).

VBAはwidthキーワードを(自動キャピタライズする)を認識しますが、実行時に "コンパイルエラー:無効修飾子"

SUB WRITE2NOTEPAD(StringとしてのMYSTR)


in mid s rong chwnd


Notepad Start
コールシェル( "notepad.exe"、vbnormalfocus )
hwnd= findWindow( "Notepad"、vbnullString)
'コントロールwindows ハンドルを探す、VbnullString)
sendmessage chwnd、wm_settext、byval 0&、mystr
'chwnd.width= 100'<-うまくいかない

'hwnd.width= 100'<-うまくいかない
end sub

サブTestNotePadwidth

WRITE2NOTEPAD( "A47J12")

ANDUB

引っ越し:Office/辞書/Windowsその他/Office 2016

返信リスト(回答:4)

1 #
JayFree 1

次のコードでメモ帳windows のサイズを設定できます:

関数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)

Const HWND_TOP=0&
Const SWP_NOMOVE =&H2
Const SWP_NOZORDER =&H4
Const SWP_SHOWWINDOW =&H40

...

SetWindowPos hwnd、HWND_TOP、0&、0&、100&、600&、_

SWP_NOMOVE + SWP_NOZORDER + SWP_SHOWWINDOW

私が仕事に取り掛かることができないのはSendMessage呼び出しです.渡されたMyStrパラメータの代わりに、メモ帳windows に3つのランダムな文字が表示されます.SendMessageの代わりにSetWindowText関数も使用しようとしましたが、Wordマクロと
メモ帳windows は別のプロセスにあります.SetWindowTextのMSDNドキュメントには、「別のプロセスでコントロールのテキストを設定するには、WM_SETTEXTメッセージ
SetWindowTextを呼び出す代わりに直接
."

応答1# ->にスキップ
2 #
KHD2016

ジェイ、ありがとう.以下の他のAPIは、Webからコピー/貼り付けしたばかりのAPIですが、WindowsAPIを十分に使用してそれらの意味を理解していません.

SetWindowPosの詳細を知るためにウェブを検索した結果、次のコードが機能するようになりました.変更したいのは、元の高さを設定するのではなく、デフォルトのままにすることだけですが、その方法がわかりません:)

幅が狭いので、この質問に回答済みのマークを付けます.もう一度ありがとう!

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA"(ByVal lpClassName As String、ByVal lpWindowName As String)As Long
'名前の付いたwindows を検索し、ハンドルを返します.
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"(ByVal hwnd As Long、ByVal wMsg As Long、ByVal wParam As Integer、ByVal lParam As Any)As Long
'指定されたメッセージを指定されたwindows ハンドルに送信します.
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA"(ByVal hWnd1 As Long、ByVal hWnd2 As Long、ByVal lpsz1 As String、ByVal lpsz2 As String)As Long
'コントロールのwindows ハンドルを取得します.適切なコントロールを取得するには、フォームwindows ハンドルを指定する必要があります.
ConstWM_SETTEXT As Long =&HC
'このコントロールのテキストを設定します.
オプションベース1

'


-
'
ブックマーク名を確認するときにメモ帳のwindows サイズを狭めるコードに追加
-
'
-
'プライベート宣言関数FindWindow Lib "user32.dll" Alias _
'"FindWindowA"(ByVal lpClassName As String、_
' ByVal lpWindowName As String)As Long

Private Declare Function SetParent Lib "user32.dll" _
(ByVal hWndChild As Long、ByVal hWndNewParent As Long)As Long

プライベート宣言関数SetWindowPosLib "user32.dll" _
(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

'プライベート宣言関数GetDesktopWindowLib "user32"()As Long

Private Const SWP_NOZORDER As Long =&H4
Private Const SWP_SHOWWINDOW As Long =&H40
Const HWND_TOP=0&
Const SWP_NOMOVE =&H2

Private Sub textsdfs()
Write2Notepad( "A47J12")
End Sub

Sub Write2Notepad(MyStr As String)
Dim hwnd As Long
Dim chWnd As Long
Dim s As String
'start Notepad
Call Shell( "NOTEPAD.EXE"、vbNormalFocus )
hwnd=FindWindow( "Notepad"、vbNullString)
'コントロールwindows ハンドルを検索...メモ帳には、必要なメインテキストボックスがあります.
chWnd=FindWindowEx(hwnd、ByVal 0&、vbNullString 、vbNullString)
SendMessage chWnd、WM_SETTEXT、ByVal 0&、MyStr
'hWnd.Width=100
' SetWindowPos hwnd '、0&、0&、0&、100&、600
'windows のサイズを変更
SetWindowPos hwnd、0、0&、0&、400&、_
900&、SWP_NOZORDERまたはSWP_SHOWWINDOW

サブの終了

応答2# ->にスキップ
3 #
JayFree

API関数をもう少し作業することを期待している場合は、Dan Applemanの中古コピーを購入する価値があります. Win32 APIへのVisual Basic Programmerのガイド .それは莫大な(1500以上のページ、約5ポンド)、そして最後に18年前に改訂されましたが、それは不可欠です.API関数のほとんどは宣言書を通じてVBAで使用可能で、アプレンマンはより良く説明しています
オンラインドキュメントよりも彼らがすることができます.使用済みコピーを購入する場合は、バックカバーポケットに入る必要があるCDを取得してください.コードと追加のドキュメントの例があります.

「CY引数を変更しないがCXを変更する」と言う直接的な方法がないことは典型的です.(CXとCYの両方を変更することを言うフラグ、SWP_NOSIZEがありますが、それは私たちがここに欲しいものではありません.)あなたがしなければならないものはAPI機能を呼び出すことです.
getWindowRect.HWNDwindows の左上と右下の角の座標を含む直角構造へのポインタを返します.次に、右下のY値から左上のY値を減算して、CYの現在の値を取得します.
そしてそれをSetWindowpos(Ouch!)に渡します.

メモ帳windows のMyString変数( "A47J12")の正しい値を見ていますか?働くことができませんでした.

応答3# ->にスキップ
4 #
KHD2016

メモ帳windows で正しいMyString変数を見ています.

それは私たちの間のversionの違いかもしれませんか? Win7x64でExcel X32を使用しています.このプロジェクトの開始時に参照を変更しないが、ここに現在割り当てられているものがあります.

APIブックのコピーを拾います.これは非常に便利に見えます:)

ありがとうございました!