![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VB.netでWin32APIのFindWindowExを使うと,
たとえばスタートボタンのHWNDを拾ってくるとき,
本当なら65662(6.0のSpy++で確認+10進変換)が返ってきて欲しいんですが,
9222812402616107008という,異常な数が返ってきます.
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpsz1 As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal lpsz2 As String) As Long
とやってあります.
VB6.0のAPIビューワからコピペして,MarshalAsをつけてみました.
(初心者なので,わけわからないまま付けましたけど;
hWnd_ShellTrayWnd = FindWindowEx(0,0,"Shell_TrayWnd",vbNullString)
hWnd_StartButton = FindWindowEx(hwnd_ShellTrayWnd,0,"Button",vbNullString)
とやってるのですが・・・.
不思議なのは,hWnd_ShellTrayWndが9222812402616238204になっているにもかかわらず,次のFindWindowExで,hWnd_StartBtnが9222812402616107008になってるところです・・・. しかも,ありえないクラス名(KeyBoadぐちゃぐちゃ押し)を指定しても,なぜか数が返ってくるんです.
FindWindowExを成功させる(きちんとした数を取る)方法,またはFindWindowEx以外でhWndを拾ってくる方法,ありましたら,教えてください.
No.4ベストアンサー
- 回答日時:
あちゃぁ、英語のサイトから持ってきたのでコメント診て無かったです。
すみません。翻訳しても良くわからなかったですが、どう見ても記述が違いますね。
で、再度アドバイスです。
>Private Declare Function FindWindowEx ~
Integerを全てLongに書き換えてやってますよね。
引数・戻り値を全てIntegerにしてやって見てください。
当方では、問題なくウィンドウハンドルの取得が出来ましたよ。
ちなみに、MarshalAs属性は使用しなくてOKでした。
使用すると、戻り値が0になりました。
当方で確認したソースを記述します。
以下よりソース。
Option Strict Off
Option Explicit On
Imports System.Runtime.InteropServices
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Integer,
ByVal hWnd2 As Integer,
ByVal lpsz1 As String,
ByVal lpsz2 As String) As Integer
Private Sub Form1_Load(ByVal eventSender As System.Object, _
ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim hWnd_StartButton As Integer
Dim hwnd_ShellTrayWnd As Integer
hwnd_ShellTrayWnd = FindWindowEx(0, 0, "Shell_TrayWnd", vbNullString)
hWnd_StartButton = FindWindowEx(hwnd_ShellTrayWnd, 0, "Button", vbNullString)
System.Diagnostics.Debug.WriteLine(hwnd_ShellTrayWnd & ";" & hWnd_StartButton)
End Sub
No.2
- 回答日時:
もしかしたら、宣言に問題があるかもです。
(私の勝手な読みなので、違ってたら無視してください。)
FindWindowExのサンプルが見つからなかったので、見つかったFindWindowの
宣言サンプルを以下に書きます。
.NETでは、以下のように宣言するようです。参考になれば幸いです。
[DllImport("user32.dll")]
public extern static int FindWindow(string strClassName, string strWindowName);
この回答への補足
このソースだと・・・波線引かれました.
あと,FindWindowの戻り値は,(VBでは)Longだったと思うんですが.
J#.netなら,
/** @dll.import("user32") */
private static native int FindWindow(string strClassName, string strWindowName);
で宣言できましたが;
(VJ++6.0と全く同じコード
最後にintが来てないところを見ると,このソースはVBではないような気がしますが・・・;
C#じゃないですかね・・・(わかりませんが;もってないので
VBだと,As Integerという風なります.(「int」というのはないですね.)
あと,質問時書き忘れたんですが・・・
私のはVisualBasic.net Standardです.
スタンダード版だからできないのでしょうか・・・
No.1
- 回答日時:
サンプルならいたるところに落ちてます。
Public 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
Public Declare Function GetDesktopWindow Lib "user32" () As Long
Sub Main()
Dim lngDeskTopWnd As Long
Dim lngTrayWnd As Long
Dim lngStartBtnWnd As Long
lngDeskTopWnd = GetDesktopWindow
lngTrayWnd = FindWindowEx(lngDeskTopWnd, 0&, "Shell_TrayWnd", vbNullString)
lngStartBtnWnd = FindWindowEx(lngTrayWnd, 0&, "Button", vbNullString)
End Sub
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=199357
この回答への補足
はい.ソースを見る限り,「VisualBasic6.0」なら動きそうですが・・・.
(というか,動きますね.6.0なら.
私のVB.netでは,9222812402616107008が返ってきました.
どうやら,このソースではできないみたいです.
(私が使いたいのはVB.netなので・・・.
あと,このソースについてなのですが,
lngDeskTopWnd = GetDesktopWindow
lngTrayWnd = FindWindowEx(lngDeskTopWnd, 0&, "Shell_TrayWnd", vbNullString)
ではなく,
lngTrayWnd = FindWindowEx(0&, 0&, "Shell_TrayWnd", vbNullString)
としてもできそうなのですが・・・.
今はVB6.0はアンインストールしてしまったので,わかりません;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) excel vba 参照渡しと値渡し 2 2022/04/27 10:45
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VB.NETのSendMessageを教えてください
Visual Basic(VBA)
-
他のアプリケーションとの連携
Visual Basic(VBA)
-
VB.NETで子ウィンドウの列挙の仕方がわかりません。
Visual Basic(VBA)
-
-
4
ウィンドウにキー送信で ENTER を送りたい
Visual Basic(VBA)
-
5
【C#】FindWindowExの使い方を教えてください
その他(プログラミング・Web制作)
-
6
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
7
Process.Startで起動したアプリを最大化したいです。VB.NET
Visual Basic(VBA)
-
8
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
9
VB.netでDLLを読み込んで実行する際に、スタックを不安定にしていますというエラーが出ます。
Visual Basic(VBA)
-
10
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
11
FindWindowの戻り値が違う!?
C言語・C++・C#
-
12
親ウインドウにあるOKボタンを押す方法
Visual Basic(VBA)
-
13
ウィンドウを最前面にできません
Visual Basic(VBA)
-
14
WinAPIで電卓をクリック
Visual Basic(VBA)
-
15
他アプリケーション’(ウィンドウ)のハンドル取得方法
Visual Basic(VBA)
-
16
ExcelマクロのSendkeysで処理途中に次のキーが送られる
Excel(エクセル)
-
17
ポインタについて
Visual Basic(VBA)
-
18
他アプリの操作(メニューバー)
Visual Basic(VBA)
-
19
タスクバーを自動で隠すの切り替え
Windows 7
-
20
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbaから他のアプリを終了
-
メッセージボックスの選択ボタ...
-
SendMessage で ESC など
-
msgboxの表示位置
-
PCのシャットダウン処理
-
VB.netでFindWindowExやると・...
-
他のウィンドウのボタンを自動...
-
WINAPI 他のウインドウを重ね...
-
Excel VBA で外部アプリケーシ...
-
マウスホイールをフックしたい
-
VBA 複数セルが空白なら印刷さ...
-
マウスの右クリック+Shiftキー...
-
CloseHandle()
-
メッセージハンドラ
-
ElseIfの使い方。
-
SetWindowText関数について
-
フックをするなら逆アセンブル?
-
DEVICECHANGE() の受け取り
-
WM_CLEARなど使えないメッセー...
-
エクセルで作った新しいウイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
msgboxの表示位置
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
SetWindowText関数について
-
VBAでコントロールのハンドルを...
-
Excel VBA で外部アプリケーシ...
-
VB.netでFindWindowExやると・...
-
メッセージハンドラ
-
点滅で知らせる方法
-
CloseHandle()
-
システム例外のメッセージを変...
-
WM_NCLBUTTONUPについて
-
デスクトップ上のアイコンの位...
-
メッセージループについて
-
キーボード・フックのアプリを...
-
VBでRegisterWindowMessage関数...
-
WM_CTLCOLORDLG
-
windowsメールスロットについて...
-
マウスフックについて
おすすめ情報