C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

メッセージの表示

[トピック内 21 記事 (1 - 20 表示)]  << 0 | 1 >>

■85221 / inTopicNo.1)  メッセージの表示
  
□投稿者/ hoho (1回)-(2017/09/21(Thu) 19:09:53)

分類:[.NET 全般] 

はじめまして。VB初心者ですがよろしくお願いします。

普段、VBのフォームを最小化しておいて
時間が経過すると(何かのタイミング)フォームを普通の状態にして
( FormWindowState.Normal)
PCモニターの右上にメッセージ表示するプログラムの作成を考えています。

また、PCでは数字入力するソフトを使ていまして
カーソルを常にそのソフト置いておきたいです。

使っているソフトに主導権を与えながら
VBでメッセージ表示する方法ありましたら
教えていただきたいです。

宜しくお願いいたします。
引用返信 編集キー/
■85223 / inTopicNo.2)  Re[1]: メッセージの表示
□投稿者/ しろ (25回)-(2017/09/21(Thu) 21:34:30)
No85221 (hoho さん) に返信
>時間が経過すると(何かのタイミング)フォームを普通の状態にして
何かのタイミングフォームを通常の状態と書いてありますが
なにかのタイミングってどのタイミングですか?
引用返信 編集キー/
■85224 / inTopicNo.3)  Re[2]: メッセージの表示
□投稿者/ hoho (2回)-(2017/09/21(Thu) 22:04:31)
No85223 (しろ さん) に返信
> ■No85221 (hoho さん) に返信
> >時間が経過すると(何かのタイミング)フォームを普通の状態にして
> 何かのタイミングフォームを通常の状態と書いてありますが
> なにかのタイミングってどのタイミングですか?

返答ありがとうございます。

あるテキストを読み込んで、内容が
1の場合はフォームを普通状態にする。
0の場合はフォーム最小化にする。
としています。

※「PCでは数字入力するソフト」の方でテキストを作成していまして、
そのテキストはVBで読み込み後に削除しています。
引用返信 編集キー/
■85226 / inTopicNo.4)  Re[3]: メッセージの表示
□投稿者/ しろ (26回)-(2017/09/22(Fri) 08:19:02)
No85224 (hoho さん) に返信

↓のURLを参考にしてIf文で1の場合フォームを最小化して
それ以外は通常に戻すとかの分岐を作ってやると簡単にできますよ。
http://jeanne.wankuma.com/tips/vb.net/form/windowstate.html

If TextBox1.Text <= 1 Then
' フォームを最小化する
Me.WindowState = FormWindowState.Minimized
End If
' フォームを最大化する
Me.WindowState = FormWindowState.Maximized

End Sub
引用返信 編集キー/
■85227 / inTopicNo.5)  Re[1]: メッセージの表示
□投稿者/ kiku (12回)-(2017/09/22(Fri) 09:17:45)
No85221 (hoho さん) に返信
> 使っているソフトに主導権を与えながら
> VBでメッセージ表示する方法ありましたら
> 教えていただきたいです。

C#ですが、該当する記事を見つけたので貼っておきます。
VBに変換してあげたいのですが、
私自身C#しかわからないのでどなたかの変換を待ちます。

http://www.majishini.net/wp/?p=431

引用返信 編集キー/
■85229 / inTopicNo.6)  Re[1]: メッセージの表示
□投稿者/ 魔界の仮面弁士 (1417回)-(2017/09/22(Fri) 09:52:36)
No85221 (hoho さん) に返信
> 普段、VBのフォームを最小化しておいて
> 時間が経過すると(何かのタイミング)フォームを普通の状態にして
> ( FormWindowState.Normal)
> PCモニターの右上にメッセージ表示するプログラムの作成を考えています。
で、そこまでは完成している…ということでよいのですね?
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=11906&reno=11905&oya=11904&mode=msgview&page=0

