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

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

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

Re[12]: ウインドウの位置・サイズを指定して開く方法


(過去ログ 141 を表示中)

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

■82793 / inTopicNo.1)  ウインドウの位置・サイズを指定して開く方法
  
□投稿者/ じき (1回)-(2017/02/05(Sun) 10:50:36)

分類:[.NET 全般] 

VB.NETで
フォルダーを開くときに
ウインドウの位置・サイズを指定して開きたいのですが
どうすれば良いですか?


ウインドウの位置・サイズは
MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)

で設定できるのは分かるのですが

フォルダを開くと同時にハンドルを取得するにはどうしたら良いですか?









引用返信 編集キー/
■82795 / inTopicNo.2)  Re[1]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ 魔界の仮面弁士 (1111回)-(2017/02/05(Sun) 19:18:36)
No82793 (じき さん) に返信
> VB.NETで
> フォルダーを開くときに
> ウインドウの位置・サイズを指定して開きたいのですが
> どうすれば良いですか?

System.Diagnostics.ProcessWindowStyle を指定するぐらいはできますが、
位置とサイズについては、起動後に指定するしか無いと思います。


どうしても起動と同時に位置決めを行いたいのであれば、
WH_CBT について調べてみて下さい。
http://mrxray.on.coocan.jp/Delphi/plSamples/266_App_CreateOpen.htm
引用返信 編集キー/
■82798 / inTopicNo.3)  Re[2]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (3回)-(2017/02/05(Sun) 20:25:56)
ありがとうございます。

起動後に指定するので構いません

System.Diagnostics.ProcessWindowStyle

について調べてみましたが
http://dobon.net/vb/dotnet/process/processwindowstyle.html

最大・最小化などの設定はできますが
ウインドウの位置・サイズは指定できないと思うのですが
どのようにすれば良いですか?
 
引用返信 編集キー/
■82802 / inTopicNo.4)  Re[3]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ 魔界の仮面弁士 (1113回)-(2017/02/06(Mon) 11:11:09)
No82798 (じき さん) に返信
> 最大・最小化などの設定はできますが
> ウインドウの位置・サイズは指定できないと思うのですが

ですから、起動時に指定することはできない、と回答したつもりです。

(起動後に指定する方法については、既に御自身で書かれていますよね)
引用返信 編集キー/
■82803 / inTopicNo.5)  Re[4]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (4回)-(2017/02/06(Mon) 11:35:51)
ありがとうございます。

MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)

を使うということでしょうか?

しかし、フォルダーを開くと同時にそのハンドルを取得するにはどうすれば良いですか?
フォルダーのパス名からハンドルを検索して調べるしかないのでしょうか?

引用返信 編集キー/
■82804 / inTopicNo.6)  Re[5]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ 魔界の仮面弁士 (1114回)-(2017/02/06(Mon) 12:40:44)
2017/02/06(Mon) 12:48:09 編集(投稿者)

No82803 (じき さん) に返信
> MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)
> を使うということでしょうか?

それに加えて、先に紹介した Delphi 向けサイトにもあるよう、
SetWindowPlacement が選択肢に入ります。

Get/SetWindowPlacement については、下記の点もご注意ください。
http://www.geocities.jp/midorinopage/Tips/GetWindowPlacement.html


そのほか、OS によっては、
 Dim o = CreateObject("InternetExplorer.Application")
 o.Navigate2( "C:\Folder" )
 o.Left = 15
 o.Top = 30
 o.Width = 700
 o.Height = 600
 o.Visible = True
 'MsgBox(o.HWND)
のようにして処理できる場合もあります。


うまくいく環境もあれば、Navigate2 の時点で別プロセスが起動してしまう環境も
あるので、必ずしも確実な方法とは言えませんが、一度試してみては如何でしょう。


> しかし、フォルダーを開くと同時にそのハンドルを取得するにはどうすれば良いですか?

単一の Explorer.exe のプロセスから、複数のウィンドウが開かれる可能性もあるので
MainWindowHandle だけでは特定できないと思いますので、先に紹介した
URL でも使われていた EnumWindows で列挙して絞り込むなどしてみてください。
http://dobon.net/vb/dotnet/process/enumwindows.html

あるいは、ShellWindows コレクションを列挙することでも、
該当するパスを開いているウィンドウを特定できるかと思います。
引用返信 編集キー/
■82805 / inTopicNo.7)  Re[6]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (5回)-(2017/02/06(Mon) 12:51:03)
ありがとうございます。

できれば、OS依存性のあるコードは使いたくないと考えております。

EnumWindowsで列挙する方法だと、
パスが異なりフォルダーが同じの場合にうまくいかないと思います

C:\aaaとD:\bbb
を識別できないと思います。

ShellWindows コレクションなら識別できるのでしょうか?

可能な方法があれば教えてください。
 
引用返信 編集キー/
■82808 / inTopicNo.8)  Re[7]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ 魔界の仮面弁士 (1115回)-(2017/02/06(Mon) 15:07:51)
No82805 (じき さん) に返信
> ShellWindows コレクションなら識別できるのでしょうか?

For Each で列挙した個々のオブジェクトの LocationURL プロパティを調べれば、
「file:///C:Program%20Files%20(x86)」といった文字列が得られるので
物理フォルダーであれば、絞り込めるのではないでしょうか。
引用返信 編集キー/
■82810 / inTopicNo.9)  Re[8]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (6回)-(2017/02/06(Mon) 15:34:17)
ありがとうございます。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=53715&KLOG=90

このページを参考に

Dim windows As SHDocVw.ShellWindows
Dim window As SHDocVw.IWebBrowser2

windows = New SHDocVw.ShellWindows
For Each window In windows
If window.FullName = "C:\Windows\explorer.exe" Then
Debug.Print(window.LocationURL)
End If
Next


とやってみたのですが

windowsがSHDocVw.ShellWindowsでコレクション型ではない、というエラーがでてうまくいかないのですが
どう改善すれば良いでしょうか?

 
引用返信 編集キー/
■82811 / inTopicNo.10)  Re[9]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (7回)-(2017/02/06(Mon) 15:51:29)
すいません、やり方が分かりました
 
引用返信 編集キー/
■82812 / inTopicNo.11)  Re[10]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (8回)-(2017/02/06(Mon) 16:00:38)
以下のコードまでたどり着いたのですが
ハンドルをうまく取得することができません

どのようにすれば良いでしょうか?


Dim wins = GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39")

For i As Integer = 0 To wins.count - 1

    Dim win As Object = wins.Item(CObj(i))
    Dim name As String = Path.GetFileNameWithoutExtension(CStr(win.FullName))

    If name.ToUpper() = "EXPLORER" Then

          Dim u As New Uri(win.LocationURL())
          Dim winPath As String = u.LocalPath + Uri.UnescapeDataString(u.Fragment)

          If winPath.ToUpper() = "C:\AAA" Then


          Dim p As Process = Process.Start(winPath)

            'ウィンドウの位置を(0, 10)に、サイズを300x200に変更する
            MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)


          End If


    End If

Next




引用返信 編集キー/
■82813 / inTopicNo.12)  Re[11]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (10回)-(2017/02/06(Mon) 16:09:02)
http://scripting.cocolog-nifty.com/blog/2007/10/explorerexevba_377b.html


win.hwmd
でハンドルを取得できるはずなのにうまくいきません
なぜでしょうか?
 
引用返信 編集キー/
■82815 / inTopicNo.13)  Re[12]: ウインドウの位置・サイズを指定して開く方法
□投稿者/ じき (11回)-(2017/02/06(Mon) 18:35:12)
hwmdがlongだったので
IntPtr.op_Explicit
でintptrに変換するとうまくいきました
 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -