トップ回答者
他のアプリケーションを終了させたい

質問
回答
-
Windows Forms アプリケーションということは、.NET (C#/VB/F#) なんかを利用されているということですよね?これらは、マネジド環境用の開発向けなので 64bit native の生成はできません…というのは置いといて、Windows on Windows を利用しないで実行するためには、ターゲットを AnyCPU か x64 にしてください。
x64/ia64 では、64bit 版でも User32.dll という名前ですので、P/Invoke の宣言時に SafeHandle や IntPtr 等の適切な型が設定されていれば、そのまま動作するはずです。すでに確認されていて、動作しないために x86 にされているのであれば、ハンドル型を int で宣言しているなどのプログラミングミスが想定されるので、そのあたりの状況を含めて、もうすこし詳細な情報を開示されるとよいかと思います。
- 回答としてマーク 村尾DOS 2011年6月29日 9:42
すべての返信
-
Windows Forms アプリケーションということは、.NET (C#/VB/F#) なんかを利用されているということですよね?これらは、マネジド環境用の開発向けなので 64bit native の生成はできません…というのは置いといて、Windows on Windows を利用しないで実行するためには、ターゲットを AnyCPU か x64 にしてください。
x64/ia64 では、64bit 版でも User32.dll という名前ですので、P/Invoke の宣言時に SafeHandle や IntPtr 等の適切な型が設定されていれば、そのまま動作するはずです。すでに確認されていて、動作しないために x86 にされているのであれば、ハンドル型を int で宣言しているなどのプログラミングミスが想定されるので、そのあたりの状況を含めて、もうすこし詳細な情報を開示されるとよいかと思います。
- 回答としてマーク 村尾DOS 2011年6月29日 9:42
-
K. Takaoka様
お世話になります。>x64/ia64 では、64bit 版でも User32.dll という名前ですので、P/Invoke の宣言時に SafeHandle や IntPtr 等の適切な型が設定されていれば、そのまま動作するはずです。
恥ずかしい話ですが、これは知りませんでした。
「64bitでは動かいよ」と言われたのですが、あいにく検証できる環境が無いため余計な心配をしていたようです。
気になっていたのは以下のコードです。
[DllImport("User32.dll", CharSet = CharSet.Unicode)]
static extern IntPtr FindWindow(string lpszClass, string lpszWindow);
[DllImport("user32.dll", SetLastError = true)]
static extern int PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);・
IntPtr hWnd;
string sClassName = null;
string sWindowText = "foo";
hWnd = FindWindow(sClassName, sWindowText);
if (hWnd != IntPtr.Zero)
{
PostMessage(hWnd, 0x10, new IntPtr(0), new IntPtr(0));
}これはなにか問題があるでしょうか。
応急的なテスト環境としてVirtualBoxのゲストOSに64ビット版Windows7をインストールし、AnyCPUでビルドしたものを試しましたが特に問題はないようです。なぜ先方で動かなかったのかは不明です。