マルチモニタ環境のときに、どのモニターの右上を使うのかとか、
タスクバーが上や右にある場合に、タスクバーに重ねた座標にするのか否かなど、
幾つか気になる点はあるのですが、それはさておき。


> また、PCでは数字入力するソフトを使ていまして
> カーソルを常にそのソフト置いておきたいです。
非表示+タスクトレイ表示などで待機させるのではなく、
あくまでも最小化しておきたいということであれば、

If WindowState = FormWindowState.Minimized Then
 ShowWindow(Handle, SW_SHOWNOACTIVATE)
Else
 ShowWindow(Handle, SW_SHOWMINNOACTIVE)
End If

とか。
引用返信 編集キー/
■85231 / inTopicNo.7)  Re[4]: メッセージの表示
□投稿者/ hoho (3回)-(2017/09/22(Fri) 20:59:14)
No85226 (しろ さん) に返信

>
> If TextBox1.Text <= 1 Then
> ' フォームを最小化する
> Me.WindowState = FormWindowState.Minimized
> End If
> ' フォームを最大化する
> Me.WindowState = FormWindowState.Maximized

返答ありがとうございます。
こちの部分は既にできています。


引用返信 編集キー/
■85232 / inTopicNo.8)  Re[2]: メッセージの表示
□投稿者/ hoho (4回)-(2017/09/22(Fri) 21:00:36)
No85227 (kiku さん) に返信

>>使っているソフトに主導権を与えながら
>>VBでメッセージ表示する方法ありましたら
>>教えていただきたいです。
>
> C#ですが、該当する記事を見つけたので貼っておきます。
> VBに変換してあげたいのですが、
> 私自身C#しかわからないのでどなたかの変換を待ちます。
>
> http://www.majishini.net/wp/?p=431
>

返答ありがとうございます。

まさに、こちらのページのことをやりたいのですが・・・


引用返信 編集キー/
■85233 / inTopicNo.9)  Re[2]: メッセージの表示
□投稿者/ hoho (5回)-(2017/09/22(Fri) 21:18:37)
No85229 (魔界の仮面弁士 さん) に返信
> ■No85221 (hoho さん) に返信
>>普段、VBのフォームを最小化しておいて
>>時間が経過すると(何かのタイミング)フォームを普通の状態にして
>>( FormWindowState.Normal)
>>PCモニターの右上にメッセージ表示するプログラムの作成を考えています。
> で、そこまでは完成している…ということでよいのですね?
> http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=11906&reno=11905&oya=11904&mode=msgview&page=0
>
> マルチモニタ環境のときに、どのモニターの右上を使うのかとか、
> タスクバーが上や右にある場合に、タスクバーに重ねた座標にするのか否かなど、
> 幾つか気になる点はあるのですが、それはさておき。
>
>
>>また、PCでは数字入力するソフトを使ていまして
>>カーソルを常にそのソフト置いておきたいです。
> 非表示+タスクトレイ表示などで待機させるのではなく、
> あくまでも最小化しておきたいということであれば、
>
> If WindowState = FormWindowState.Minimized Then
>  ShowWindow(Handle, SW_SHOWNOACTIVATE)
> Else
>  ShowWindow(Handle, SW_SHOWMINNOACTIVE)
> End If
>
> とか。

ShowWindow, SW_SHOWNOACTIVATE, SW_SHOWMINNOACTIVE 部に警告がでまして
「宣言されていません。アクセスできない保護レベルになっています」とでます。

エラー修正オプションなど使用しますと
次のが生成されるのですが、
こちらで対応できるのでしょうか?

Private Sub ShowWindow(intPtr As IntPtr, p2 As Object)
Throw New NotImplementedException
End Sub


引用返信 編集キー/
■85234 / inTopicNo.10)  Re[2]: メッセージの表示
□投稿者/ みい (66回)-(2017/09/22(Fri) 21:36:34)
No85227 (kiku さん) に返信
> ■No85221 (hoho さん) に返信
> C#ですが、該当する記事を見つけたので貼っておきます。
> VBに変換してあげたいのですが、
> 私自身C#しかわからないのでどなたかの変換を待ちます。
>
> http://www.majishini.net/wp/?p=431
>

これかしら?
http://rossy-dev.blogspot.jp/2012/06/vbnet_27.html

引用返信 編集キー/
■85235 / inTopicNo.11)  Re[3]: メッセージの表示
□投稿者/ hoho (6回)-(2017/09/23(Sat) 17:36:36)
No85234 (みい さん) に返信
> ■No85227 (kiku さん) に返信
>>■No85221 (hoho さん) に返信
>>C#ですが、該当する記事を見つけたので貼っておきます。
>>VBに変換してあげたいのですが、
>>私自身C#しかわからないのでどなたかの変換を待ちます。
>>
>>http://www.majishini.net/wp/?p=431
>>
>
> これかしら?
> http://rossy-dev.blogspot.jp/2012/06/vbnet_27.html
>

返答ありがとうございます。上手くいきませんでした。
原因がわからないです。。

SetWindowPos での戻り値は 1 なので正常だと思われます。

フォームをFormWindowState.Minimized → FormWindowState.Normal に変化させたときに
以下より、MsgBox("in")が出力されるのですが、
テスト用として使っている メモ帳 からカーソルが外れてしまいます。

Windows7環境です。

Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim p As CreateParams = MyBase.CreateParams
If Not MyBase.DesignMode Then
MsgBox("in")
p.ExStyle = p.ExStyle Or (WS_EX_NOACTIVATE)
End If
Return p
End Get
End Property







引用返信 編集キー/
■85236 / inTopicNo.12)  Re[4]: メッセージの表示
□投稿者/ みい (67回)-(2017/09/23(Sat) 19:08:07)
No85235 (hoho さん) に返信
> フォームをFormWindowState.Minimized → FormWindowState.Normal に変化させたときに
> 以下より、MsgBox("in")が出力されるのですが、
> テスト用として使っている メモ帳 からカーソルが外れてしまいます。
Style変える前にMsgBox出してるし。
まあStyle変えた後に出しても、あくまでFormに適用されるものだから、
MsgBoxには適用されずフォーカス移ると思いますよ。

・Form上にメッセージを表示させる
・MsgボックスもどきのFormを作って出す
(ただしそのFormにも同様の処理をすること)

引用返信 編集キー/
■85237 / inTopicNo.13)  Re[2]: メッセージの表示
□投稿者/ hoho (7回)-(2017/09/23(Sat) 20:27:56)
No85229 (魔界の仮面弁士 さん) に返信
> ■No85221 (hoho さん) に返信
>>普段、VBのフォームを最小化しておいて
>>時間が経過すると(何かのタイミング)フォームを普通の状態にして
>>( FormWindowState.Normal)
>>PCモニターの右上にメッセージ表示するプログラムの作成を考えています。
> で、そこまでは完成している…ということでよいのですね?
> http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=11906&reno=11905&oya=11904&mode=msgview&page=0
>
> マルチモニタ環境のときに、どのモニターの右上を使うのかとか、
> タスクバーが上や右にある場合に、タスクバーに重ねた座標にするのか否かなど、
> 幾つか気になる点はあるのですが、それはさておき。
>
>
>>また、PCでは数字入力するソフトを使ていまして
>>カーソルを常にそのソフト置いておきたいです。
> 非表示+タスクトレイ表示などで待機させるのではなく、
> あくまでも最小化しておきたいということであれば、
>
> If WindowState = FormWindowState.Minimized Then
>  ShowWindow(Handle, SW_SHOWNOACTIVATE)
> Else
>  ShowWindow(Handle, SW_SHOWMINNOACTIVE)
> End If
>
> とか。

返答ありがとうございます。

以下を追加して試してみなしたが
カーソルがフォームへ

Public Const SW_SHOWNOACTIVATE = 4 '' ウィンドウを直前の位置とサイズで表示します。アクティブなウィンドウはアクティブな状態を維持します。
Public Const SW_SHOWMINNOACTIVE = 7 '' ウィンドウを最小化します。アクティブなウィンドウは、アクティブな状態を維持します。非アクティブなウィンドウは、
'' 非アクティブなままです。

<DllImport("USER32.DLL", CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow( _
ByVal hWnd As System.IntPtr, _
ByVal nCmdShow As Integer) As Integer
End Function


WindowState = FormWindowState.Normal のときフォームにフォーカスが移り
WindowState = FormWindowState.Minimized になっても
メモ帳へフォーカスが戻ることはありませんでした。

常にメモ帳へフォーカスを残しつつ
フォームを変化させたいです。





引用返信 編集キー/
■85238 / inTopicNo.14)  Re[5]: メッセージの表示
□投稿者/ hoho (8回)-(2017/09/23(Sat) 20:38:56)
No85236 (みい さん) に返信
> ■No85235 (hoho さん) に返信
>>フォームをFormWindowState.Minimized → FormWindowState.Normal に変化させたときに
>>以下より、MsgBox("in")が出力されるのですが、
>>テスト用として使っている メモ帳 からカーソルが外れてしまいます。
> Style変える前にMsgBox出してるし。
> まあStyle変えた後に出しても、あくまでFormに適用されるものだから、
> MsgBoxには適用されずフォーカス移ると思いますよ。
>
> ・Form上にメッセージを表示させる
> ・MsgボックスもどきのFormを作って出す
> (ただしそのFormにも同様の処理をすること)
>

返答ありがとうございます。

WindowState = FormWindowState.Normal になったときに
Protected Overrides ReadOnly Property CreateParams() As CreateParams部分をプログラムが通っているか(表現がヘタですみません)
確認揚として msgbox使用しました。
msgbox無くてもカーソルは移動します。

また、Form上にメッセージに表示させても状況は変わらないです。
Me.xxxxx.Text = "■うまくいかない■"


原因がよく分からないのですが、
メモ帳のカーソルの点減するタイミングと
フォームの、Protected Overrides ReadOnly Property CreateParams() As CreateParams
を通る(起動する)タイミング
など関係あるものでしょうか?





引用返信 編集キー/
■85240 / inTopicNo.15)  Re[6]: メッセージの表示
□投稿者/ みい (68回)-(2017/09/25(Mon) 11:48:18)
No85238 (hoho さん) に返信
> WindowState = FormWindowState.Normal になったときに
> Protected Overrides ReadOnly Property CreateParams() As CreateParams部分をプログラムが通っているか(表現がヘタですみません)
> 確認揚として msgbox使用しました。
> msgbox無くてもカーソルは移動します。
>
> また、Form上にメッセージに表示させても状況は変わらないです。
> Me.xxxxx.Text = "■うまくいかない■"
Form上にフォーカスが移るコントロールがある場合は
これだけではうまくいきません。

何のコントロールを貼り付けているかは分かりませんが
貼り付けているコントロールのTabStopプロパティを
Falseにしてみてください。
※ただしそのコントロールをクリックしたりするとフォーカスを
移ります。
 Formの操作が終わった時点でフォーカスを解除してください。
  Me.ActiveControl = Nothing


引用返信 編集キー/
■85241 / inTopicNo.16)  Re[7]: メッセージの表示
□投稿者/ hoho (9回)-(2017/09/25(Mon) 17:11:18)
No85240 (みい さん) に返信
> ■No85238 (hoho さん) に返信
>>WindowState = FormWindowState.Normal になったときに
>>Protected Overrides ReadOnly Property CreateParams() As CreateParams部分をプログラムが通っているか(表現がヘタですみません)
>>確認揚として msgbox使用しました。
>>msgbox無くてもカーソルは移動します。
>>
>>また、Form上にメッセージに表示させても状況は変わらないです。
>>Me.xxxxx.Text = "■うまくいかない■"
> Form上にフォーカスが移るコントロールがある場合は
> これだけではうまくいきません。
>
> 何のコントロールを貼り付けているかは分かりませんが
> 貼り付けているコントロールのTabStopプロパティを
> Falseにしてみてください。
> ※ただしそのコントロールをクリックしたりするとフォーカスを
> 移ります。
>  Formの操作が終わった時点でフォーカスを解除してください。
>   Me.ActiveControl = Nothing
>
>

返答ありがとうございます。

次のように変更してみたのですが
状況は変わらないです。

私の記載方法に問題ないでしょうか?

次は Timer1_Tick() の中でおこなっています。
また、Timer1_Tick()内ではテキストファイルを読み込んでいます。( FileOpen )

'strSendは テキストファイルの中身です
If strSend = "1" Then
If Me.WindowState = FormWindowState.Minimized Then

  'フォーム上に Labelだけがあるので Me.xxxx.TabStop = False しています。
Me.xxxx.TabStop = False
Me.WindowState = FormWindowState.Normal
end if
Elseif strSend = "0" Then
If Me.WindowState = FormWindowState.Normal Then
Me.WindowState = FormWindowState.Minimized
end if
end if

Me.ActiveControl = Nothing




Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
'画面位置
Me.Location = New Point(pcInfo.Form_point_x, pcInfo.Form_point_y)
Me.xxxx.Text = "■ うまくいかない ■"

Dim lngRet As Long = SetWindowPos(Me.Handle, HWND_TOPMOST, 0, 0, 0, 0, _
SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOSENDCHANGING Or SWP_NOACTIVATE)

Call SetWindowLong(Me.Handle, GWL_EXSTYLE, GetWindowLong(Me.Handle, GWL_EXSTYLE) Or WS_EX_NOACTIVATE)

'タイマー起動
Timer1.Interval = 1000
Timer1.Enabled = True
'最小化表示
Me.WindowState = FormWindowState.Minimized

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
引用返信 編集キー/
■85242 / inTopicNo.17)  Re[8]: メッセージの表示
□投稿者/ みい (69回)-(2017/09/25(Mon) 18:59:45)
No85241 (hoho さん) に返信
スマートでなくていいなら、
Me.WindowState = FormWindowState.Normal
の前で今アクティブなウィンドウを取得して、
Normalにした後でそのウィンドウにフォーカスを移す処理を入れる、かなぁ。

Labelだけなら
Me.xxxx.TabStop = False
Me.ActiveControl = Nothing
はいらないです。
引用返信 編集キー/
■85243 / inTopicNo.18)  Re[9]: メッセージの表示
□投稿者/ hoho (10回)-(2017/09/25(Mon) 20:36:56)
No85242 (みい さん) に返信
> ■No85241 (hoho さん) に返信
> スマートでなくていいなら、
> Me.WindowState = FormWindowState.Normal
> の前で今アクティブなウィンドウを取得して、
> Normalにした後でそのウィンドウにフォーカスを移す処理を入れる、かなぁ。
>
> Labelだけなら
> Me.xxxx.TabStop = False
> Me.ActiveControl = Nothing
> はいらないです。

返答ありがとうございます。

今アクティブなウィンドウはWeb(IE)になります。

ネットで調べていると Webからだと(ActiveX)と記載されていますが、

Web(IE)へのフォーカス移動について

使用した経験などありましたら、どうぞご教授ください。

引用返信 編集キー/
■85246 / inTopicNo.19)  Re[10]: メッセージの表示
□投稿者/ 魔界の仮面弁士 (1420回)-(2017/09/25(Mon) 22:45:04)
No85243 (hoho さん) に返信
> 今アクティブなウィンドウはWeb(IE)になります。

下記の実験コードを書いて試してみましたが、相手がメモ帳であれ Internet Explorer であれ、
アクティブなウィンドウが切り替わることはありませんでした。


Public Class Form1
    Private Declare Function ShowWindow Lib "user32" (hWnd As IntPtr, nCmdShow As Integer) As Boolean
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'No85240 の懸念点を確認するため、コントロール無しの状態で検証する
        Controls.Clear()
        'プライマリモニタの右上に配置する
        StartPosition = FormStartPosition.Manual
        Dim rect = Screen.PrimaryScreen.WorkingArea
        SetBounds(rect.Right - 200, rect.Top, 200, 140)
        TopMost = True
        ShowInTaskbar = True
        '定期的に最小化/復元するためのタイマー
        Timer1.Interval = 100
        Timer1.Start()
    End Sub
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        '毎分 5,15,25,35,45,55秒の時に最小化し
        '毎分 0,10,20,30,40,50秒の時に通常表示に戻す
        Select Case Now.Second Mod 10
            Case 0
                Const SW_SHOWNOACTIVATE As Integer = 4
                ShowWindow(Handle, SW_SHOWNOACTIVATE)
            Case 5
                Const SW_SHOWMINNOACTIVE As Integer = 7
                ShowWindow(Handle, SW_SHOWMINNOACTIVE)
        End Select
    End Sub
    Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            'このフォームはアクティブにならない
            Const WS_EX_NOACTIVATE As Integer = &H8000000
            Dim p As CreateParams = MyBase.CreateParams
            If Not MyBase.DesignMode Then
                p.ExStyle = p.ExStyle Or WS_EX_NOACTIVATE
            End If
            Return p
        End Get
    End Property
End Class

引用返信 編集キー/
■85247 / inTopicNo.20)  Re[11]: メッセージの表示
 
□投稿者/ hoho (11回)-(2017/09/25(Mon) 23:18:09)
No85246 (魔界の仮面弁士 さん) に返信
> ■No85243 (hoho さん) に返信
>>今アクティブなウィンドウはWeb(IE)になります。
>
> 下記の実験コードを書いて試してみましたが、相手がメモ帳であれ Internet Explorer であれ、
> アクティブなウィンドウが切り替わることはありませんでした。
>
>
> Public Class Form1
> Private Declare Function ShowWindow Lib "user32" (hWnd As IntPtr, nCmdShow As Integer) As Boolean
> Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
> 'No85240 の懸念点を確認するため、コントロール無しの状態で検証する
> Controls.Clear()
> 'プライマリモニタの右上に配置する
> StartPosition = FormStartPosition.Manual
> Dim rect = Screen.PrimaryScreen.WorkingArea
> SetBounds(rect.Right - 200, rect.Top, 200, 140)
> TopMost = True
> ShowInTaskbar = True
> '定期的に最小化/復元するためのタイマー
> Timer1.Interval = 100
> Timer1.Start()
> End Sub
> Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
> '毎分 5,15,25,35,45,55秒の時に最小化し
> '毎分 0,10,20,30,40,50秒の時に通常表示に戻す
> Select Case Now.Second Mod 10
> Case 0
> Const SW_SHOWNOACTIVATE As Integer = 4
> ShowWindow(Handle, SW_SHOWNOACTIVATE)
> Case 5
> Const SW_SHOWMINNOACTIVE As Integer = 7
> ShowWindow(Handle, SW_SHOWMINNOACTIVE)
> End Select
> End Sub
> Protected Overrides ReadOnly Property CreateParams() As CreateParams
> Get
> 'このフォームはアクティブにならない
> Const WS_EX_NOACTIVATE As Integer = &H8000000
> Dim p As CreateParams = MyBase.CreateParams
> If Not MyBase.DesignMode Then
> p.ExStyle = p.ExStyle Or WS_EX_NOACTIVATE
> End If
> Return p
> End Get
> End Property
> End Class

返答ありがとうございます。

メモ帳ではうまくいきました。

明日IEで確認してみます。
引用返信 編集キー/

このトピックをツリーで一括表示

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -