■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 でも待ち合わせできないようで)
|
|