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

わんくま同盟

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

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


(過去ログ 147 を表示中)
■86114 / )  Re[1]: ファイルを開くときの大きさを指定したい
□投稿者/ 魔界の仮面弁士 (1514回)-(2017/12/19(Tue) 09:52:12)
2017/12/19(Tue) 09:53:05 編集(投稿者)

No86108 (まなみ さん) に返信
> VB.NET ボタンをクリックしてからフォトViewerでpngファイルを開く際に、
> ファイルを開くときの大きさを指定して開きたい
Windows フォトビューワー限定の方法を探している、ということでしょうか。
(Windows フォトビューワーは、Windows 10 で廃止されています)
https://support.microsoft.com/ja-jp/help/4027135/windows-10-photo-viewer


> Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start("\\サーバ名\共有\共有1\写真.png")
> 'ウィンドウの位置指定
> MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)
関連付け起動の場合、起動するのがフォトビューワーであるとは限りません。

また、Process.Start(String) の場合に Nothing が返される理由については、下記で述べられています。
https://dobon.net/vb/dotnet/process/shell.html
http://bbs.wankuma.com/index.cgi?mode=al2&namber=67866&KLOG=115



> MoveWindow(p.MainWindowHandle, 0, 10, 300, 200, 1)のコードがなければ、
> pngファイルを開く事は可能ですが、ファイルを開くときの大きさの指定ができません

起動後に HWND から辿ってサイズを変更するのではなく、起動前に
 HKEY_CURRENT_USER\Software\Microsoft\Windows Photo Viewer\Viewer\MainWndPos
をセットしておくというのはどうでしょう。サイズを変えながら連続起動するなどの用途には向きませんが。


やはり HWND を得たい、ということであれば、たとえば

Dim args As String
'案1
args = """C:\Program Files (x86)\Windows Photo Viewer\PhotoViewer.dll"",ImageView_Fullscreen "
'
'案2
'args = "C:\WINDOWS\System32\shimgvw.dll,ImageView_Fullscreen "
'
args &= "\\サーバ名\共有\共有1\写真.png"

Dim psi As New ProcessStartInfo("rundll32.exe", args)
Dim p As Process = Process.Start(psi)
MsgBox("起動待ち")
Dim hwnd As IntPtr = p.MainWindowHandle

こんな感じで渡すという手はあります。

ただし起動して間もないうちは、p.MainWindowHandle が
IntPtr.Zero を返してくる可能性がありますので、
待ち合わせをどのように実装するのかが悩みどころです。
(p.WaitForInputIdle でも待ち合わせできないようで)
返信 編集キー/


管理者用

- Child Tree -